Modules

Modules I built or rebuilt

Food safety & quality

Inspections & corrective actions

Scored food-safety and quality inspections that branches run on a tablet, with corrective actions that have to be closed and checked.

  • One question per screen, photos from the camera, Arabic first
  • Critical items fail an inspection whatever the overall score
  • Corrective actions with due dates and a verification step; manager approval enforced on the server
  • Rebuilt the inspection PDF: summary first, photos next to their item, about a fifth fewer pages
  • Odoo 18
  • OWL
  • QWeb PDF
  • 289 tests

Owner — designed, built and run in-house

Internal — not public

Operations

Branch checklists

Daily, weekly and monthly branch checklists on a tablet, in place of paper. This is the app behind the 2,500+ checklists.

  • Templates by shift, day of week and deadline, with automatic closing
  • Answers as checkboxes, yes/no, temperatures with min/max limits, numbers, photos and ratings
  • The central kitchen’s paper forms moved into the app
  • Odoo 18
  • OWL
  • 57 tests

Owner — designed, built and run in-house

Internal — not public

Inventory

Nightly and month-end stock counts

Branches count stock on a tablet after the till closes; the system checks the counts before anyone is blamed for a difference.

  • A rotating list of items each night, compared with the last count; a recount before a gap is reported
  • A morning email and PDF to management with the night’s differences
  • Month-end count of 500+ items per branch; reviewers fix counts in place; approval posts to inventory
  • Odoo 18
  • OWL
  • PostgreSQL
  • 476 tests

Owner — designed, built and run in-house

Internal — not public

Inventory

Stock requests and transfers

Branches request stock, and nothing moves until the request is approved. This is the app behind the 8,000+ stock requests.

  • An approval workflow for every request
  • Transfers and manufacturing orders created from the approved request
  • A reorder report and a scrap export
  • Odoo 18
  • Inventory
  • MRP

Owner — designed, built and run in-house

Internal — not public

Management reporting

Branch daily report

One screen per branch that replaced the nightly email to management.

  • Orders, customers, average ticket, discounts, transfers, counts and staff lateness from HR shifts
  • Incidents and complaints logged in the report; management opens follow-ups, the branch closes them, the opener confirms
  • Arabic right-to-left PDF; branch managers see what was wasted, not what it cost, and no sales or cash figures, by design
  • Odoo 18
  • Python
  • 112 tests

Owner — designed, built and run in-house

Internal — not public

Point of sale & HR

Staff meals and HR sync

The staff-meal policy enforced by the till, fed by employees, attendance and shifts synced from the HR system every 30 minutes.

  • Each employee’s daily allowance, counted across branches over a 05:00–05:00 staff day
  • Free only when the employee is checked in (live HR lookup with a 3-second timeout)
  • One “Staff Pricelists” screen replaced about 15 pricelists cashiers picked by hand
  • Leavers archived automatically, with a safety stop that refuses mass archiving
  • Found staff who had left still active, closed their access and fixed the cause
  • Measured cost: about 2% on till load time
  • Odoo 18 POS
  • KayanHR API
  • 64 tests
  • 46 tests

Owner — designed, built and run in-house

Internal — not public

Point of sale

Bank card terminals

The till talks to the card terminals of two acquirers over one driver.

  • Each branch has an active and a spare terminal, with one-click failover
  • One shared payment method per acquirer across all branches; terminal settings visible to managers only
  • Ported the module’s till front end to Odoo 18
  • Odoo 18 POS
  • OWL

Ported and extended in-house

Internal — not public

Management reporting

Operations dashboard

The management dashboard for sales, menu and stock, with budget pace.

  • Filters by branch, sales type, delivery platform, day and hour
  • Menu engineering (Kasavana–Smith matrix), best sellers and slow movers
  • Sales by hour, a weekday × hour heatmap, and the same weekdays last year
  • A one-year view went from 18 s to 2–4 s after moving the heavy loops to SQL
  • Damaged stock by branch, then by item, linked to the records
  • Odoo 18
  • SQL
  • OWL
  • Chart.js

