TaskLane is a lightweight, responsive Mini Kanban Board application designed for streamlined, distraction-free task management.
This project was built for Homework 2 of the DataTalksClub AI Dev Tools Zoomcamp 2026, following a disciplined, spec-first AI-native engineering workflow:
- Spec First: Defined product requirements, state transitions, and acceptance criteria in
_docs/specs.md. - Frontend Prototype: Built an interactive React Kanban board with a centralized, mockable API abstraction.
- OpenAPI Contract: Designed a formal OpenAPI 3.1 specification (
openapi.yaml) as the single source of truth. - FastAPI Backend: Implemented REST endpoints using Pydantic v2 and verified behavior with automated tests.
- Database Persistence: Replaced temporary storage with SQLAlchemy 2.0 and SQLite.
- Frontend: React 19 + Vite 6 responsive board with centralized API client abstraction (
frontend/src/services/api.js). - Backend: FastAPI with Pydantic v2 input/output validation schemas and CORS middleware.
- API Contract: OpenAPI 3.1 specification (
openapi.yaml) defining all endpoints, query filters, schemas, and error responses. - ORM & Database: SQLAlchemy 2.0 with local SQLite persistence (
tasklane.db), designed to support relational databases (e.g. PostgreSQL) with minimal application changes. - Automated Tests: Comprehensive
pytesttest suite withTestClientcovering all CRUD operations, filtering, ordering, validations, and persistence. - Package Management:
uvfor reproducible Python dependency management andnpmfor frontend dependencies.
- Deterministic 5-Stage Workflow:
Backlog->To Do->In Progress->Review->Done. - Initial Placement: All new tasks are strictly created in
Backlog. - Sequential Card Controls: Intuitive previous/next status transitions (
←/→), automatically disabled at column boundaries. - Search & Filtering: Real-time filtering by priority (
low,medium,high,urgent) and substring search across task titles and descriptions. - Deterministic Ordering: Tasks are returned newest first (
created_at DESC,id DESC). - Strict Validation: Empty titles, invalid priorities, and illegal client-supplied creation statuses are rejected with
422 Unprocessable Entity.
tasklane/
├── _docs/
│ └── specs.md # Product specifications and acceptance criteria
├── AGENTS.md # Agent instructions, commands, and project conventions
├── .gitignore # Version control exclusion rules (including local SQLite DBs)
├── README.md # Project documentation and guide
├── openapi.yaml # OpenAPI 3.1 specification
├── frontend/ # React + Vite application
│ ├── index.html
│ ├── package.json
│ ├── vite.config.js
│ └── src/
│ ├── App.jsx # Kanban board component
│ ├── App.css # Board styling and responsive layout
│ ├── index.css # Design tokens and base styles
│ ├── main.jsx # Application entrypoint
│ └── services/
│ └── api.js # Centralized API client abstraction
└── backend/ # FastAPI + SQLAlchemy application
├── pyproject.toml # uv package configuration
├── uv.lock # Reproducible lockfile
├── main.py # FastAPI endpoints, CORS, and lifespan
├── database.py # SQLAlchemy engine, SessionLocal, and get_db dependency
├── models.py # SQLAlchemy Task ORM model
├── schemas.py # Pydantic v2 validation models
└── tests/
└── test_api.py # 11 automated pytest test cases
- Python 3.10+ and
uv - Node.js 20+ and
npm
From the repository root:
cd backend
uv run uvicorn main:app --reloadThe FastAPI backend will start at:
- API Base URL:
http://localhost:8000 - Interactive OpenAPI Docs:
http://localhost:8000/docs
Note on Database Persistence: The local SQLite database (
backend/tasklane.db) is created automatically on application startup by SQLAlchemy metadata. It is excluded from version control via.gitignore.
In a separate terminal, from the repository root:
cd frontend
npm install
npm run devThe Vite development server will start at:
- Frontend URL:
http://localhost:5173
To run the full backend test suite:
cd backend
uv run pytest