The problem
A European learning product needed to publish public quizzes at scale. Session starts and question fetches had to stay fast, and marketing pages had to rank, without coupling SEO content deploys to the interactive app.
Architecture decisions
- Split static from interactive. Hugo for landings and evergreen content; Next.js for the quiz simulator. Shared design tokens, independent deploy cadences.
- Read-heavy hot path. Question payloads are immutable per publish; Redis absorbs repeated fetches for popular quizzes.
- Postgres as source of truth. Sessions and answers stay consistent on the primary; indexes on quiz/question and session access patterns.
- Horizontal app tier. Stateless nodes behind a load balancer — scale replicas under evening peaks without sticky sessions on the core read path.
Outcomes
- 500K+ DAU sustained on the production platform
- 99.9% uptime on the app/API tier
- ~25% API latency reduction after Redis + query optimisation
