Capstone Project
Build a complete API from scratch, applying everything from the course. Focus on getting something working and deployed rather than building every possible feature.
Prerequisites
Section titled “Prerequisites”Before starting the capstone, confirm you have completed all of the following. If any item is missing, complete it first.
| Requirement | Where to find it |
|---|---|
| Minimal API endpoints (CRUD) | Week 1–2 |
| PostgreSQL with EF Core and migrations | Week 3–4 |
| One-to-many relationships | Week 3–4 |
| Data Annotations on entity classes | Week 5 (mandatory core) |
| Structured validation error responses | Week 5 extension or Extension page |
| Pagination on list endpoints | Week 5 extension or Extension page |
| JWT authentication (register/login) | Week 6 |
| At least 5 passing integration tests | Week 7 |
docker-compose up runs the full stack |
Week 8 |
Choose one project
Section titled “Choose one project”Option 1: Blog API (recommended — simplest)
Section titled “Option 1: Blog API (recommended — simplest)”Users write posts. Other users leave comments.
Option 2: Task Tracker
Section titled “Option 2: Task Tracker”Users create projects and track tasks inside them.
Option 3: Recipe App
Section titled “Option 3: Recipe App”Users create recipes and list their ingredients.
Essential — must have
Section titled “Essential — must have”Entities (3 tables with relationships)
Section titled “Entities (3 tables with relationships)”| Project | Entity 1 | Entity 2 | Entity 3 |
|---|---|---|---|
| Blog | Users | Posts | Comments |
| Task Tracker | Users | Projects | Tasks |
| Recipe App | Users | Recipes | Ingredients |
Relationships: Users → main entity → child entity (two one-to-many relationships).
Features
Section titled “Features”- User registration and login
- CRUD on the main entity (Posts / Projects / Recipes)
- Read child entities (Comments / Tasks / Ingredients)
- Protected endpoints for create, update, and delete
- Public endpoints for reading
- Input validation with field-level error messages on all write endpoints
- Pagination on all list endpoints
Technical requirements
Section titled “Technical requirements”- Runs with
docker-compose up - At least 5 passing integration tests
- Data persists in PostgreSQL
Brief — good to have
Section titled “Brief — good to have”- Swagger endpoint descriptions
- Simple search or filter on the main entity
- README with setup instructions
Skip if rushed
Section titled “Skip if rushed”- Advanced features (likes, tags, assignments, priorities)
- Complex business rules
- High test coverage
- Performance optimization
Suggested steps
Section titled “Suggested steps”- Plan your 3 entities and sketch the relationships on paper
- Set up a new project, Dockerfile, and docker-compose.yml first
- Create entities and run migrations
- Build public read endpoints and test them in Swagger
- Add authentication (register/login)
- Build protected write endpoints
- Add validation to all inputs
- Write 5–10 integration tests
- Add Swagger endpoint descriptions
- Write README.md with instructions for running the project
Example: Blog API
Section titled “Example: Blog API”Entities
Section titled “Entities”Users: Id, Username, Email, PasswordHashPosts: Id, Title, Content, UserId, CreatedAtComments: Id, Content, PostId, UserId, CreatedAtEndpoints
Section titled “Endpoints”POST /auth/register publicPOST /auth/login public
GET /posts public, paginatedGET /posts/{id} public, includes commentsPOST /posts protectedPUT /posts/{id} protectedDELETE /posts/{id} protected
POST /posts/{id}/comments protectedLLM prompt for planning
Section titled “LLM prompt for planning”“Help me plan a [Blog / Task Tracker / Recipe] API. Give me a simple database schema with 3 entities, the essential endpoints with HTTP methods, and which endpoints need authentication. Keep it achievable for a student.”
Time split
Section titled “Time split”- 50% getting the API working
- 30% Docker and deployment
- 20% tests and documentation
Success criteria
Section titled “Success criteria”| Requirement | Done? |
|---|---|
| Can register and login | |
| Can create and read the main entity | |
| Protected endpoints reject unauthenticated requests | |
| Write endpoints return field-level validation errors | |
| List endpoints support pagination | |
| Data persists in PostgreSQL | |
docker-compose up starts everything |
|
| 5+ passing integration tests | |
| README explains how to run it |