Muhammad Syauqi Al Bashir
All projects

Case study

BashGames

A real-time multiplayer party platform for family and friends: 69 games over WebSocket.

  • Python
  • FastAPI
  • WebSocket
  • PocketBase
  • three.js
  • Web Audio
  • Gemini
  • PWA

The problem

Our family and friends wanted to play together on their phones: classic board and card games, quick party games and silly AI-judged contests, without ads or app stores.

What I built

  • Server-authoritative engines for every game: state kept as JSON, its own RNG, a separate view per player so hidden cards stay hidden.
  • Live rooms over WebSocket, restored after restarts; pause when someone drops, everyone taps Ready, 3-2-1.
  • Board & card classics (Ludo with real 3D dice throws, UNO, Poker in rupiah, a Monopoly-style game, Gaple, Congklak…), quizzes, speed games, 20 Hz live arenas with latency back-dating.
  • AI-judged games: drawings, selfies and photo hunts judged by Gemini with a Cloudflare Workers AI backup racing it; voice games with on-phone pitch tracking.
  • A 3D cooking career game in three.js, plus a live home page, awards, leaderboards and push notifications.

Highlights

Live home page: rooms appear on everyone's phone the moment they're created.
Live home page: rooms appear on everyone's phone the moment they're created.
Spot the Twin: every two cards share exactly one picture (a projective-plane deck).
Spot the Twin: every two cards share exactly one picture (a projective-plane deck).
Karaoke: the phone tracks your pitch every 50 ms and scores you note by note, in any key.
Karaoke: the phone tracks your pitch every 50 ms and scores you note by note, in any key.
Cooking career game in three.js: a story, a kitchen to upgrade, and orders to serve.
Cooking career game in three.js: a story, a kitchen to upgrade, and orders to serve.

Try it

Roll the dice

The same 3D CSS die used in Ludo and Snakes & Ladders, plus a round of Spot the Twin.

Try it

Sing a line

Hum or sing along: your phone or laptop tracks your pitch every 50 ms (YIN) and draws it over the melody, in any key. The microphone stays in your browser; nothing is uploaded.

How it works

  1. 1Phones (PWA)
  2. 2WebSocket rooms
  3. 3Game engine (server)
  4. 4Per-player views
  5. 5AI judges (Gemini ⇄ Cloudflare)
  6. 6Results, awards, stats

Engineering notes

  • Random-play simulation tests drive every engine to the end of a game; around 160 tests run before each deploy.
  • AI never blocks a game: content is prepared while players wait in the lobby, with bounded waits and built-in fallbacks.
  • One bug worth remembering: events with a private recipient key were hiding public moves; it was fixed and documented.

How I build

Designed, built, tested and deployed by me with an AI coding assistant (Claude Code): I set the requirements, review every change, test on scratch copies with fake data, and run it in production.