Dutch Card Game
My first shipped app, with no prior app experience: Flutter on iOS and Android, Python for user logic, Dart for gameplay, MongoDB and Redis in Docker, plus Firebase Analytics and Google AdMob on the client.
Dutch is the first app I ever built — I had no prior mobile or multiplayer app experience when I started. It sits under my games brand Reign of Play. I shipped it end to end: client, backends, data stores, and both store releases. I also designed the app logo.
Client
- Flutter for the full iOS and Android experience — UI, session handling, and talking to both backends.
- Firebase Analytics for product and usage insight on the client.
- Google AdMob for in-app ads.
Backends
- Python owns user-facing logic: accounts, sessions, and the product/API layer around the game.
- Dart owns gameplay: live match state, turns, and the real-time path players feel when cards are played.
Data & infrastructure
- MongoDB for persistent application data (users, game-related records, and the broader product store).
- Redis for fast caching, sessions, and real-time messaging between services.
- Docker runs the stack: Python, Dart, MongoDB, and Redis each live in their own containers.
What I cared about
- Learning by shipping: picking a stack and carrying it through to production stores.
- Owning the product end to end — including branding (logo) as well as engineering.
- Clear boundaries so user logic and game logic can evolve independently.
- A client that stays thin where it should — presentation and orchestration, not authoritative rules.