Skip to content
Mostafa Mahmoud

All work

Bando: a WhatsApp-first ERP for construction companies

A complete operations system for contracting and finishing companies. Site staff run purchasing, custody, site stores, subcontractors and client billing from WhatsApp, managers approve by reply, and every step is recorded in one database and synced to the company's accounting system.

Role
Founder, product owner and architect. Designed the data model, the workflows, the accounting integration and the admin panel, and tested the system end to end.
Period
2026
Status
Complete, ready for clients
Stack
n8n, PostgreSQL (Supabase), Evolution API (WhatsApp), React + Vite + TypeScript, Gotenberg, Docker, Zoho Books API, Odoo
  • 20n8n workflows
  • 40+WhatsApp commands
  • 12switchable modules
  • 8PDF document types
  • 47Zoho Books test operations, zero failures
  • 333admin panel tests

Architecture

System steps in order

  1. Channels
    1. Admin panel, React + TypeScript (Input). Feeds: PostgreSQL
    2. WhatsApp, Evolution API (Input). Feeds: WhatsApp command router, 40+ commands
    3. Mobile forms, one-time secure links (Input). Feeds: 20 n8n workflows
  2. Core
    1. WhatsApp command router, 40+ commands (Logic)
    2. 20 n8n workflows (Logic). Feeds: PostgreSQL
    3. Module switches, 12 modules (Logic)
  3. Data and documents
    1. PostgreSQL, one schema (Data). Feeds: Accounting queue: ordered, retried, no duplicates
    2. PDF generation, 8 document types, Gotenberg (Output)
    3. Files on the company's own server (Data)
  4. Accounting
    1. Accounting queue: ordered, retried, no duplicates (Logic)
    2. Connector per system (Logic)
    3. Zoho Books or Odoo 19+ (Output)

The problem

Small and mid-size finishing and contracting companies run purchasing, site work, subcontractors and client billing over phone calls, WhatsApp groups and spreadsheets. Approvals depend on who answers, spending per project stays invisible until the month ends, and the accountant re-types everything into the accounting system.

What I built

Bando keeps people where they already work. Site engineers send short WhatsApp commands or fill one-time secure form links on their phones, managers approve by replying, and every step lands in a single PostgreSQL database. An admin panel lets each company manage its own projects, users, suppliers, approval limits, budgets, reports and accounting settings.

  • Procurement cycle: request, project manager approval, supplier quotes (contract prices filled in automatically from price agreements), quote approval by amount, payment, delivery and receipt, and a closing PDF report.
  • Supplier payments: advance, deposit and remainder, credit or dated installments, set per supplier, per company rule or per agreement, with phased deliveries.
  • Custody and urgent purchases: custody issue, expenses with invoices, caps and settlement.
  • Supplier invoices and returns: invoices matched against received quantities, and returns.
  • BOQ budget: remaining quantity per item, overrun warnings, progress and wastage.
  • Subcontractors: contracts, measurements, progress claims with retention, advance recovery and deductions, and retention release.
  • Site: site store (receipts, issues, transfers between sites, stocktake), daily site log with instant blockers, named labour and weekly payroll.
  • Clients: client progress invoices, collections, change orders that update the BOQ, a weekly client update and actual profitability per project.
  • Quality and handover: snags with before and after photos, checklists and a handover certificate PDF.
  • Equipment rental: daily working or idle status and rent due.
  • Daily assistant: every morning each person gets the 8 most important things waiting for them and replies with a number to act.
  • Reports: monthly summary, cycle performance (average time per stage and where delays happen), payments and Excel export.
  • White-label: each company's name, logo and colour on every PDF and message, sent from the company's own WhatsApp number.

Module flows

