Competitors sign in, fill out a registration profile, and form or join a team for one of the event's two days. The app owns all of the scheduling logic — per-day capacity, reservations, and a FIFO waitlist — plus a staff console and a full audit log of every mutating action.
Stack
- Backend: FastAPI (Python), Postgres, Alembic migrations
- Frontend: React + Vite (single-page app, no SSR)
- Auth: SSO via Authentik
- Infra: Docker Compose for local dev, separate production compose stack
Highlights
- Stateless staff roles — staff/admin access comes entirely from IdP group membership, not app-managed accounts. Nothing about a staff member is stored in the database, but every action they take is attributed to them personally in the audit log.
- Team & waitlist logic — day-scoped capacity limits, team formation/join-by-code, and a FIFO waitlist that promotes competitors as space opens up.
- Moderated pronoun list — competitors can select from a whitelisted set of pronouns or submit free text, which lands in a pending review queue for staff before it's shown to others.
- API-first design — the whole app is driven through a documented REST API (
/api/docs) so other HPCC-day-of tooling (kiosk sign-in, badge scanning) can consume team/user data without touching this codebase. - Audit logging — every mutating action is recorded against the real person who took it, whether they acted through the UI or an admin-issued API key.
Screenshots
Team browsing & join flow — competitors search open teams and join with a password.
Staff overview — live counts for accounts, teams, and both waitlists, plus capacity settings.
Staff user directory — searchable list of every competitor account and their team assignment.
Team detail — roster, admin, and confirmation status for a competitor's own team.