|
1 | | - |
| 1 | +# LifeStepsAI | Todo Full-Stack Web Application |
2 | 2 |
|
3 | | -<h1 align="center">Bonjour!🫰</h1> |
4 | | -<h3 align="center">I believe in the power of open-source collaboration. You'll find me contributing to various projects, sharing my knowledge, & teaching.</h3> |
5 | | -<img align="right" alt="Coding" width="400" src="https://iili.io/fc2nfta.gif"> |
| 3 | +A modern, full-stack task management application with user authentication, offline support, and an elegant warm design system. Built with Next.js 16+, FastAPI, Better Auth, and Neon PostgreSQL. |
6 | 4 |
|
7 | | -<p align="left"> <img src="https://komarev.com/ghpvc/?username=danielhashmi&label=Profile%20views&color=0e75b6&style=flat" alt="danielhashmi" /> </p> |
| 5 | +## Features |
8 | 6 |
|
| 7 | +### Core Task Management |
| 8 | +- **Create Tasks**: Add new tasks with titles and optional descriptions |
| 9 | +- **View Tasks**: Display all your tasks in a clean, organized dashboard |
| 10 | +- **Update Tasks**: Modify existing task titles or descriptions |
| 11 | +- **Mark Complete**: Toggle task completion status with smooth animations |
| 12 | +- **Delete Tasks**: Remove tasks from your list |
9 | 13 |
|
10 | | -Hi! I'm Daniel, a quiet coder 🧩 |
| 14 | +### Organization & Usability |
| 15 | +- **Priorities**: Assign priority levels (High, Medium, Low) to tasks |
| 16 | +- **Tags**: Categorize tasks with custom tags |
| 17 | +- **Search**: Find tasks by keyword in title or description |
| 18 | +- **Filter**: Filter tasks by status (completed/incomplete) or priority |
| 19 | +- **Sort**: Order tasks by priority, creation date, or title |
11 | 20 |
|
12 | | -- 🔭 Currently studying, thinking, and creating. |
13 | | -- 💬 Proficient in Web Development and Agentic AI. |
| 21 | +### User Experience |
| 22 | +- **User Authentication**: Secure signup/signin with Better Auth and JWT |
| 23 | +- **User Isolation**: Each user only sees their own tasks |
| 24 | +- **Profile Management**: Update display name and profile avatar |
| 25 | +- **Dark Mode**: Toggle between light and warm dark themes |
| 26 | +- **PWA Support**: Install as a native app on desktop or mobile |
| 27 | +- **Offline Mode**: Work offline with automatic sync when reconnected |
| 28 | +- **Responsive Design**: Works beautifully on desktop, tablet, and mobile |
14 | 29 |
|
15 | | -I feel most alive beside my laptop 💻 |
| 30 | +## Tech Stack |
16 | 31 |
|
17 | | -I love to work on innovative, deeply original ideas 💖🪢 |
| 32 | +| Layer | Technology | |
| 33 | +|-------|------------| |
| 34 | +| Frontend | Next.js 16+ (App Router), React 19, TypeScript 5.x | |
| 35 | +| Styling | Tailwind CSS 3.4, Framer Motion 11 | |
| 36 | +| Backend | Python 3.11, FastAPI | |
| 37 | +| ORM | SQLModel | |
| 38 | +| Database | Neon Serverless PostgreSQL | |
| 39 | +| Authentication | Better Auth (Frontend) + JWT (Backend) | |
| 40 | +| Offline Storage | IndexedDB (idb-keyval) | |
| 41 | +| PWA | @ducanh2912/next-pwa | |
18 | 42 |
|
19 | | -> daniel: Human | Any = hours_of_reasoning + creative_development + tea_snacks_and_sleep 🎭 |
| 43 | +## Project Structure |
20 | 44 |
|
21 | | -🛠️ **Weapons** |
| 45 | +``` |
| 46 | +LifeStepsAI/ |
| 47 | +├── frontend/ # Next.js frontend application |
| 48 | +│ ├── app/ # App Router pages |
| 49 | +│ │ ├── page.tsx # Landing page |
| 50 | +│ │ ├── sign-in/ # Authentication pages |
| 51 | +│ │ ├── sign-up/ |
| 52 | +│ │ ├── dashboard/ # Main task management |
| 53 | +│ │ └── api/auth/ # Better Auth API routes |
| 54 | +│ └── src/ |
| 55 | +│ ├── components/ # React components |
| 56 | +│ │ ├── TaskForm/ # Task creation/editing |
| 57 | +│ │ ├── TaskList/ # Task display |
| 58 | +│ │ ├── TaskFilters/ # Filter controls |
| 59 | +│ │ ├── ProfileMenu/ # User profile dropdown |
| 60 | +│ │ └── ui/ # Base UI components |
| 61 | +│ ├── hooks/ # Custom React hooks |
| 62 | +│ ├── lib/ # Utilities and configurations |
| 63 | +│ └── services/ # API client |
| 64 | +│ |
| 65 | +├── backend/ # FastAPI backend application |
| 66 | +│ ├── main.py # App entry point |
| 67 | +│ └── src/ |
| 68 | +│ ├── api/ # API route handlers |
| 69 | +│ │ ├── tasks.py # Task CRUD endpoints |
| 70 | +│ │ ├── auth.py # Authentication endpoints |
| 71 | +│ │ └── profile.py # Profile endpoints |
| 72 | +│ ├── auth/ # JWT verification |
| 73 | +│ ├── models/ # SQLModel database models |
| 74 | +│ ├── services/ # Business logic |
| 75 | +│ └── database.py # Database connection |
| 76 | +│ |
| 77 | +├── specs/ # Feature specifications |
| 78 | +├── history/ # Prompt & decision records |
| 79 | +└── .specify/ # Spec-Kit Plus configuration |
| 80 | +``` |
22 | 81 |
|
23 | | -<p align="start" style="padding-top:10px;"> |
24 | | - <img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/nextjs/nextjs-original.svg" alt="Next.js" height="28" style="margin:0 10px; filter: invert(100%);" /> |
25 | | - <img src="https://camo.githubusercontent.com/96f6cc7df15a64d6bc5d7913fcbb15644d840e8d27e83c2cce4a03a5f3f3c912/68747470733a2f2f72656769737472792e6e706d6d6972726f722e636f6d2f406c6f62656875622f69636f6e732d7374617469632d706e672f6c61746573742f66696c65732f6461726b2f6f70656e61692e706e67" alt="ChatGPT" height="28" style="filter: invert(100%);" /> |
26 | | - <img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/typescript/typescript-original.svg" alt="TypeScript" height="28" style="margin:0 10px; filter: invert(100%);" /> |
27 | | - <img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/javascript/javascript-original.svg" alt="JavaScript" height="28" style="margin:0 10px; filter: invert(100%);" /> |
28 | | - <img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/python/python-original.svg" alt="Python" height="28" style="filter: invert(100%);" /> |
29 | | -</p> |
| 82 | +## Getting Started |
30 | 83 |
|
31 | | ---- |
| 84 | +### Prerequisites |
32 | 85 |
|
33 | | -### 📊 **GitHub Stats** |
| 86 | +- Node.js 18+ and npm |
| 87 | +- Python 3.11+ |
| 88 | +- PostgreSQL database (Neon recommended) |
34 | 89 |
|
35 | | -<p align="start"> |
36 | | - <img src="https://github-readme-stats.vercel.app/api/top-langs?username=danielhashmi&layout=compact&theme=dark&hide_border=true&bg_color=1e1e1e&title_color=ffffff&text_color=ffffff"/> |
37 | | -</p> |
38 | | -<p align="start"> |
39 | | - <img src="https://github-readme-stats.vercel.app/api?username=danielhashmi&show_icons=true&hide_border=true&theme=dark&bg_color=1e1e1e&title_color=ffffff&text_color=ffffff&icon_color=ffffff" /> |
40 | | -</p> |
41 | | -<p align="start"> |
42 | | - <img src="https://github-readme-streak-stats.herokuapp.com?user=danielhashmi&theme=dark&hide_border=true&background=1e1e1e&stroke=ffffff&ring=ffffff&fire=ffffff&currStreakLabel=ffffff"/> |
43 | | -</p> |
| 90 | +### Environment Setup |
44 | 91 |
|
45 | | -[](https://x.com/_DanielHashmi_) |
46 | | -[](https://www.linkedin.com/in/daniel-hashmi/) |
| 92 | +1. **Clone the repository** |
| 93 | + ```bash |
| 94 | + git clone https://github.com/yourusername/LifeStepsAI.git |
| 95 | + cd LifeStepsAI |
| 96 | + ``` |
| 97 | + |
| 98 | +2. **Frontend Setup** |
| 99 | + ```bash |
| 100 | + cd frontend |
| 101 | + npm install |
| 102 | + ``` |
| 103 | + |
| 104 | + Create `.env.local`: |
| 105 | + ```env |
| 106 | + NEXT_PUBLIC_API_URL=http://localhost:8000 |
| 107 | + BETTER_AUTH_SECRET=your-secret-key |
| 108 | + BETTER_AUTH_URL=http://localhost:3000 |
| 109 | + DATABASE_URL=your-neon-database-url |
| 110 | + ``` |
| 111 | + |
| 112 | +3. **Backend Setup** |
| 113 | + ```bash |
| 114 | + cd backend |
| 115 | + python -m venv venv |
| 116 | + |
| 117 | + # Windows |
| 118 | + .\venv\Scripts\activate |
| 119 | + |
| 120 | + # macOS/Linux |
| 121 | + source venv/bin/activate |
| 122 | + |
| 123 | + pip install -r requirements.txt |
| 124 | + ``` |
| 125 | + |
| 126 | + Create `.env`: |
| 127 | + ```env |
| 128 | + DATABASE_URL=your-neon-database-url |
| 129 | + BETTER_AUTH_SECRET=your-secret-key |
| 130 | + FRONTEND_URL=http://localhost:3000 |
| 131 | + ``` |
| 132 | + |
| 133 | +### Running the Application |
| 134 | + |
| 135 | +**Start the Backend** (http://localhost:8000): |
| 136 | +```bash |
| 137 | +cd backend |
| 138 | +uvicorn main:app --reload |
| 139 | +``` |
| 140 | + |
| 141 | +**Start the Frontend** (http://localhost:3000): |
| 142 | +```bash |
| 143 | +cd frontend |
| 144 | +npm run dev |
| 145 | +``` |
| 146 | + |
| 147 | +### API Documentation |
| 148 | + |
| 149 | +Once the backend is running, access the interactive API documentation: |
| 150 | +- Swagger UI: http://localhost:8000/docs |
| 151 | +- ReDoc: http://localhost:8000/redoc |
| 152 | + |
| 153 | +## API Endpoints |
| 154 | + |
| 155 | +All task endpoints require JWT authentication via `Authorization: Bearer <token>` header. |
| 156 | + |
| 157 | +| Method | Endpoint | Description | |
| 158 | +|--------|----------|-------------| |
| 159 | +| `POST` | `/api/auth/signup` | Register new user | |
| 160 | +| `POST` | `/api/auth/signin` | Login and get JWT token | |
| 161 | +| `GET` | `/api/tasks` | List all user's tasks | |
| 162 | +| `POST` | `/api/tasks` | Create new task | |
| 163 | +| `GET` | `/api/tasks/{id}` | Get specific task | |
| 164 | +| `PATCH` | `/api/tasks/{id}` | Update task | |
| 165 | +| `PATCH` | `/api/tasks/{id}/complete` | Toggle completion | |
| 166 | +| `DELETE` | `/api/tasks/{id}` | Delete task | |
| 167 | +| `GET` | `/api/profile` | Get user profile | |
| 168 | +| `PATCH` | `/api/profile` | Update profile | |
| 169 | + |
| 170 | +### Query Parameters for GET /api/tasks |
| 171 | + |
| 172 | +| Parameter | Description | Example | |
| 173 | +|-----------|-------------|---------| |
| 174 | +| `q` | Search term | `?q=meeting` | |
| 175 | +| `filter_priority` | Filter by priority | `?filter_priority=high` | |
| 176 | +| `filter_status` | Filter by status | `?filter_status=completed` | |
| 177 | +| `sort_by` | Sort field | `?sort_by=priority` | |
| 178 | +| `sort_order` | Sort direction | `?sort_order=desc` | |
| 179 | + |
| 180 | +## Design System |
| 181 | + |
| 182 | +The application features an elegant warm design language: |
| 183 | + |
| 184 | +- **Colors**: Warm cream backgrounds (`#f7f5f0`), dark charcoal text (`#302c28`) |
| 185 | +- **Typography**: Playfair Display for headings, Inter for body text |
| 186 | +- **Components**: Pill-shaped buttons, rounded cards with warm shadows |
| 187 | +- **Dark Mode**: Warm dark tones (`#161412`) maintaining elegant aesthetics |
| 188 | +- **Animations**: Smooth Framer Motion transitions throughout |
| 189 | + |
| 190 | +## Testing |
| 191 | + |
| 192 | +**Backend Tests**: |
| 193 | +```bash |
| 194 | +cd backend |
| 195 | +python -m pytest tests/ |
| 196 | +``` |
| 197 | + |
| 198 | +**Frontend Tests**: |
| 199 | +```bash |
| 200 | +cd frontend |
| 201 | +npm run test |
| 202 | +``` |
| 203 | + |
| 204 | +## Development Methodology |
| 205 | + |
| 206 | +This project follows **Spec-Driven Development (SDD)** with the **Vertical Slice** architecture: |
| 207 | + |
| 208 | +- Every feature is a complete slice: Frontend → Backend → Database |
| 209 | +- Test-Driven Development (TDD) with Red-Green-Refactor cycle |
| 210 | +- Feature specifications in `/specs` directory |
| 211 | +- Architecture decisions documented in `/history/adr` |
| 212 | + |
| 213 | +## Feature Phases |
| 214 | + |
| 215 | +| Phase | Features | Status | |
| 216 | +|-------|----------|--------| |
| 217 | +| 001 | Authentication Integration | Complete | |
| 218 | +| 002 | Todo CRUD & Filtering | Complete | |
| 219 | +| 003 | Modern UI Redesign | Complete | |
| 220 | +| 004 | Landing Page | Complete | |
| 221 | +| 005 | PWA & Profile Enhancements | Complete | |
| 222 | + |
| 223 | +## Contributing |
| 224 | + |
| 225 | +1. Read the project constitution in `.specify/memory/constitution.md` |
| 226 | +2. Follow the Spec-Driven Development workflow |
| 227 | +3. Ensure all tests pass before submitting PRs |
| 228 | +4. Document architectural decisions with ADRs |
| 229 | + |
| 230 | +## License |
| 231 | + |
| 232 | +This project is licensed under the MIT License. |
0 commit comments