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