← All work
MJ
Marketplace platform · UAE · Abu Dhabi launch

Monjez

● Live

A multi-vendor marketplace and SaaS platform connecting UAE residents who need government paperwork with the licensed typing and service centres that file it — and giving those centres the software to run the work.

Category
Marketplace platform
Market
UAE · Abu Dhabi launch
Surfaces
iOS · Android · Web · Provider console · Admin
Status
Live in production

Nobody knows what a government document should cost.

Getting a licence renewed or a power of attorney drawn up in the UAE means knowing which typing centre to trust, phoning around for a price that nobody publishes, and driving there twice. The centres themselves run the whole operation on WhatsApp threads and paper receipts.

Monjez puts the order online and gives the provider a real back office. Providers set their own all-in price and pay the government fee directly, so the platform never has to maintain a fee catalogue or pretend to know what a service costs in a given emirate this month.

Every surface, by us.

Customer app
Flutter on iOS and Android, plus Flutter Web for people who would rather not install anything. Browse services, compare providers, order, track, pay.
Provider dashboard
Where a typing centre prices its catalogue, accepts orders, uploads completed documents and settles its account.
Backend and ledger
Laravel 12 on PostgreSQL 16 — domain logic, the double-entry ledger, subscription and fee billing.
Infrastructure
Terraform-managed AWS, single-region, with its own state and project tagging.

Money was the whole design problem.

A marketplace that moves other people's money has to be right the first time. Four decisions carried the architecture.

// 01

Money is an integer, always

Every monetary value is an integer of fils stored as bigint, and every money column is named with a _fils suffix so a float can never quietly appear in a calculation. Formatting into a human-readable dirham string happens once, at the presentation edge, and nowhere else.

// 02

A double-entry ledger, not a balance column

All money movement is recorded as append-only double-entry rows where every debit has a matching credit. Balances are never derived by summing order rows or reading a denormalised total — which means a bug in order handling cannot silently corrupt what somebody is owed.

// 03

The platform never holds the money

Card payments run as Stripe Connect direct charges on the provider's own connected account. The provider is merchant of record — their name on the receipt, their funds settling to them, their disputes. Monjez takes only a flat facilitation fee as the Connect application fee.

// 04

A flat fee, frozen at creation

The fee does not scale with order value: a 500-dirham order and a 50-dirham order carry the same charge. It is written onto the order when the order is created and never recalculated, so a provider changing plan next month cannot rewrite last month's books.

What it runs on.

Laravel 12 PHP 8.3 PostgreSQL 16 Flutter Stripe Connect Terraform AWS eu-central-1

We build these for ourselves. We build them for clients too.

Everything on this page was designed, built, deployed and is operated by the same small senior team. If you have a product that needs the same treatment, start with a conversation.