I built a full-stack Case Management Platform using Angular, ASP.NET Core, and PostgreSQL to support secure, role-based case workflows from creation to resolution. It features JWT authentication, route guards, status-based case tracking, and a clean architecture backend. I also implemented production-minded capabilities like rate limiting, health checks, and container-ready deployment.
Personal project
Context
I built a full-stack Case Management Platform using Angular, ASP.NET Core, and PostgreSQL to support secure, role-based case workflows from creation to resolution. It features JWT authentication, route guards, status-based case tracking, and a clean architecture backend. I also implemented production-minded capabilities like rate limiting, health checks, and container-ready deployment.
Case Management Platform is a full-stack web application I built to model a production-style case workflow system from intake through resolution. It includes secure authentication with JWT access tokens and refresh-token handling, role-aware access controls, and a structured dashboard experience for creating, tracking, and managing cases across clear status stages.
On the frontend, I used Angular to build a responsive, component-driven UI with guarded routes and dedicated public/auth/protected layouts. On the backend, I used ASP.NET Core with a clean architecture approach to separate API, application, and infrastructure concerns, backed by PostgreSQL for persistence. The project also includes practical operational features such as health checks, rate limiting, and containerized deployment support, reflecting how a real internal business platform is designed and maintained.
Process
01
Balancing usability and security with short-lived JWT access tokens plus refresh-token rotation, secure cookie settings, and protected refresh/logout flows.
02
Designing public/auth/protected route trees without conflicts, especially around lazy loading, wildcard routes, deep links, and fragment/anchor navigation behavior.
03
Ensuring permissions are enforced consistently in both frontend route guards and backend authorization logic, not just hidden in the UI.
04
Defining statuses and transitions that match real business processes while keeping rules maintainable and preventing invalid state changes.
05
Standardizing API error responses (ProblemDetails-style patterns) so the frontend can reliably map backend failures to clear user feedback.
06
Choosing practical limits and partition keys (per user vs IP) to protect sensitive endpoints (auth/case creation) without degrading normal user experience.
07
Keeping domain/application/infrastructure concerns separate while still moving quickly, especially around service abstractions and dependency wiring.
08
Making local development, staging-like setup, and containerized deployment behave consistently (config, secrets, forwarded headers/proxy behavior, DB connectivity).
09
Getting middleware sequence right (auth, exception mapping, rate limits, forwarded headers) to avoid subtle bugs and inconsistent behavior.
10
Handling loading, retries, token expiration, and refresh flows so users see stable behavior instead of random redirects or failed actions.
Takeaways
This project taught me how to build and refine a full-stack application with a production mindset, not just a working demo. I gained hands-on experience designing secure authentication flows, structuring a clean architecture backend, and building a responsive Angular frontend with reliable routing and state-aware UX. I also learned how important operational details are—like rate limiting, health checks, and deployment configuration—and how small edge cases in navigation or auth can significantly impact user experience if they are not handled thoughtfully.