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.

Majlis on a phone: the end-of-match podium
Majlis on a phone: a live Tarneeb table with cards in play
multiplayer card games
3
automated tests
≈3,260
pull requests merged
99
app languages, Arabic RTL first
2

Featured project

Majlis logo 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.

App tour · real footage, 16 seconds
  • A Trix table with doubled Queens shown beside their owners
  • A live table with a chat bubble and an emoji reaction
  • A trick in play at a Tarneeb table
  • The match result podium with a rematch button

Engineering highlights

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

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

  1. Oct 2026 – present

    React Front-End Developer

    GoOn Associated · Remote

    Starting in October 2026. Fully remote, for a company based in Curitiba, Paraná, Brazil.

  2. 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

  1. 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