# AI Task Kanban Board ## What We're Building A clean, minimal kanban board for managing AI tasks across five workflow stages: TODO, IN PROGRESS, QA, UAT, and PROD. Users can create, edit, and drag tasks between columns, filter by priority or tags, search for tasks, and view full details in a modal. All data persists to a local SQLite database. No login required — single-user app. ## How It Works for the User 1. **Main Board**: Five columns (TODO, IN PROGRESS, QA, UAT, PROD) display task cards. 2. **Create/Edit**: Click "Add Task" or a card to open a modal with fields: Title, Description, Priority (Low/Medium/High), Due Date, Assignee, Tags (comma-separated), Time Estimate (hours). 3. **Drag & Drop**: Drag cards between columns to move tasks through the workflow. 4. **Filter & Search**: Filter by priority or tag; search by title/description in real time. 5. **Task Details**: Click a card to view/edit all fields in a modal. 6. **Recurring Tasks**: Mark a task as recurring; when moved to PROD, it auto-creates a copy in TODO (optional, can be toggled per task). ## Key Decisions & Why - **No Auth**: Single user, no need for login or roles. - **SQLite**: Lightweight, file-based, no external database needed. - **Drag-and-Drop**: React Beautiful DnD or similar for smooth UX. - **Inline Editing**: Modal-based for simplicity; avoids complex inline form state. - **Clean UI**: Minimal design with card-based layout, no dark mode or heavy styling. - **Recurring Tasks**: Simple flag on the task; when moved to PROD, a new copy spawns in TODO. ## Technical Details ### Frontend (React) - **Main Page**: `/` — Kanban board with five columns. - **Components**: - `KanbanBoard`: Renders columns and handles drag-and-drop. - `TaskCard`: Displays task summary (title, priority badge, due date, assignee). - `TaskModal`: Create/edit form with all fields. - `FilterBar`: Priority and tag filters, search input. - **State**: React hooks (useState, useContext) for tasks, filters, modal state. - **Styling**: Tailwind CSS for clean, minimal design. ### Backend (FastAPI) - **Database**: SQLite at `./data/app.db`. - **Models**: - `Task`: id, title, description, priority (enum: Low/Medium/High), due_date, assignee, tags (JSON array), time_estimate (int, hours), column (enum: TODO/IN_PROGRESS/QA/UAT/PROD), recurring (bool), created_at, updated_at. - **Endpoints**: - `GET /api/tasks` — List all tasks (optionally filtered by column, priority, tag). - `POST /api/tasks` — Create a new task. - `GET /api/tasks/{id}` — Get task details. - `PUT /api/tasks/{id}` — Update a task. - `DELETE /api/tasks/{id}` — Delete a task. - `PUT /api/tasks/{id}/column` — Move task to a new column (handles recurring logic). - `GET /api/health` — Health check (returns `backend: sqlite`). - **Recurring Logic**: When a task with `recurring=true` is moved to PROD, the backend creates a new task with the same title, description, priority, assignee, tags, and time_estimate in the TODO column. ### Data Model ``` Task: - id: UUID (primary key) - title: str (required) - description: str (optional) - priority: enum (Low, Medium, High) - due_date: date (optional) - assignee: str (optional) - tags: list[str] (stored as JSON) - time_estimate: int (hours, optional) - column: enum (TODO, IN_PROGRESS, QA, UAT, PROD) - recurring: bool (default: false) - created_at: datetime - updated_at: datetime ``` ### Assumptions & Defaults - Single user, no authentication. - Tags are comma-separated strings in the UI, stored as JSON arrays in the database. - Priority defaults to "Medium". - Due dates are optional; cards without due dates show no date badge. - Assignee is a free-text field (no user management). - Time estimate is in hours; optional. - Recurring tasks only auto-create when moved to PROD (not on a schedule). - No undo/redo; changes are immediate. ### Out of Scope - User authentication or multi-user support. - Recurring task scheduling (cron-based). - Task history or audit logs. - Notifications or reminders. - Export/import (CSV, JSON). - Dark mode or theme customization. - Mobile-responsive design (desktop-first). - Subtasks or task dependencies. - Comments or activity feed. - Analytics or reporting. ## Scope Depth: MVP. Something they could actually use: the core flow end to end, real persisted data, auth ONLY if the app is meaningless without it, sensible empty and error states. No test suite, no roles, no CI.