Active

Pixionary

A real-time multiplayer drawing game for iOS and Android. Built with Flutter and Supabase. Async game modes, a hand-rolled canvas, and an in-game economy called Sparks.

  • Flutter
  • Dart
  • Supabase
  • Firebase
  • flutter
  • supabase
  • dart
  • mobile
  • realtime

Pixionary is a drawing game where the canvas is the product. One player draws a word. Everyone else guesses in real time. The player who guesses first earns the most Sparks.

The canvas is hand-rolled in Flutter. No third party drawing library. Every stroke is a list of points with pressure, color, and brush size. The grid is configurable. Artwork submits as raw bytes through a Supabase RPC rather than Storage, because the Storage permissions model was the wrong abstraction for per-turn game data.

Async game modes let players take turns over hours. You draw when you have time. Your opponent guesses when they have time. The turn state machine handles expired turns, disconnected players, and abandoned games.

Sparks is the in-game economy. You earn them by guessing correctly and by drawing well. They unlock themes, brush packs, and word categories. Earn rates and prices are tunable through app_config.yaml without code changes.

The architecture follows ADR-019: screens are routers only. AsyncGameV1 is a variant of AsyncGameScreen. The screen dispatches based on active_variant in config, not conditionals. AsyncController owns the session state and disposes on route pop. That lifecycle boundary fixed a class of cross-game state bleed bugs that took weeks to trace.

Managed by Forge. 280 manifest nodes declared. Tested on iOS and Android.