Practice
Software built to the process, not to a template.
For operations no configured product fits — usually because several parties need the same record and none of them work the same way.
What I build
- Multi-tenant platforms
- Several parties on one record, each seeing their own slice, enforced at the database with row-level security rather than in the UI.
- Access without accounts
- Signed magic links for the participants who will never sign up — the difference between a process being adopted and being bypassed.
- Documents that read themselves
- OCR extraction checked against the record, with a person confirming. Automation that acts alone is how quiet errors get in.
- Payments and webhooks
- Invoices generated from verified data, Stripe payment links, and webhook confirmation rather than someone marking it paid.
- Messaging integrations
- Status changes that notify over WhatsApp with an SMS fallback and quiet hours, so chasing stops being a job.
- Interfaces for the phone
- Counters, clinics and warehouses are not desktops. The screen is designed for where the work happens.
How the build runs
Vertical slices, not layers
Every feature goes data → API → UI → tested, so progress is always demonstrable.
Weekly demos on live staging
You see the actual system every week. No status document standing in for working software.
Highest-risk work mid-project
Integrations and payments are scheduled in the middle, not left to the end where they sink a deadline.
Sign-off with a warranty
Each milestone is signed against its acceptance criteria and carries a 30-day defect warranty.
Products in the wild
Also
When the process is standard enough that Odoo already does it, I implement that instead of building from scratch.
- Next.js
- TypeScript
- Supabase
- PostgreSQL
- Stripe
- REST integrations
- OCR