A workflow automation backend on AWS Lambda, Terraform-provisioned end to end, that runs the contact-form and status automations for my client sites.
Problem
Static client sites had nowhere to send form submissions, and glue automations were scattered across third-party tools with no reliability guarantees.
Approach
Workflows are declared as JSON, validated, and run step by step from the CLI, over HTTP or on a cron schedule. Infrastructure is Terraform (Lambda, API Gateway, CloudFront, WAF, EventBridge, SSM-managed secrets). Outbound requests are SSRF-hardened, and the repo carries ADRs and a self-graded service assessment.
Outcome
A v0 built for internal use: CI-gated with Vitest coverage thresholds and graded honestly per pillar, with the gaps before external traffic documented in the repo.
TypeScript
AWS Lambda
Terraform
PostgreSQL
Prisma
Vitest
Private repository.
coast-crm SaaS & observability
A multi-tenant business portal for home-service companies: customers, quotes, invoicing, payments and job dispatch.
Problem
The home-service businesses I operate needed one system for customers, invoices and jobs, with each business strictly isolated from the others.
Approach
Next.js and Prisma on Neon Postgres, run as a container on AWS Lambda behind CloudFront. Tenant isolation is enforced in the service layer (every query takes an explicit owner id), with Postgres row-level security as defense in depth on the billing tables. Payments go through Stripe Connect, and traces and metrics go through OpenTelemetry to Honeycomb.
Outcome
In production since October 2025, with Stripe in test mode until the first pilot business is onboarded. Customers, quotes, invoicing, payments and jobs are built.
Next.js
TypeScript
Prisma
PostgreSQL
Stripe
OpenTelemetry
AWS Lambda
Private repository.
gulf-coast-fishing-app Mobile & external data
An offline-first Expo app that puts Gulf Coast tide and water conditions on a map of fishing spots.
Problem
Fishing spots are often out of signal range, but tide and conditions data comes from live public APIs.
Approach
Expo and React Native with a SQLite offline cache and React Query persistence that follows connectivity. Tide data comes from a NOAA CO-OPS provider tested against recorded fixtures rather than the live API.
Outcome
An early prototype, local-first, with unit tests and CI coverage reporting in place from the start.