Backend Development · REST API
Tech Challenge Tracker
Personal challenges, measurable progress.
A REST API for organizing personal technical challenges, recording difficulty and tracking progress, built as a practical backend and NoSQL learning project.
Role
Backend Development
Type
REST API
Stack
Python · FastAPI · Pydantic · Firebase Firestore · Uvicorn
Status
Functional backend for local use
01 — The Challenge
Give each challenge a clear path forward.
The project explores how to turn a personal challenge list into a structured API: define difficulty and progress states, validate incoming data and preserve records beyond a server restart using a document database.
02 — The Solution
What the project does.
Create, read, update and delete
Manage challenges with Firestore-generated identifiers and filter them by pending, in-progress or completed status.
Partial updates and validation
PATCH changes only the supplied fields. Pydantic validates titles, descriptions, difficulty and status, while the API reports invalid input and missing resources with explicit HTTP responses.
Persistent data and interactive documentation
Firestore stores challenges as documents that survive server restarts. Swagger UI and the OpenAPI schema make the endpoints easy to explore and try locally.
03 — Technical Approach
HTTP endpoints backed by a document database.
FastAPI handles routes, query parameters and dependency injection; Pydantic defines creation, response and update models. The Firebase Admin SDK connects Python to Firestore, while Uvicorn runs the API. CRUD operations, error responses and persistence were manually checked through Swagger UI; the repository does not yet include an automated test suite.
04 — Next Steps
Current scope and next steps.
The backend is functional for learning and local execution. It does not yet include a web interface, authentication, pagination or a publicly deployed API. Planned work includes difficulty filters, creation dates, query indexes, automated tests and separation of routes from data access. Authentication and per-user authorization remain necessary before exposing user data.
Explore the GitHub repository ↗