almoliky.dev
All work

Selected work

08 / 09

Hawwil

A remittance app for GCC workers sending money home to Yemen, Jordan, Egypt and Syria, with the fee and the exchange rate fixed up front and the payout visible as it happens.

Hawwil’s landing page: “Send money across borders, instantly”, above a table of fixed rates from Saudi riyals to Yemen, Jordan, Egypt and Syria.
The landing page: one fee, and a fixed rate for every corridor.
On a phone, the page a recipient opens for a transfer: 13,790 YER, marked picked up, with the reference, the sender, the amount sent and the pickup branch.
The page a recipient opens, with no account: what was paid out, and how it was collected.

Built for SalamHack 2026, in the track for sending and receiving money. A sender picks a recipient and an amount, sees the fee and what will arrive before confirming, and gets a reference the recipient can open, without an account, to follow the payout.

Next.js and Supabase. The money logic lives in Postgres functions rather than in the browser, so the page cannot set its own fee or rate. Settlement itself is simulated, under the hackathon’s sandbox rules.

What I built

Sending

  • A transfer wizard: recipient, amount, review, then a live processing step and a receipt.
  • A 1.5% fee and a fixed rate for each corridor, shown before you confirm, with the amount that arrives after both.
  • Instant transfers between Hawwil accounts, found by email or by scanning a QR code.
  • Recurring transfers on a schedule, run daily by a cron job.
  • History with PDF receipts and a CSV export.

Receiving

  • Every transfer gets a reference such as HAW-20261020-AUD3RM, written without 0, O, 1 and I so it can be read out over the phone.
  • The recipient opens that reference with no account, follows the status, and chooses cash pickup, a bank account or a mobile wallet. Cash is collected with a six-digit code.
  • SMS and WhatsApp messages through Twilio. The transfer is saved first, so a failed message never fails a transfer.

Behind it

  • One database function works out the fee, the rate and the amount, and debits the sender in a single step. Calling it directly cannot set a different fee or rate.
  • Row-level security on profiles, transfers, recipients and schedules: a sender sees only their own, and an operations role sees all.
  • An internal console with transfer volume, fees collected and the payout pool for each corridor.
  • Sign-up and sign-in checked with Zod, with password reset and optional magic-link and Google sign-in.