Project Roadmap
One Project, Many Milestones
The study tracker project of this course is one application that grows over the whole course. You do not create a new project in each part. Instead, you keep extending the same project folder until it becomes the final submission.
Each part adds one bounded capability, so the project grows without becoming too large to understand.
The course also uses a second recurring schema context in many regular chapters: a course-platform schema that supports concept learning and SQL practice. This page is only about the study tracker side. Its purpose is to show how the project schema grows across the course.
Project Structure at a Glance
The project stays in one folder for the whole course. Even though the features change, the main structure stays quite stable:
compose.yamlstarts PostgreSQL and the web application together.start.shwaits for the database, applies migrations, and starts the app.migrations/contains schema and seed SQL files.app/main.pycontains the FastAPI routes.app/db.pycontains the database connection helper.app/migrate.pyapplies migration files in a controlled order.app/templates/contains the Jinja templates used to render HTML.
You do not need to memorize all of this at once. The important point is that the project keeps the same general shape while the database features become richer.
One Request Through the Project
A small request such as GET /decks usually follows this path:
- the browser sends a request,
- FastAPI matches a route in
app/main.py, - the route opens a database connection through
app/db.py, - PostgreSQL runs the SQL query,
- the route passes the rows to a template,
- and the template renders HTML back to the browser.
That same request path appears again and again later in the course.
Local Workflow in Practice
A typical local development cycle looks like this:
- run
docker compose up --build, - let PostgreSQL become healthy,
- let
start.shapply the migrations, - open the application in the browser,
- make a change to a route, query, template, or migration,
- refresh, re-run, or restart if needed,
- and verify the effect both in the browser and in the database when appropriate.
That is the practical rhythm behind each new or modified feature. You will get more comfortable with it as you go.
Part 1: Walking Skeleton
Starting point:
- no running project yet
New capability:
- a minimal study tracker starts with Docker Compose,
- PostgreSQL is available,
- the application connects to the database,
- and one page renders seeded data.
What success looks like:
docker compose up --buildstarts the project,/decksopens in the browser,- and you can point to the route, the SQL, and the template.
You’ll start the project from a walking skeleton that has the basic structure and one simple page. The checkpoint chapter of Part 1 materials will guide you through the first local setup.
A Useful Habit Throughout the Project
At the start of each new part, ask:
- What already works?
- What is the one new capability for this part?
- How will I know that the capability works from both the browser and the database perspective?
That small checkpoint makes the project much easier to manage over the whole course.