Platforms
Products with real users and a roadmap past launch.
Web app, mobile app, and the services behind both — accounts, payments, field workflows, and the admin surface that keeps it all honest.
In practiceBuilderHelp
Construction project management — a Next.js dashboard, an Expo field app, Stripe and ACH, and OCR that reads supplier invoices.
Case studies
Long-form writeups of how the work actually went.
Selected work
- BuilderHelpAI construction project management — invoices, change orders, subcontractor payments, RFIs, scheduling and budgets across a web dashboard, an owner portal, and a field-crew mobile app on one source of truth.Case study →
- Provale CupCommerce and marketing site for an FDA-registered metered drinking cup — Shopify checkout, clinician resource library, and editor-owned content throughout.Case study →
Field notes
- A quote is not a cart with a PDFWholesale buyers negotiate a price and a window. Treating that as a mutable cart with an export button is how accepted quotes drift before they become orders.
- Don't clear a backlog at full speedAfter a gap, the instinct is to reconcile as fast as the CPU allows. Upstream quotas do not care. Catch-up has to share one budget with live traffic — and lose when they collide.
- An error string is not a contractPartners cannot switch on your prose. Ship stable problem types (RFC 9457), honest status codes, and an instance id that matches your logs.
- A shared dashboard is not an ownerOpenTelemetry makes it easy to ship traces from every surface. Without a named owner for each path, the dashboard is just a shared wall of red.
- Generate the idempotency key when they click, not when you retryA timeout after POST does not tell you whether the write landed. Safe retries need a client-generated key minted at user intent — not a new UUID on every attempt.
- Available is not sellableShopify's inventory webhook speaks for available and on_hand. The states that take units off the shelf can stay silent — so a sync that only listens drifts by design.
- Five demos are not an eval harnessA prompt tweak that looks better on five hand-picked examples can quietly break citation, decline, and edge cases. Pin a golden set and gate the change.
- Staging that lies is worse than no stagingA green staging deploy can hide the exact gaps that break production. We treat shared staging as a rumor until the config, third parties, and data shape match the live path.

