← BACK TO WORK MOBILE / FLUTTER

SIX PLATFORMS. ONE CODEBASE. ZERO COMPROMISES.

CLIENT: GAMENIGHT  ·  2025

Tracking game scores had been stuck in notes apps and paper since the dawn of board games. We built a dedicated Flutter application that runs natively on every platform — with game-specific scoring logic, local-first persistence, and a share-to-social feature users actually want to use.

6 Platform Targets From One Codebase
1 Custom Plugin Built In-House
0 External Dependencies for Core Functionality
// THE_CHALLENGE

GAME NIGHT DESERVES BETTER THAN NOTES.

Every game has different scoring rules. Card games track rounds differently from board games. Some games need elimination tracking; others need running totals; some need team scores. A generic notes app handles none of this well, and paper scoresheets get lost or misread mid-game.

The target audience uses every device — phones during game night, tablets at the table, MacBooks at home, Windows desktops at the office. Any app that didn't feel equally native on each platform would see immediate abandonment on the platform it didn't prioritise.

// WHAT_WE_BUILT

ARCHITECTURE FIRST. THEN POLISH.

GameNight is built around a delegate architecture — each game type has a dedicated tracker that encapsulates its scoring logic, display format, and history model. Adding a new game type is a matter of implementing the delegate interface, not modifying shared code. This keeps the app extensible without accumulating complexity.

All data is persisted locally via Drift (SQLite) — there's no network requirement for any core functionality. Games, scores, and session history are immediately available offline. The Provider state management layer keeps UI consistent across the app without introducing unnecessary rebuild surface.

The share feature was a deliberate product decision — players want to post their final scoreboards. We built a custom Image Gallery Saver plugin under packages/ to handle platform-specific photo library access consistently across iOS, Android, macOS, and Windows, giving us full control over the save and share UX without relying on packages that have patchy platform support.

  • PLUGIN-BASED GAME TRACKER ARCHITECTURE Each game type is a self-contained tracker delegate — handles its own scoring logic, history format, and display. Fully extensible.
  • LOCAL-FIRST PERSISTENCE (DRIFT / SQLITE) All game data stored locally via Drift's type-safe SQLite interface. Zero network dependency for any core feature.
  • CUSTOM IMAGE GALLERY SAVER PLUGIN In-house Flutter plugin handling photo library access on iOS, Android, macOS, and Windows — consistent save/share UX across all targets.
  • PERFORMANCE MONITORING PerfMetricsLogger integrated in main.dart emitting perf_frames summaries — smooth animations validated across all 6 platform targets.
  • 6-PLATFORM RELEASE PIPELINE Fastlane-style build tooling for Android, iOS, Web, macOS, Windows, and Linux from a single codebase and CI process.
// TECH_STACK
FLUTTER / DARTPROVIDERDRIFT (SQLITE)SHARED PREFERENCESGOOGLE FONTSCUSTOM PLUGIN (IMAGE GALLERY SAVER)DART BUILD RUNNERFLUTTER ANALYZE
// THE_OUTCOME

GameNight ships to all 6 platform targets from a single Dart codebase. The delegate architecture means new game types can be added without touching existing trackers. The custom plugin gives consistent share-to-social behaviour across every platform — no third-party dependency managing that surface for us.

// NEXT_PROJECT

NEED A CROSS-PLATFORM APP?

One codebase. Every platform. No shortcuts on the architecture.

[ START A PROJECT ]