How I work
Why I build the software instead of renting it, what that has been worth in numbers, and the rules that show up in every build.
I don't buy the software. I build it.
Hospitality runs on subscriptions. Compliance platform, workforce platform, reservations platform — each one a monthly line that never quite fits how the business actually works, and none of them talking to each other.
I replaced them. Not with configuration, but with systems built against this operation, shipped into live service, and maintained since. The kitchen app feeds the weekly management report. The staff app enforces PII separation the bought product never had. The bookings engine writes into the same database as everything else.
What follows is thirty-seven of them, every one in service, with what went wrong on the way included.
Every figure traceable to a source document.
Four rules that show up in every build.
Prove it cheaply before you spend
Before committing to custom hardware for the wearable, I ran phone-recorded audio through transcription to test whether the premise held at all. It did, so the hardware got built. The invoice pipeline went the other way — two approaches were tried and abandoned on real constraints before the third one shipped.
Ship without stopping service
The database remediation touched 55 production tables carrying live payroll and guest data. It went out in four sequenced stages — additive policies, app release, device rollout confirmation, then removal of the permissive ones — specifically so it could land mid-service without locking a single member of staff out.
Read the raw error
A payment failure that looked like an account problem turned out to be a mangled key value. A greeting cutting off mid-sentence turned out to be line noise triggering a speech barge-in on a one-second timeout. Neither was visible in a dashboard. Both were sitting in the logs.
Write down what's still exposed
The security audit shipped with its remaining gaps documented rather than buried: an unrate-limited PIN endpoint, twelve-hour JWTs with no refresh, and the fact that row-level security filters rows but not columns. A handover that hides the weak points isn't a handover.