Cover image for Rock, Paper, Scissors - online battle tournament

Coding Projects

Rock, Paper, Scissors - online battle tournament

AI-assisted build with Firebase Studio for a 50+ person meeting.

RoleProduct Owner, Facilitator, UX/UI, PrototyperYear2025Duration~1 weekTeamSolo, with engineering partner
FirebaseMultiplayerAI-AssistedGamificationEvent Tooling
Retro tournament title screen with start button

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)

  1. Base arena — Intro screens, single match, result message.
  2. Bracket & pods — Tournament view, pod names/emojis, "latest result" panel.
  3. Admin panel — Start/reset controls; match announcements; player links (future).
  4. Draw handling — Replay mechanics and clearer status text.
  5. Multiplayer — Real-time state; pairing with Aaron to stabilise sync and fix edge cases.
  6. 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

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

  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".

  2. 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 😊.

  3. 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

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