A FastAPI backend for a Jira/Trello-style task management platform. The first working foundation includes users, JWT authentication, workspaces, membership, teams, projects, sprints, tasks, comments, and dashboard totals.
Authentication is deliberately limited to:
- Formal user registration
- Form-encoded login
- JWT bearer authentication
OAuth, email verification, password reset, and third-party login are not part of this implementation.
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements-dev.txt
Copy-Item .env.example .env
uvicorn app.main:app --reloadOpen http://127.0.0.1:8000 for the task management web app.
The frontend is served by FastAPI, so it does not need Node.js or a second
development server. Open http://127.0.0.1:8000/docs for the interactive API
documentation.
SQLite is the zero-configuration default. Set DATABASE_URL in .env to a
PostgreSQL connection string for deployment.
The included responsive frontend provides:
- Registration and login
- Workspace creation and switching
- Dashboard metrics
- Project and sprint management
- Scrum or Kanban framework selection per project
- Framework-aware navigation with Scrum-only, project-specific sprints
- Single active sprint enforcement and product-backlog filtering
- Trello-style task and list drag-and-drop
- Custom board lists with rename, color, delete, and reorder controls
- Automatic two-way synchronization between task status and board list
- Multiple task assignees and start/end date-time scheduling
- Project Gantt chart with scheduled and unscheduled task views
- PDF-only downloads for task boards and Gantt charts
- Trello-style task checklists with automatic completion progress
- Persistent light and dark themes with responsive, accessible UI styling
- Task creation, editing, deletion, and comments
- AI-generated task-plan previews with editable bulk creation
- Automatic Gemini, Groq, OpenRouter, and Hugging Face fallback
- Workspace members and teams
After signing in, create a workspace and project. The task board will then let you use the API through normal forms instead of Swagger.
Register with JSON:
POST /auth/register
Content-Type: application/json
{"name":"Jane Doe","email":"jane@example.com","password":"securepass123"}Login uses a standard form. Put the email in the username field:
POST /auth/login
Content-Type: application/x-www-form-urlencoded
username=jane@example.com&password=securepass123Send the returned token on protected requests:
Authorization: Bearer <access_token>POST /auth/register,POST /auth/login,GET /auth/meGET|POST /workspacesGET|POST /workspaces/{id}/membersGET|POST /workspaces/{id}/teamsGET|POST /workspaces/{id}/projectsGET|PATCH /projects/{id}GET|POST /projects/{id}/sprintsGET|POST /projects/{id}/tasksPOST /projects/{id}/ai/task-planPOST /projects/{id}/ai/task-plan/confirmGET|PATCH|DELETE /tasks/{id}GET|POST /tasks/{id}/commentsGET /workspaces/{id}/dashboard
pytest
alembic revision --autogenerate -m "initial schema"
alembic upgrade headFor production, generate and commit an Alembic migration before deployment, replace the JWT secret, configure PostgreSQL, and restrict CORS origins.
Copy the provider settings from .env.example into .env locally and into
Vercel Environment Variables for deployment. The board's AI plan button
generates a preview without changing project data. After review, confirmed
tasks are created together and placed in Backlog.
Providers are attempted in AI_PROVIDER_ORDER. A timeout, quota response,
network failure, or invalid generated plan moves to the next configured
provider. API keys remain server-side and must never be added to frontend code
or committed to Git.