
Coding Projects
Rock, Paper, Scissors - online battle tournament
AI-assisted build with Firebase Studio for a 50+ person meeting.

Rock, Paper, Scissors - online battle tournament
AI-assisted build with Firebase Studio for a 50+ person meeting
Estimated reading time: 3 minutes
Project overview
Began as a novice to Firebase/Stackblitz; used AI guidance to scaffold, commit, and iterate. Goal: a fast, inclusive rock–paper–scissors tournament for our division's monthly meeting.
Context — the division, the theme, and the audience
In LEI (Learning Enhancement and Innovation) at the University of Adelaide, pods host the monthly meeting. The Orcas hosted 27 August 2025; topic was decision-making, coinciding with international RPS day. With 50+ colleagues on Teams, we needed something interactive, quick to facilitate, and simple.
Early approach — Mentimeter and a rethink
Two failed Mentimeter trials highlighted limitations around state, ties, and bracket progression. An initial 50+ player idea was impractical, so we reframed to pod managers as players. Existing RPS games were evaluated but found unsuitable for a quick start or clear facilitation. Used Firebase Studio to scaffold quickly; iterated on arena styling, bracket, and "latest result".
Pivot — AI-assisted build with Firebase + Stackblitz
Multiplayer was the main challenge; while Gemini understood the requirement to create a match between two players, it struggled to generate correct tournament bracketing. With 14 teams, it would try to create byes but wouldn't progress them to the next round automatically, only seeming to work with a perfect power of two, like 16 players. My developer partner, Aaron, was able to successfully engineer the logic to handle the brackets correctly. We paired over several builds to stabilise real-time reads/writes and repair regressions from rapid AI-led edits. We registered the domain, connected hosting, and ran ad-hoc tests which proved compatible with MS Teams breakout rooms.
Problem and constraints
- Run a lightweight tournament many can follow on one call, with minimal setup.
- Handle ties and bracket progression; clearly show who plays next.
- Keep interaction simple so pod managers can represent teams without confusion.
Approach and evolution
Six build cycles (high level)
- Base arena — Intro screens, single match, result message.
- Bracket & pods — Tournament view, pod names/emojis, "latest result" panel.
- Admin panel — Start/reset controls; match announcements; player links (future).
- Draw handling — Replay mechanics and clearer status text.
- Multiplayer — Real-time state; pairing with Aaron to stabilise sync and fix edge cases.
- Hardening — Regressions from AI edits; typography/spacing polish; hosting/domain prep.
Design and presentation
- Aesthetic: 8-bit/arcade, bold headings, high-contrast CTAs, dark theme.
- Information design: Left-anchored bracket; right-rail for "in progress" + "latest result"; prominent reset for facilitators.
- Accessibility: Large type, clear focus states, plain-language statuses (e.g., "It's a draw — play again"); keyboard-only facilitation checks planned.
Testing and facilitation plan
- Ad-hoc tests with colleagues validated round flow, draw handling, and visibility of the bracket.
- Facilitation model: pods play in breakout rooms; host advances bracket via admin panel; reconvene to view results.
- Success indicators: no state collisions when multiple pods finish at once; clear "who's next"; easy recovery after reset.
Deployment
Domain leipodbattle.com.au mapped to Firebase Hosting; pre-flight checks completed ahead of the meeting.
What I learned
- AI accelerates scaffolding but isn't a substitute for engineering judgement.
- Rapid prompt → run → observe → fix loops worked best.
- Pairing with an engineer (Aaron) was essential for multiplayer stability.
Next steps after the live run
- Collect structured feedback (quick pulse + short facilitator retro).
- Harden multiplayer (loading states, retries, defensive checks).
- Explore spectator mode, optional sound cues, and lightweight analytics.
- Extend accessibility (keyboard-only facilitation; alt text across UI imagery).
Acknowledgements
Huge thanks to Aaron from the media team in our LEI division at the University of Adelaide was essential in making the live build possible, particularly in stabilising the multiplayer functionality and state synchronisation.
Disclosure on AI use
AI guided the environment setup (Firebase/Stackblitz), generated starter code, adjusted presentation elements, and created background imagery. Human review and iteration were responsible for the overall experience design, fixing bugs, and stabilising the multiplayer behaviour.
Interactive demo
Gallery

First iteration example of start page with Ai generate image of animal pod teams, spectator and Dev test view

First iteration of the Tournament bracket

Example of Dev Test view Gemini was prompted to create to help me with real-time testing.

Second iteration of Battle page showcasing tournament view on the same page

Second iteration of start page with 8-bit font and start button

First iteration of winner announcement overlay

Second iteration of tournament bracket

Final iteration of start page with 8-bit font, retro 8-bit theme music, pixelated Ai background and press start button

Final iteration of tournament bracket showing winner of each battle and tournament progress of eliminated teams

First iteration of battle page where players select Rock, Paper or Scissors

Final iteration of battle page with LEI commentary box to engage players with game play tips, silly jokes and RPS facts

Added a Hollywood movie-style intro page for humour and dramatic effect to start the tournament
Post-run iteration (v1.1)
Following the first live tournament and colleague feedback, I shipped a small uplift to improve reliability, flow, and facilitation speed. These changes preserve the core experience while reducing accidental starts and streamlining the match loop.
Why we iterated (from observations & feedback)
- A few folks wanted to jump back in immediately after the first run, surfacing small friction points worth fixing.
- We observed the risk of a tournament starting unexpectedly (accidental click or flaky state).
- We wanted to simplify the flow and remove distractions to keep the pace high.
What changed in v1.1
- Ready gate to prevent accidental starts
Before: The tournament could begin as soon as "Start tournament" was pressed.
Now: Each pod page includes a Ready button. The bracket only launches once all pods have clicked Ready. This prevents accidental starts and any edge-case auto-starts from backend state glitches.
Result: A deliberate, human-confirmed start that gives facilitators confidence and reduces "false starts". - Roster & seeding tweaks for better brackets
Merged pod: Travis + Associate Director are now combined as "The Big Bosses."
Balancing entrants: Added Cox and a new AI bot "The Terminator" to keep bracket numbers even.
AI behaviour: Bots are intentionally biased to lose against human players, keeping the event people-first while cleanly filling the bracket.
Result: Cleaner seeding, simpler facilitation, and less lonely solo play for Travis 😊. - Faster match loop (removed intro & chat overlay)
Removed the "Hollywood intro" screen.
Removed the LEI chat box overlay.
Result: Fewer distractions and quicker round-to-round progression.
Impact
- Reliability: Human-confirmed "Ready" gate stops accidental tournament starts.
- Clarity: Pod consolidation and bracket balancing keep play smooth.
- Speed: Removing non-essentials tightens the loop and reduces downtime.
What's next (still on the roadmap)
- Optional spectator mode
- Subtle sound cues for match state transitions
- Defensive checks around slow clients and retries
- Expanded keyboard-only facilitation and alt text coverage
Iteration screenshots (v1.1)

Teams/pod page overview

Waiting for pods status boxes on main bracket page

UI of showing pods status changing

View of pod for human players when they first join
Interested in lightweight multiplayer for events?
I can walk through the Firebase Studio setup, state model, and facilitation pattern used for the live run.
Contact me