Yesterday, the database was completed; all models defined, all migrations applied, all test data seeded. Today, I built the Projects API on top of that foundation. Serializers, a ViewSet with custom permissions, search, and filter, and a dedicated endpoint for a user's own projects. By the end of today, every project-related endpoint was tested and working in Postman. The Approach: ViewSet Over Individual Views For the project's API, there were two options: write individual function-based or class-based views for each endpoint, or use a ModelViewSet that handles all CRUD operations in one class. I went with ModelViewSet . The reason is straightforward: all six standard operations on a project: list, create, retrieve, update, partial update, delete; follow the same pattern. ViewSet handles that pattern automatically, and the router generates all the URL patterns from a single registration line.…