https://github.com/keyyard/today-notes
Today Notes is a lightweight, daily task management application built using Next.js, React, TailwindCSS, Prisma, and Postgresql - Supabase. It allows users to create tasks that expire in 24 hours, providing a clean and minimalist interface with support for dark and light themes.
https://github.com/keyyard/today-notes
eslint next next-auth next-rpc nextauth nextjs node postcss postgresql prisma prisma-orm react react-dom reactjs sql tailwindcss typescript
Last synced: 19 days ago
JSON representation
Today Notes is a lightweight, daily task management application built using Next.js, React, TailwindCSS, Prisma, and Postgresql - Supabase. It allows users to create tasks that expire in 24 hours, providing a clean and minimalist interface with support for dark and light themes.
- Host: GitHub
- URL: https://github.com/keyyard/today-notes
- Owner: Keyyard
- License: mit
- Created: 2024-12-01T11:53:18.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-14T00:25:20.000Z (over 1 year ago)
- Last Synced: 2025-03-24T09:12:10.605Z (about 1 year ago)
- Topics: eslint, next, next-auth, next-rpc, nextauth, nextjs, node, postcss, postgresql, prisma, prisma-orm, react, react-dom, reactjs, sql, tailwindcss, typescript
- Language: TypeScript
- Homepage: https://today-notes.keyyard.xyz
- Size: 4.2 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Today Notes
Today Notes is a modern, minimalist daily task manager built with **Next.js 14 App Router**, **React**, **TailwindCSS**, **Prisma**, and **PostgreSQL (Supabase)**. Tasks expire in 24 hours, encouraging focus and productivity—no more endless backlogs!
---
## 🧠 Why "Today Notes"?
**Today Notes** is based on the psychology of immediacy: we procrastinate less when tasks are urgent and actionable. By limiting your list to today, you focus on what matters now. Tasks expire after 24 hours, so you can’t put them off—tomorrow is a new slate.
---
## ✨ Features
- **Google Auth**: Secure login with Google via NextAuth.
- **Task CRUD**: Add, complete, re-add, and auto-expire tasks.
- **Optimistic UI**: Instant feedback for all actions.
- **Theme Switcher**: Light/dark mode with persistent preference.
- **Global State**: Context + custom hooks for task management.
- **Type Safety**: Centralized types, strict API contracts.
- **Error Handling**: User-friendly errors and defensive state.
- **Prisma ORM**: PostgreSQL (Supabase) for robust persistence.
- **Modern Styling**: TailwindCSS, accessible, responsive.
- **Developer Experience**: Barrel exports, clean imports, clear docs.
---
## 🛠️ Tech Stack
- **Frontend**: Next.js 14 App Router, React, TailwindCSS
- **Backend**: Next.js API Routes, Prisma, PostgreSQL (Supabase)
- **Auth**: NextAuth (Google provider)
- **State**: React Context, custom hooks
- **Notifications**: react-hot-toast
- **Testing**: Jest, React Testing Library (see `src/__tests__`)
---
## 🖼️ Screenshots
Home
Task List
Dark Mode
Expired Tasks
---
## 📝 Usage
- **Login via Google:** Click the `Login with Google` button.
- **Add Task:** Click the floating `+` and enter your task.
- **Mark as Done:** Click a task to complete it.
- **Re-add Expired:** Click an expired task to move it back to active.
- **Expiry:** Tasks expire after 24h, deleted after 48h.
- **Theme:** Toggle light/dark mode with the switcher.
---
## 🧩 Architecture & Best Practices
- **Atomic Components:** UI is broken into small, reusable pieces.
- **Centralized Types:** All types in `src/types` for consistency.
- **Repository Pattern:** Data access is abstracted for testability.
- **Service Layer:** Business logic is separated from UI and data.
- **Context & Hooks:** Global state and logic via context/providers and custom hooks.
- **Barrel Exports:** Clean, maintainable imports.
- **Error Handling:** Defensive code, user-friendly errors.
- **Client/Server Boundaries:** "use client" only where needed.
---
## Architecture Flow
```
1. User interacts with UI (e.g., adds a task).
v
2. Service layer (frontend) sends request to API (e.g., TaskAPIService).
v
3. API Route/Handler receives the request and calls the repository.
v
4. Repository layer interacts with the database (e.g., TaskRepository).
v
5. Database layer (e.g., PostgreSQL) stores the data.
```
## 📄 License
MIT. See [LICENSE](LICENSE).
---
**Enjoy a focused, productive day with Today Notes!**