Office Olympics
A mobile-friendly team party game that turns short office-themed arcade rounds into a serverless AWS application with realtime rooms, protected administration, deterministic fairness, and cost-aware operations.
Problem and purpose
Office Olympics began as a practical team-engagement idea: let a host start a short game from a shared screen while participants join from their phones and play fast office-themed rounds. For the portfolio, it is also a meaningful systems problem: realtime coordination, mobile interaction, state management, authorization, cost boundaries, and operational testing all matter in one visible application.
Experience delivered
- Players join a room by code from phone or desktop without creating accounts.
- A host can create a session, choose game order or randomized rounds, control presentation pacing, and run as a presenter without entering the scoreboard.
- The lobby uses an animated participant name cloud for screen-shared waiting time.
- The arcade roster includes typing, reaction, sorting, memory, aiming, stacking, movement, and an opt-in shared arena round.
- Round results show awarded points for each participant and completed sessions persist compact historical summaries.
Serverless architecture
- The React and TypeScript client is published beneath the existing CloudFront-backed S3 portfolio path.
- API Gateway WebSocket routes keep rooms responsive without an always-on game server.
- Small TypeScript Lambda handlers manage connections, room state transitions, scoring submissions, and private admin configuration.
- The project reuses the existing DynamoDB table with isolated Office Olympics key prefixes and TTL cleanup.
- AWS CDK defines the application infrastructure and keeps deployment repeatable.
Security and fairness
- The public play flow requires no account and exposes no administrative controls.
- The admin editor uses a dedicated Cognito app client and a JWT-authorized API; the Lambda handler independently verifies the owner email before returning or writing configuration.
- New rooms snapshot protected defaults so browser-local changes cannot silently override production game content.
- Seeded per-round challenges give each competitor the same Coffee Run obstacles, alert timing, elevator route, rhythm sequence, and memory layout during that round.
- Server-side validation accepts only plausible, timely round summaries and prevents duplicate scoring submissions.
Cost and reliability decisions
- Static hosting and the existing portfolio DynamoDB table are reused rather than duplicating idle infrastructure.
- Room and connection records expire after 24 hours; compact completed-session summaries expire after 90 days.
- Most games submit one final score summary instead of streaming gameplay events.
- The live Floor Is Lava arena is opt-in because its movement updates have a deliberately higher traffic profile than ordinary rounds.
- WebSocket throttles, short Lambda timeouts, brief CloudWatch retention, and the portfolio AWS budget keep the public MVP bounded and observable.
Validation and iteration
The application has been tested locally in mock mode and against the deployed AWS WebSocket backend with desktop and mobile clients in the same room. Live checks cover room creation, joining, timed scoring, presenter-only hosting, touch sorting, reconnect behavior, and the visual minigame roster. The project remains actively iterated: the realtime arena round is available for deliberate events while its gameplay and traffic profile continue to be refined.
Try the live build
Launch Office Olympics to view the player join experience, or use this case study to review the architecture and operational decisions behind the deployed MVP.