Skip to content
Anas Chaabane
Back to work
02Personal project

Mnadhem

An operations hub built for how Tunisian retail actually works

Role
Full Stack Developer
Period
2026 — Present
Stack
Next.js · TypeScript +4

Most inventory software assumes a business that banks everything, buys from suppliers who invoice, and sells through one channel. Much of Tunisian retail works differently. Mnadhem is built for how these businesses actually run.

01The problem

These shops run on a spreadsheet, a notebook and a group chat. Stock and cash only get reconciled at the end of the week, when it's too late to act. Imported tools don't fail because of language. Their data model assumes card payments, invoiced suppliers and a single sales channel.

02Approach

The cash ledger is the source of truth. Every sale, supplier payment, return, delivery fee or owner withdrawal is a ledger entry, and inventory is calculated from those entries, so the numbers reconcile on their own. Fast entry comes first: recording a sale takes one screen, because nobody will use a tool that's slower than their notebook.

  • Double-entry cash ledger, with inventory calculated from it
  • Multi-channel sales: shop floor, social media DMs, delivery partners
  • Supplier accounts that handle partial, informal and out-of-order payments
  • Role-based access for owners, shop managers and stockkeepers

03Architecture

Next.js App Router with server components for every page that reads data, so list views send almost no JavaScript to the browser. NestJS runs one module per domain (ledger, inventory, catalogue, identity) on PostgreSQL. Ledger records are never edited: a mistake is fixed with a reversing entry, so the history behind any number can always be traced.

Outcome
  • In active development as a personal project, not yet released
  • Owner dashboard designed around the two daily questions: what's in stock, and what's owed
  • Owned end to end: research, data modelling, API and interface