Owner — designed, built and run in-house

Internal — not public

Training

AI staff academy

Staff courses and exams, drafted by AI from the company’s own SOPs, in Arabic.

  • Outline first (editable), then pages, questions, marking rubrics and an exam draft
  • AI marks open answers; a person reviews, and only a person releases results
  • Model choice per step, retry and fallback, a monthly spending ceiling, every AI call logged
  • Rebuilt in Aug–Sep 2026; Arabic SOP PDFs now read in the right order
  • Odoo 18
  • OWL
  • LLM APIs
  • Python
  • 735 tests

Owner — designed, built and run in-house

Internal — not public

Integration

Odoo-to-Odoo sync engine

A sync engine for POS sessions, journal entries and purchases, where nothing is written without approval.

  • Mapping rules and dry runs before any write
  • Approval before writing, and an audit log of what was written
  • Crash recovery built in
  • Every money write is signed by a named person
  • CI and an integration test harness
  • FastAPI
  • HTMX
  • PostgreSQL
  • 1,379 tests

Owner — designed, built and run in-house

Internal — not public

Also built

  • Sales by pricelist on the end-of-day (Z) report, with discount against menu price
  • A discount report by branch, with the reason for each discount and what each employee consumed

Finance

Finance work

The finance side of the same job.

  • 2027 budget model

    Built from the ERP’s P&L by cost centre (Dec 2022 – Aug 2026), trial balance and cash flow. One assumptions sheet, formulas throughout, and an input file for each branch manager and department head.

  • Monthly management pack

    An FP&A P&L report for the CEO, by branch, every month.

  • Sales tax (GST)

    A reconciliation workbook for each filing period, declarations checked against the budget for 2025–2026, and a daily reconciliation routine.

  • Accounting review

    A full review of the books with a findings report, and the procedure the external audit office follows.

  • The accounting team

    Wrote the job description and screened the CVs. Hired the team, then wrote how it works: onboarding plan, accountant handbook, an Odoo starter guide, and the full financial and operational cycle.

  • New ventures

    An 8-year feasibility study for a new F&B concept, and a 138-task, 8-phase project plan for a new branch fit-out.

Systems

Systems & infrastructure

How the ERP is hosted, shipped and restored.

  • Odoo.sh: every change rehearsed on a copy of production; deploys at quiet hours with a ~2.5-minute pause; any error in the test update blocks the deploy.
  • A local Odoo 18 Enterprise development stack that restores the full 16 GB production database in about 11 minutes.

How I work

How I change a live system

The tills keep selling while I work on the system behind them. Every change goes through the same five steps.

  1. Measure first. Logs, SQL and a copy of production before any opinion.

  2. Prove it on a copy. Scripts run as a dry run by default and roll back; the real run is a separate switch.

  3. Check before and after. Snapshots that must match: accounts, prices, stock value.

  4. Ship at a quiet hour, with the undo ready.

  5. Leave tests behind that fail if an Odoo update breaks the fix, and a check that blocks the release if the tests did not run.

AI agents write much of the code. The spec, the checks and the decision to ship stay with me.

Case studies

Five problems from the live system

Case study 02

599 → 48 mstill-open time after the fix

Why the tills felt slow

22 days of logs and 890,000 requests showed where cashiers really waited — and it wasn’t the database.

Case study 04

476checks against the raw data

One report for waste and hospitality

Waste and free items lived in two systems that never met. One self-checking workbook brought them together, and found a loss nobody recorded.

Case study 05

187 → 23code-quality warnings after the overhaul

Moving money between two ERPs safely

Before trusting my own sync engine with more of the books, I audited it end to end, then rebuilt it so every write has a name on it and nothing is written twice.

Contact

Hiring, or need finance systems built?

I’m open to roles where finance and technology meet, and to projects for businesses that need Odoo, reporting or operations software done properly.