PGSH
Internship planning for a faculty of medicine
Every year the faculty sends thousands of medicine and pharmacy students through hospital rotations. All of that used to live in an MS Access file. PGSH replaced it: hospitals and services, student groups, the yearly rotation plan, attendance and grades, all running on the faculty's own servers.
What I built
- A .NET 9 API with clean architecture and CQRS (MediatR, FluentValidation, EF Core on PostgreSQL). Every endpoint stays closed until a permission opens it.
- A planning engine that won't put one group in two services at once, respects each service's capacity and follows each promotion's own calendar.
- Five VMs on ESXi. Caddy is the only way in, over HTTPS, and passes traffic to the API containers, Keycloak and PostgreSQL 17.
- An ops VM with Prometheus, Grafana, Loki, Tempo and OpenTelemetry, k6 for load tests, and encrypted backups on a systemd timer.