Shipped software, with real proof.
Every case names what we built, what changed for the business, and the one thing that went wrong. If a project has no honest difficulty to report, it is not written up.
Every case names the hard part

LazyEat
Five products in one food platform, and an AI that helps you choose
The hard part
The hard part was the count, not any one piece. Five surfaces share one domain model, so a change to how an order works is a change in five places, five release cycles and five sets of edge cases — and the whole thing only functions when all five agree. We scoped this as an app with some panels attached, and it is not: it is five products that happen to ship together. Anything similar we now scope as five.

7BusyBoss
300+ browser-based tools, no signup, and nothing you type leaves the page
The hard part
Shipping 300+ tools created a discovery problem we underestimated — the index page became the product, and the first version of it was unusable. Search and categorisation had to be rebuilt after launch.

Hong Sau Resort
Zero bookings on 2,000 monthly visitors — now 30 a month, and a second property
The hard part
Rate parity was the hard part, not the code. Undercutting the OTAs directly would have risked the resort's listings, so the direct channel had to win on inclusions and guarantees rather than on headline price. That was a commercial decision we had to work through with the owner before a line of the booking flow made sense.

My Inborn Talent
Replaced manual assessment paperwork with a platform the business runs on daily
The hard part
Report generation was slower than promised in the first build because the templates were doing layout work at request time. Moving generation to a queued job fixed it, but it meant reworking how counsellors were notified — a change we should have anticipated during scoping and did not.

Pearl Dental Clinic
Rebuilt a clinic site around local search so patients book without phoning
The hard part
The site renders its content on the client, which search engines handle unevenly. It works for patients but it holds back the ranking this rebuild was meant to win, and moving it to server-rendered pages is the honest next step — we would scope that differently today.
Get your number in 2 minutes.
Instant estimate range. Exact quote after one 20-minute call. Held build slot. Money-back milestone one.