Skip to main content

▸ Payments Integration · Payment-Gateway Engineering

The fuel-payment layer I built for Iraq.

Three Iraqi rails — FIB QR, QI Card, NassWallet — reconciling into one in-app wallet, paid at the pump. Inside WAQOOD, a Tornet team product.

  • FIB QR
  • QI Card
  • NassWallet
  • In-app wallet

WAQOOD's payment layer: a station QR authorizes a fuel payment across three Iraqi rails — FIB QR, QI Card and NassWallet — settling into one in-app wallet.

The brief

Buying fuel in Iraq and the Kurdistan Region meant cash — exact change at the pump, no record, no choice of how to pay. A Tornet team, led by a colleague, built WAQOOD to fix the whole journey: find a station, compare live prices, and pay from your phone.

My part was the paying. I built WAQOOD's payment layer — three Iraqi rails (FIB QR, QI Card and NassWallet) and an in-app wallet — so a tank of fuel settles digitally, with the bank confirmations and reconciliation that make it trustworthy. The app, maps and comparison views around it are the team's; the rails underneath are mine.

▸ the scroll is the payment

Authorize at the pump.

Scan the station's QR, the rail clears, the wallet settles — the moment the payment layer exists for. illustrative flow · not real transaction data

A fuel payment authorizing at the pump — a phone scans the station QR, the chosen rail clears, the meter counts to roughly 12,500 Iraqi dinar, the in-app wallet is debited, and the payment is confirmed. The figures are illustrative, not real transaction data.

The payment layer

Three rails, one wallet.

Each rail clears differently — FIB's bank QR, QI Card's redirect, NassWallet's gateway — so I built one reconciliation path: a signed webhook confirms the charge, the in-app wallet settles in IQD, and a pending transaction that never confirms times out cleanly instead of stranding a driver's money.

3payment rails
1in-app wallet

signed webhook · payment.confirmed · pending-tx timeout

The WAQOOD wallet: an IQD balance with a top-up action and transaction history

The in-app wallet I built — a running IQD balance, quick top-ups, and the transaction history every rail reconciles into.

The team's product

The product the payments serve.

The rails live inside WAQOOD — a Tornet team product, led by a colleague. The app, the maps, the station and comparison views, the multilingual experience and the design are the team's work; this is the context my payment layer runs in.

  • Petrol
  • Diesel
  • LPG
  • Kerosene

A per-fuel color system runs through the product, fully localised in English, Arabic and Kurdish with right-to-left layouts.

4
fuel types
5
payment methods
3
locales · en/ar/ku
24
data models
32
migrations
112
API routes

Platform built by the Tornet team.

Day and night

The team's app follows the driver day or night — the dark map swaps to muted tiles so station pins and availability stay legible. (Verified live on waqood.co.)

WAQOOD home screen in dark mode
WAQOOD station map in dark mode

What I take from it

Three live payment rails and a wallet, built for how Iraq actually pays — bank QR, card redirects and a local gateway reconciled into one balance a driver can trust. It's a small, sharp slice of a bigger team product, and the slice that turns a forecourt full of cash into a tap.