Software engineer in Kuala Lumpur. I build mobile and web apps, and I care most about the parts that are easy to get subtly wrong — money that has to add up, data that has to survive a lost connection, and rules that have to hold when somebody skips the screen you expected them to use.
Most of what I write is tested before it has a user interface.
mustafa-yahya.vercel.app · LinkedIn
| nexus | An AI interview platform. Recruiters post a job and share a code; candidates hold a live voice interview and every answer is scored on a six-dimension rubric into a hiring report. |
| sateva | A WiFi hotspot platform — captive portal owning plans, vouchers and WireGuard peers, with a separate backend and an Expo app for mobile purchases. |
| poultrix_stream | Poultry-house monitoring. YOLO models over a live video stream watching for downed birds and intruders, published over MQTT. |
| weft | A text CRDT written from scratch. Two people edit one document offline and converge on reconnect — with concurrent words staying whole instead of interleaving. |
| shopfloor | A shop back office with four roles, where the permission check is on the server rather than on the button, and the shop cannot sell the same jar twice. |
| bazaar | A shopping app in Flutter, 32 screens over a domain that was written and tested before any of them existed. |
outbox_queue — a durable outbox for offline-first Dart: queue writes offline, replay them in order with backoff, lanes and dead-lettering. On pub.dev, so
dart pub add outbox_queue is all it takes.
driftwatch — anomaly detection for sensor series: spikes, stuck sensors and baseline shifts, as a library or a FastAPI service.
Each has an app built on it — fieldlog and coop — because a library nobody has used is a library nobody has finished. fieldlog takes outbox_queue from pub.dev like anyone else would.
slip invoices without an account · miqat prayer times computed on-device · swatch a palette checker in OKLCH · matinee a film browser that ranks by evidence · tally freelance time tracking
Mobile Flutter, Dart, React Native Web TypeScript, React, Next.js, Vue, Tailwind Server Node, Express, FastAPI, Laravel, PostgreSQL, MongoDB, Firebase
The interesting problems are rarely the ones a framework solves for you. A few I have written up in the repositories above:
- Convergence is the floor, not the goal — two replicas can agree perfectly and
still turn
helloandworldintohwelolrold. - No single colour clears 4.5:1 against both a light and a dark ground. The two constraints do not overlap, so a palette that survives dark mode is a set of pairs.
- A film rated 10.0 by one person should not outrank one rated 8.5 by five thousand. The average is not wrong; the confidence in it is.
- Hiding a button is not authorisation.

