Hospital Companion App
2021Cross-platform mobile app supporting hospital staff and patient workflows - one Vue codebase shipped to iOS and Android with Capacitor.

Full Stack Software Engineer
I lead delivery on software that organisations depend on daily. When something breaks, I'm the one who finds out why, ships the fix, and writes the explanation the client reads. 8 years of that, currently at Kinobi, on a platform used by more than 50 client organisations.
The expensive mistakes are rarely technical. Usually someone built exactly what was asked for instead of what was needed.
I care about clean code and fast queries. I care more about whether the thing we built solved the problem someone actually had.
At Kinobi I build for universities and career centres. I'm not in their meetings, but I read the support tickets, the feedback and how people use the product, and most of what I build starts there rather than from a spec handed to me.
Before this I mentored 35+ engineers and ran bootcamp tracks, and won a couple of international hackathons back when I was a student. These days I pair with Claude on a lot of work. It's a real speed-up on the mechanical parts and no help at all on deciding what's worth doing.
B2B SaaS career platform used by universities and career centers across Singapore and Indonesia.
Edtech platform helping Indonesian students prepare for study abroad.
Coding bootcamp training junior developers into job-ready full-stack engineers.
One of Southeast Asia's largest edtech companies.
Online learning platform making quality IT education affordable in Indonesia.
ICT consultancy building digital products for enterprise clients.
Regional news outlet covering East Java.
Online media partner for city events in Surabaya.
Cross-platform mobile app supporting hospital staff and patient workflows - one Vue codebase shipped to iOS and Android with Capacitor.
Full LMS built and deployed end to end on Google Cloud - course delivery, assessments, and admin tooling for a private client.
Each one started as a production incident I wanted to make impossible to repeat. They ship as npm packages.
Point it at a running list endpoint and it reports whether pagination degrades with depth, whether result sets are bounded, whether error shapes are consistent, and whether rate limits exist. No OpenAPI spec, no source access. Exit codes are the CI contract.
Reads explain() output from mongosh, the driver, or Mongoose and turns 400 lines of JSON into a short list of findings: disk spills, collection scans, unselective indexes, unindexed sorts. Suggests an index only when the case is unambiguous, never guesses.
MongoDB documents six schema anti-patterns and no ORM checks for any of them. This parses schema source with ts-morph, never imports Mongoose or connects to a database, and flags unique-on-optional fields, redundant index prefixes, and case-sensitive unique strings. Every finding links to the MongoDB page it enforces.
Pull, diff, apply, and drift-check Atlas Search indexes from version control. Unlike a status-only wait, apply blocks until every host is serving the definition you just pushed, so a green deploy means the query actually changed.
Scans a codebase for call sites a Mongoose major upgrade affects and sorts them into two buckets. Mechanical changes, where only the syntax moved, get transformed. Semantic changes, where behaviour silently changed, are never touched: it reports the location and what to check. The refusal is the feature.
Small products aimed at problems I've watched people struggle with. None of them is a business. They're where I get to pick the problem myself.
Couples text their spending to a bot that categorizes it and keeps a shared ledger. Built because the budgeting apps I tried asked people to change their habits instead of meeting them where they already are.
A macOS menubar tool for quick capture that brings a note back before you forget it. Small, and built to scratch my own itch.
I'm open to full-stack roles and interesting product work, remote or with relocation. I'm in Indonesia (GMT+7), used to distributed teams, and happy to move my hours to overlap with yours. Email is the fastest way to reach me.