Work
Real systems I've shipped for real clients — the hard problems and how I built them.
LifePlace
view live ↗Run the venue's whole inquiry → event → completion workflow; replace manual back-and-forth and rented CRMs.
A venue platform built since 2024 for an events venue in Cavite, Philippines — live as a Next 15 + Supabase/Drizzle + Inngest monorepo: client portal, admin CRM, and an Expo mobile app. 7-package monorepo with a clean domain layer (workflow engine, pricing, loyalty, DPA); an event-sourced Stripe payment state machine with idempotent completion + a date-reservation exclusion constraint; Inngest background jobs; React-PDF documents; Expo mobile app.
- —Web + admin + mobile
- —Web & admin Sentry-instrumented
- —Region ap-southeast-1
Payment-state-machine correctness (idempotent completion + date-reservation exclusion) + integrated domain complexity, shipped solo.
Three Rivers Vacation Rentals
view live ↗Take a vacation-rental business's 8 properties off the OTAs into a direct-booking site the owner controls.
Next 16; KV-backed hold/availability state; 6 crons (channel-sync, hold-expiry, check-in instructions, backups); multi-tenant isolation (withTenant() strict-throw + a check:tenant-leak CI gate, built for a future 2nd client); 3 payment rails (Stripe / ACH / Zelle); Airbnb photo/review scrapers; per-listing iCal.
- —8 live listings
- —Uptime-monitored (an outage was detected and auto-resolved via Sentry)
- —Cloudflare R2
Booking correctness (hold expiry / availability) + multi-tenancy built in from day one.
pocketplur
view live ↗A festival companion — lineups, conflict-aware itineraries, and crew coordination at no-signal venues.
pnpm web+mobile+shared monorepo (strict DRY); Expo SDK 55 iOS app (live on the App Store); BLE/UWB mesh messaging ("Rally") for offline crew coordination; offline-first mutation queue + sync; 3 Supabase Edge Functions; AI artist discovery (Spotify → Anthropic); Serwist PWA; RLS.
- —App Store listing (apps.apple.com/app/id6768796421)
- —Web: zero user-facing errors over 90 days
- —131 database migrations
Offline-first + peer-to-peer BLE/UWB mesh in no-signal environments — the distinctive distributed-systems problem.
SavSpot
view live ↗An open-source, self-hostable multi-tenant booking platform for service businesses (barbershops, salons, studios), with a commercial open-core tier.
Turborepo monorepo — NestJS + Prisma 6 API, Next.js web, Expo mobile, and shared / ui / embed-widget / mcp-server / ee packages. Postgres row-level-security multi-tenancy enforced via Prisma Client Extensions + request-scoped context (nestjs-cls); Stripe Connect Express (destination charges + platform fee); an open-core licensing model (AGPL core + an EE tier gated by a @RequiresLicense() guard); an embeddable booking widget; and an MCP server so AI agents can discover businesses and create bookings. BullMQ workers; Docker Compose self-host.
- —Open-source (AGPL-3.0) · live demo at savspot.co
- —96 Prisma models · 27 migrations
- —223 test files
RLS-enforced multi-tenant isolation + open-core licensing architecture + an MCP server for agent-driven booking — platform engineering, not just an app.