System steps in order

  1. Procurement cycle
    1. Purchase request on WhatsApp (Input)
    2. Project manager approval (Logic)
    3. Supplier quotes, price agreements fill contract prices (Data)
    4. Quote approval by amount (Logic)
    5. Payment on agreed terms (Logic)
    6. Delivery and receipt (Input)
    7. Order closed, PDF report (Output)
  2. Custody and urgent purchases
    1. Custody issued (Input)
    2. Expense with invoice, mobile form (Input)
    3. Approval and cap check (Logic)
    4. Settlement (Data)
    5. Journal entry to accounting (Output)
  3. Supplier invoices and returns
    1. Supplier invoice (Input)
    2. Matched against received quantities (Logic)
    3. Mismatch flagged (Alert)
    4. Return recorded (Data)
    5. Purchase bill in accounting (Output)
  4. BOQ budget
    1. BOQ items (Data)
    2. Consumption from receipts (Logic)
    3. Remaining quantity and progress (Data)
    4. Overrun warning (Alert)
  5. Subcontractors
    1. Contract (Data)
    2. Measurement (Input)
    3. Progress claim with retention, advance and deductions (Logic)
    4. Retention release (Logic)
    5. Bill, credit note and payment in accounting (Output)
  6. Site
    1. Daily log and blockers (Input)
    2. Site store: receipts, issues, transfers, stocktake (Data)
    3. Labour and weekly payroll (Data)
    4. Daily summary and weekly report PDF (Output)
  7. Clients and change orders
    1. Change order into the BOQ (Logic)
    2. Client progress invoice (Logic)
    3. Collection (Input)
    4. Weekly client update PDF (Output)
    5. Actual profitability per project (Data)
  8. Daily assistant
    1. Morning digest, top 8 items per person (Output)
    2. Reply with a number (Input)
    3. Step carried out (Logic)
  9. Accounting sync
    1. Accounting event in the database (Data)
    2. Queue: vendor before bill before payment (Logic)
    3. Retry and resume from the last step (Logic)
    4. Zoho Books or Odoo 19+, cost centre per project (Output)

Key decisions

  1. WhatsApp first, forms where structure matters. Commands and reply approvals keep site work fast; about 40 types of one-time secure form links capture structured data such as invoices and measurements.
  2. Accounting logic written once. The accounting rules live in the database and each connector only translates them, so Odoo reused everything built for Zoho Books. A queue keeps the order (vendor, then bill, then payment), retries on its own and never posts twice; in Odoo every operation resumes from the step where it stopped.
  3. Profit and loss per project. Every accounting line carries its project: a Reporting Tag in Zoho Books and an Analytic Account in Odoo.
  4. Company rules are settings, not code. Retention, payment terms, who pays labour and similar rules differ between companies, so each one is an option in the admin panel.
  5. One installation, switchable modules. A hidden provider account enables any of the 12 modules per company, sets the plan and user limits, and hides the commands, help items and panel pages of disabled modules.
  6. Rules where money is decided. Approvals, payments and alerts follow explicit rules, so every decision is predictable and auditable.
  7. The company owns its data. Everything runs in Docker on the company's own server, files stay on that server, and one database migration file upgrades an existing installation without losing data.

Results

Bando is complete. The Zoho Books integration was tested on a real account with 47 operations and no failures, and the Odoo integration on a real Odoo 19 instance with 38 operations. The test suite covers 25 server test groups, an end-to-end run of the full cycle (160 messages) and 333 admin panel tests. The Linux installer was tested on a real Ubuntu server. Next: support for Odoo 16 to 18, and AI features on top of the rules: reading supplier invoices from photos, requests by voice note and free-text requests.

In action

Project A supplies

  1. Site engineer

    Need 40 bags of tile adhesive for Villa 12, Project A

    09:15
  2. Procurement assistant

    Request PR-0193 recorded and sent to the site manager for approval (EGP 18,000).

  3. Site manager

    Approved

  4. Procurement assistant

    Sent to supplier. Reminder set for delivery date.

Behind the scenes

Recording request

item
Tile adhesive
qty
40
unit
bag
project
Project A
est_cost_egp
18000
route
Site manager approval
Demo data. The real systems run for companies in Egypt.

All work