Dawood Ahmed
Email me
← all work

case study · Distribution · fertilizer and FMCG · 2026

AIWA Flow

My own POS and inventory product. The same code runs online for Ibrahim Business Manager and as an offline desktop install at Gibs Distributor.

AIWA Flow dashboard: sales, expenses, profit, balances and stock alerts, shown with demo data
https://ibrahim-solution.comDesktop edition, shown with demo data
My role
Sole developer — product, code, deployment and installation
For
Ibrahim Business Manager (online) · Gibs Distributor (desktop)
Status
Live · ibrahim-solution.com ↗ · code ↗
Stack
React + TypeScript · Vite · Tailwind · Node.js + Express · SQLite (sql.js) · Electron · GitHub Actions → VPS

The Gibs edition is an offline desktop install — demo on request.

the problem

At Gibs Distributor, an FMCG distributor in Sheikhupura, stock lived in ledgers, every sale was a hand-written bill and shop debts were tracked on paper. Closing a day took hours, and there was no quick way to know what was in stock, who owed what, or whether the month had been profitable.

what I built

  • A fast POS counter screen for sales orders
  • Stock with low- and out-of-stock alerts, updated automatically by purchases, sales and returns
  • Master data for companies, brands, categories and products, with CSV product import
  • Purchase orders, purchase returns, sales returns, suppliers and customer accounts
  • Deliveries, routes and sales reps
  • Expenses, profit reports and cash, bank, JazzCash and EasyPaisa balances
  • One dashboard for sales, expenses, profit and pending payments, with PDF invoices
  • An audit log of every change, and logins with role checks

decisions that mattered

One codebase, two deployments

The same React + Express app ships two ways: as an Electron desktop install that runs fully offline at Gibs, and as a web app on a VPS for Ibrahim Business Manager.

The database is a file

Everything is stored in SQLite through sql.js and saved to a single file, so a shop needs no database server and the desktop edition works without internet.

Every change leaves a trail

An audit log records who created, edited or deleted orders, stock, payments and cash entries — with the amounts involved.

Money logic has tests

Stock is held in product batches and drawn down oldest-first. Scripted test suites cover the batch logic, carton and unit pricing, opening balances and double-click protection.

Deploys check themselves

A push to main runs GitHub Actions: it connects to the server, builds, restarts the app under PM2 and fails the deploy if the health check doesn't answer.

inside

  1. InterfaceReact + TypeScriptPOS counter, back office, dashboard and reports
  2. APINode.js + ExpressJWT logins, role checks, business rules, audit log
  3. DataSQLite via sql.jsThe whole database in one file — no server
  4. Ships asElectron · VPS + PM2Offline desktop at Gibs, web app for Ibrahim
Ibrahim Business Manager sign-in page
The online edition at ibrahim-solution.com

result

  • Hand-written registers and paper bills replaced by one system at Gibs Distributor.
  • Stock, sales and payments managed from one dashboard.
  • Live online for Ibrahim Business Manager.

Before this, everything was in registers and handwritten bills and it was hard to keep track. Now managing the business is easy — stock, sales and payments are all in one place.

— Owner, Gibs Distributor · Sheikhupura