Quiz Portal
A live, team-based quiz platform that ran on stage at two BASF Security Day events — real-time presence, per-team question shuffling, and a session engine that ends the game exactly when it should.
A live event quiz has one unforgiving requirement: it has to work in the room, in real time, in front of everyone — teams copying from each other, someone's browser dying mid-question, the clock running out with answers half-submitted. Consumer quiz apps handle none of that gracefully. This one had to, twice, on stage.
Sessions in seconds
The host sets duration and team count; the system generates a join code and each team gets its own session view. No accounts, no app installs — the right call for a room of 100 people on event wifi.
Anti-copying by design
Every team draws the same questions from the bank in a different shuffle — glancing at the next table's screen tells you nothing. Scoring runs +5 / −2 with negative marking, so guessing costs.
Live presence on stage
A Socket.IO gateway tracks which teams are online, in progress, or finished — the host watches the whole room's state in real time, projected, while the countdown runs.
Nobody stalls the game
A scheduled job checks every active session: when the timer expires, unfinished teams are auto-submitted; when every team finishes early, the session closes itself. The host never has to make that call — and full history keeps every team's answers reviewable afterwards.
NestJS + Prisma: a quiz module owning session creation, question randomization and distribution, answer submission, scoring, and history — with a Socket.IO WebSocket gateway for presence and a cron-based lifecycle service watching every active session on a five-second tick. JWT guards separate hosts from teams.
React + TypeScript on TanStack Router, split into a host dashboard and a dedicated quiz-taking flow with a live countdown. Runs on its own EC2 instance, provisioned and managed solo.
Need something that can't fail in the room?
Real-time, live-audience software is a different discipline. This one shipped twice.