Built a complete field-operations platform for a Saudi electrical-contracting group executing a national-utility framework contract — 44 custom Odoo modules plus an offline-first mobile app with over-the-air updates. It connects the contract, its permits and materials, the fleet, safety, HR and finance, all the way down to the technician logging a task on-site — with a tailored cockpit for every role, from site engineer to owner.
44
custom Odoo modules
8+
role cockpits
OTA
field updates
100+
field staff
ZATCA
compliant
The system — from the contract to the phone
There is no off-the-shelf system that runs a national-utility field contract end to end. So we built one — a platform of 44 Odoo modules and an offline field app — and made every part flow as a single chain: from a contract clause, to the permit that unlocks it, to the material issued, to the task on a technician's phone, to the invoice.
The framework contractutility work orders · permits · scope clauses
→
the buildOne field-ops platform44 Odoo modules · server-driven cockpits · compliance in the model
→
The worker's phoneoffline-first · OTA updates · dead-signal sites
one contract · hundreds of field staff · Arabic / English · ZATCA · Odoo 19 Enterprise
01 The client
A Saudi electrical-contracting group delivering medium-voltage infrastructure for the national electricity utility under a framework contract — multiple sites, hundreds of field staff, fully bilingual Arabic and English, and ZATCA-compliant.
It runs on Odoo 19 Enterprise — from head-office finance all the way out to a technician on a remote site.
02 The core problem
A dozen disconnected worlds
Executing a national-utility field contract is a coordination problem across a dozen worlds that don't talk to each other. There's the contract and its work orders; the permits that legally gate every task on site; the materials the utility issues and expects accounted for to the unit; a fleet of vehicles and equipment spread across sites; safety and PPE; procurement and project budgets; attendance for hundreds of field workers; ZATCA-compliant invoicing and completion certificates.
And then there are the field teams themselves — who work on remote sites with no signal, not at desks.
None of it was connected. And every role — project manager, site engineer, warehouse, maintenance, executive — needed a completely different view of the same operation.
Every task gated by a permit, every material accounted for to the unit — and none of it talked to each other.
03 The approach
One nervous system, not a stack of features
I treated it as one nervous system, not a pile of modules. From a signed clause in the contract, to the permit that unlocks it, to the material issued to a yard, to the task on a technician's phone, to the attendance punch, to the invoice — it's one chain, and it had to flow as one.
So instead of bolting on features, I built a platform: a server-driven cockpit layer that renders each role's dashboard from configuration rather than hard-coded screens; a mobile app that works offline in the field and updates over the air; and compliance enforced in the data model itself, not left to anyone's memory.
1
See the whole board
One chain from a contract clause to a worker's phone — permits, materials, fleet, safety, HR and finance modelled as one connected operation, not separate apps.
2
Build a platform, not modules
A server-driven cockpit layer renders every role's dashboard from configuration, and re-skins across all of them from a single brand file — closer to low-code than a set of screens.
3
Bake compliance into the model
Permits, ZATCA invoicing and immutable closed records are enforced by the data model — no task, material or invoice slips the rules because someone forgot them.
4
Go where the work happens
An offline-first field app so a technician on a dead-signal site keeps working and syncs on reconnect — with over-the-air updates that ship fixes to the phone in minutes.
Engineer a platform a business runs on — not a pile of modules.
04 The solution
One connected platform — 44 Odoo modules and a field app
Contract execution, permit-gated
Utility work orders ingested as contract lines mapped to standardised scope clauses; pre-execution site surveys adjust planned quantities against real conditions; and permits enforced at the model layer — a computed gate blocks any material from being spent without an active, approved permit. A live material-balance report tracks planned / at-yard / used / scrapped / unaccounted per project, so leakage shows immediately. Completion certificates and ZATCA QR invoices close the loop.
Fleet & maintenance
A nine-module suite covering the full lifecycle: preventive maintenance scheduled by running hours, daily inspections that gate trip logging, inter-site equipment transfers with approval, two-stage breakdown escalation, KPI dashboards, and records that lock immutable once closed.
Safety & PPE
Request → approval → delivery with photo evidence, custody tracking of who holds what, negligence reports, and inventory-gated tool swaps.
Procurement & budget
Material requisitions flowing into multi-vendor offer comparison and auto-generated purchase orders — all gated by project wallets that track allocated, reserved, spent and remaining funds in real time.
HR & biometric attendance
A two-way ZKTeco ADMS integration syncing employees and punches across multi-site devices, with timezone handling and duplicate-punch prevention; automated rules that detect violations and route them to a manager to justify or penalise; and automatic contract renewal.
Finance & compliance
Granular per-user posting and journal permissions, partner ledgers, deferred expenses, and ZATCA-compliant e-invoicing.
Role-based cockpits
Eight-plus tailored dashboards — project manager, site engineer, warehouse, coordinator, the four maintenance roles, and an executive owner view — each rendered from configuration rather than bespoke code, and re-skinnable from a single brand file. Closer to a low-code platform than a set of screens.
The mobile field app
Flutter, offline-first, built to work where the work happens: local caching so a dead-signal site keeps working and syncs on reconnect; attendance, tasks, expenses, leaves, loans and payslips; role-specific maintenance workflows; GPS and geofence tracking; push notifications; full Arabic / English RTL — and Shorebird over-the-air updates that ship straight to the phones in minutes, no store-review delay.
05 The outcome
The contractor runs its entire field operation — contract to cash, head office to the on-site technician — on one connected system. Every role sees its own cockpit; field teams work offline and stay in sync.
Compliance is enforced by the platform rather than by memory: no material moves without a permit, every invoice is ZATCA-clean, and closed records can't be altered. And because the cockpits and the app are configuration-driven, a new role or screen is a config change — not a rebuild.
Why it matters
This isn't customising an ERP — it's building an operational nervous system, from a national-utility contract clause all the way to a worker's phone on a site with no signal. It took a platform mindset — server-driven cockpits, an offline app that updates over the air, compliance baked into the data model — and the whole-board view to make the back office and the field one system.
Not configuring software — engineering a platform a business runs on. That's the work.