Project Details
Home/Project Details
FuelLink
Project description
A fuel market built from the regulator's own numbers
The Challenge
Nigeria's downstream fuel market is asymmetric in both directions. The regulator publishes the numbers that describe it — refinery utilisation, national stock sufficiency, gantry pricing — as monthly PDF fact sheets, so the only authoritative account of the sector is the one nobody reads. And the trades themselves are private: a depot quotes a marketer a price directly, with the counterparty risk carried by whoever moved first.
The one source worth publishing is a monthly PDF on someone else's container, so anything built on it has to survive a source that is authoritative, late and hand-shaped. The market layer cannot be launched whole either — escrow, licensing and settlement each need counterparties that do not exist yet, so a single big-bang build would be a year of unshippable work.
The Solution
Build it in layers, and ship the layer that stands alone. L0 is intelligence: the NMDPRA fact sheets ingested by script, validated against shared schemas and charted on public pages — useful by itself, needing no counterparty, honest about its own provenance. L1 is the exchange: a depot registry, private pricing and escrowed orders between suppliers and independent marketers, built as a separate NestJS service with its own escrow state machine, so the market can be switched on without rebuilding the site above it. Shared zod contracts sit in a third package so the two halves cannot drift apart.
Skills and deliverables
Features delivered
The hard part
Making a monthly PDF into a live product without inventing a single figure. The ingestion script enumerates the regulator's public container, downloads new fact sheets, parses the tables and validates everything against the zod contracts — and each committed dataset carries its own source URL and retrieval timestamp. Being right matters more than being fresh, so when the source changes shape the build fails loudly rather than shipping a number nobody can trace. The same instinct runs the other way round: the sector figures on the landing page are labelled with the month they were published, not presented as today's.
The Impact
Live and public — the intelligence layer is serving real NMDPRA data, with gantry pricing, state price indices, the Lomé index, a fuel sufficiency radar and LPG and jet A-1 desks, charted from the committed, validated datasets. The exchange app's depot, marketer and admin surfaces are deployed alongside it. The honest boundary, which the repository states plainly: the exchange runs on in-memory mock data with stub auth, and its API is built but not yet wired into the web app — that is Phase 2, and the site does not pretend otherwise.