4.4 KiB
4.4 KiB
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
- Main Board: Five columns (TODO, IN PROGRESS, QA, UAT, PROD) display task cards.
- 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).
- Drag & Drop: Drag cards between columns to move tasks through the workflow.
- Filter & Search: Filter by priority or tag; search by title/description in real time.
- Task Details: Click a card to view/edit all fields in a modal.
- 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 (returnsbackend: sqlite).
- Recurring Logic: When a task with
recurring=trueis 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.