This roadmap is optimized for a standout portfolio project: tenant isolation, RBAC, audit logs, CI/CD, and real-world features.
- Clean Architecture solution structure
- Swagger + Serilog + /health
- Docker compose (Postgres + Redis)
- GitHub Actions CI
- Basic integration test plumbing
- ASP.NET Identity (GUID)
- JWT auth endpoints
- Organization + Membership model
- Tenant resolution via
X-Org-Id - RBAC policies: Viewer/Member/Admin/Owner
- Org members endpoints (Admin list, Owner update role)
- Testcontainers + Respawn integration tests
- Improve tenant error behavior to return 400 for missing/mismatch header (instead of 403)
- Add seed/demo data endpoint for local dev (optional)
- Ticket (OrganizationId, Title, Description, Status, Priority, CategoryId?, CreatedByUserId, AssignedToUserId?)
- TicketComment (OrganizationId, TicketId, Body, CreatedByUserId)
- Category (OrganizationId, Name)
- GET /tickets (paged + filters)
- POST /tickets (Member+)
- GET /tickets/{id}
- PATCH /tickets/{id} (Member+ with rules; Admin can assign/close)
- POST /tickets/{id}/comments (Member+)
- GET /categories (Viewer+)
- POST /categories (Admin+)
- Cross-tenant data isolation (cannot access other org’s tickets)
- Viewer cannot create/update
- Member can create ticket and comment
- Admin can assign/close tickets
- EF Core SaveChangesInterceptor to write audit logs
- GET /audit endpoint (Admin+)
- Tests: audit entry created on create/update/delete
- Redis caching for ticket list/details (per-tenant cache keys)
- Invalidation on writes
- Redis rate limiting middleware
- Tests: cache isolation includes orgId in key
- Hangfire (Postgres storage)
- Recurring nightly org ticket summary job
- Admin endpoint: POST /jobs/run-summary
- Auth pages
- Org selector (stores active orgId -> sends X-Org-Id)
- Tickets UI
- Admin pages: members + audit logs
- Basic UX polish + demo video
- Improve error responses (ProblemDetails)
- API docs clarity
- Consistent DTOs
- Deployment plan (Render/Fly/Railway + Vercel)
- Demo data + demo credentials