
Schedule API
Co-developer
NestJS rewrite of a Fastify API. Replaced a separate C# microservice with my own crawler library, moved schedule data from Redis into Postgres with diff-based daily refresh, Redis-backed shareable links.
A rewrite of the Mindenit Schedule API from Fastify to NestJS, built with one other developer against a 17-table Postgres schema in Drizzle. I owned the caching and data layer.
The upstream university system is fragile in specific ways: hand-authored JSON, a legacy encoding, and outages during exam periods, which is exactly when it is needed most. The original design reached it through a separate C# microservice and cached results in Redis, so every restart refetched everything from a source that might be down.
I replaced that microservice with cist-crawler, the client library I wrote and published, removing a network hop and moving validation to the boundary where bad data actually enters. Schedule data then moved out of Redis into Postgres with a daily diff-based refresh and a delayed-fetch mechanism that stays inside upstream’s tolerances. Restarts stopped being events.
The side effect mattered more than the feature: third-party student apps consume this API, and absorbing their traffic server-side removed enough load from the university’s own system that it began failing noticeably less often. The university thanked the team for it.
Redis also backs shareable timetable links, with TTLs matched to how long such a link stays useful, plus per-user rate limiting. Runs in Docker, CI on GitHub Actions.