Building Majlis · pre-launch
Ahmad Balan
Full-Stack Flutter Developer
I build mobile products end to end.
From the Flutter app to the real-time backend, the deploys and the bill. Right now: Majlis, an Arabic-first card game platform I designed and built on my own.
- multiplayer card games
- 3
- automated tests
- ≈3,260
- pull requests merged
- 99
- app languages, Arabic RTL first
- 2
Featured project
Majlis / مجلس
Your table. Your people.
Pre-launch · Android and iOS together
An Arabic-first social card game platform for iOS and Android.
Tarneeb, Trix and 400 are playable end to end: online with friends, at public tables with new players, with bots filling empty seats, or completely offline on the phone. The table is hand-crafted in 2D, with card sounds, haptics and an Arabic voice announcer.
My role: everything. Product and game design, UI, the Flutter app, the rules engine and bots, the backend, DevOps, cost control and the website.
Engineering highlights
One rules engine, two runtimes
The rules are written once in TypeScript. The server runs them to referee online tables; the app runs the very same bundle in embedded QuickJS for offline play. Every copy is checked byte-identical.
Server-authoritative multiplayer
Each table is a Durable Object on Cloudflare that validates every move over WebSockets. Hidden hands never leave the server; every seat gets its own filtered view.
Versioned rulesets
Every rule change bumps a ruleset version and a match keeps the rules it was dealt under, so a deploy never changes a game in progress.
Cheap at rest
Hibernating WebSockets, pings that don't wake the room, and bot moves planned in a single write keep idle cost close to zero.
A spend guard with a hard stop
A scheduled job prices the month's cloud usage and, near the budget limit, pauses new online games while matches in play finish and offline play keeps working.
Arabic-first, RTL done right
Right-to-left by default with a full English mode. Seat order and suit symbols are deliberately never mirrored, and a bundled suit font keeps cards identical on every device.
Privacy and safety by default
Analytics and crash reports stay off until the player consents. Rate limits, a profanity filter, reports and escalating chat mutes keep tables friendly.
Tested heavily
About 3,260 automated tests: 395 for the rules engine, 644 for the server in the real Workers runtime, and 2,221 for the Flutter app, plus simulator tests that play real matches.
How it fits together
Flutter app
iOS and Android · Arabic RTL and English
Embedded QuickJS runs the rules offline
Cloudflare
Worker: REST API, token checks, rate limits
Durable Object per table: game state over WebSockets
D1 (SQLite): players, friends, points, leaderboards
Firebase
Auth · Analytics · Crashlytics · Cloud Messaging
Shared TypeScript rules engine and bots
The same bundle on the phone and on the server
Stack
- Flutter
- Dart
- TypeScript
- Cloudflare Workers
- Durable Objects
- D1 · SQLite
- WebSockets
- QuickJS
- Firebase Auth
- Analytics
- Crashlytics
- Cloud Messaging
- Vitest
- esbuild
- iOS
- Android
What I do
From the first pixel to the server bill
I'm happiest owning a product end to end. These are the parts I work across.
-
Mobile apps
Cross-platform apps in Flutter and Dart for iOS and Android.
- Flutter
- Dart
- iOS
- Android
- RTL / i18n
-
Real-time backends
TypeScript services on Cloudflare Workers, Durable Objects and D1.
- TypeScript
- Cloudflare Workers
- Durable Objects
- D1 / SQLite
- WebSockets
-
Firebase
Authentication, Analytics, Crashlytics, Cloud Messaging and Hosting.
- Auth
- Analytics
- Crashlytics
- FCM
- Hosting
-
.NET and C#
Object-oriented C#, ASP.NET Core Web APIs, SQL databases and unit testing.
- C#
- .NET
- ASP.NET Core
- SQL
-
Web and React
React front-end development with TypeScript and JavaScript, plus fast static sites in plain HTML, CSS and JavaScript.
- React
- TypeScript
- HTML
- CSS
- JavaScript
-
Product and design
Turning an idea into a plan, a design system and a shipped product.
- UI / UX
- Design systems
- Testing
- Git · PRs
Other work
Foundations
Before Majlis, I built my craft through intensive, project-based training. The code is public on GitHub.
-
Course
The Complete Flutter Development Bootcamp
Eleven small Flutter apps from Dr. Angela Yu's Udemy course.
- Flutter
- Dart
- Firebase
-
Course
Android and iOS development with Flutter
A Udemy course building real-world app clones in Flutter.
- Flutter
- Dart
- Firebase
-
Training track
.NET track
Hands-on challenges from DIO's .NET track.
- C#
- .NET
- SQL
-
Training track
React track
Challenges from DIO's React track.
- React
- JavaScript
- TypeScript
Languages
I work in five languages
Useful for Arabic-first, Latin American, European and Turkish products alike.
- EnglishEnglish
- العربيةArabic
- PortuguêsPortuguese
- EspañolSpanish
- TürkçeTurkish
About
A builder who ships
I'm a full-stack Flutter developer based in Brazil.
Majlis is where all of that comes together.
I care about quality you can measure.
My background: a postgraduate specialization in Software Engineering with Agile Methods (2024) from Universidade Cruzeiro do Sul. From October 2026 I work remotely as a React front-end developer at GoOn Associated, a company based in Curitiba, Paraná, Brazil, and I keep building Majlis alongside it.
Career
Experience and education
Experience
-
Oct 2026 – present
React Front-End Developer
GoOn Associated · Remote
Starting in October 2026. Fully remote, for a company based in Curitiba, Paraná, Brazil.
-
2026 – present
Founder and Full-Stack Developer
Majlis · AMB Ltd.
Designing and building Majlis, an Arabic-first card game platform for iOS and Android, from the Flutter app to the real-time backend.
Education
-
August 2024
Postgraduate Specialization in Software Engineering with Agile Methods
Postgraduate specialization (lato sensu) · Universidade Cruzeiro do Sul, São Paulo
Engenharia de Software com Métodos Ágeis
Contact
Let's build something great.
Want to talk about Majlis, Flutter or a project? Say hello.
Email me[email protected]
