Problem
A task is more than a title: it has a deadline, a category and often supporting files. TaskFlow keeps these details together in one workspace. Our two-person team connected a React interface, FastAPI services and attachment storage so users can move from planning a task to tracking its completion.
Users can create tasks, filter by status or category and search by title. An admin interface lists users and tasks and supports task reassignment.
Full-stack structure
The frontend uses React, Vite and Tailwind CSS, with separate pages and reusable components. AuthContext holds session state and Axios handles API requests. The FastAPI backend separates auth, tasks, categories, files and admin routers from SQLAlchemy models, Pydantic schemas and shared dependencies.
JWT provides session authentication and bcrypt hashes passwords. Task queries are scoped to the current user, while admin operations use a dedicated role dependency. User, Category, Task and TaskFile records are related through SQLite.
Tasks and attachments
Tasks use In Progress, Completed and Overdue states. Date and time checks update overdue tasks; the interface highlights deadlines within 24 and 48 hours. Recharts displays category and status distributions.

Attachments accept PDF, PNG, JPG/JPEG, DOCX and XLSX files with a 10 MiB limit. Files are stored under UUID filenames, while the database records original names, sizes, uploaders and task associations.
Tests and limitations
The project defines 39 Pytest functions covering authentication, tasks, categories, files and admin behavior. FastAPI TestClient runs against an in-memory SQLite database through dependency overrides. This is a count of defined scenarios; the suite was not rerun during portfolio preparation.
Remaining work includes enforcing category uniqueness per user, checking category ownership when assigning tasks, streaming uploads and coordinating database and physical-file cleanup. Overdue status is updated during requests rather than by a background notification service.
Result
The application combines task CRUD, filtering, deadline indicators, attachments and statistics. It covers the full-stack flow from React components and API contracts to relational data and access checks.
