Fjord
Multi-tenant SaaS backend for home-service contractors - lead capture, AI-driven SMS follow-up, and reviews on one stack.
Fjord gives home-service contractors - plumbers, HVAC techs, electricians - a white-label lead-capture website, automated Google review requests after every job, instant 24/7 follow-up on missed calls and texts, and a dashboard that tracks every lead from first contact to close. Onboarding is built to be fast: a short intake form and a walkthrough call, then a contractor is live in about a week, across tenants in the US, UK, and Europe.
I'm the backend engineer on Fjord - I own the API surface every tenant's dashboard, AI workflows, and third-party integrations run on.

59
REST API endpoints
13
database tables
88%
faster client onboarding
<5s
p95 latency, k6-tested
Multi-tenant architecture
Every contractor on Fjord runs on the same Postgres instance and the same API surface, but their leads, pipeline, and site content can never cross. I architected that boundary as a Node/Express backend on Supabase with 59 REST endpoints across 13 database tables, enforcing tenant isolation across three surfaces per business: their dashboard, their sales pipeline, and the white-label site Fjord provisions for them.

AI-powered lead recovery
A missed call is the single biggest leak in a contractor's pipeline - a customer who doesn't hear back fast just calls the next plumber. I built the AI layer that closes that gap: a Gemini-powered workflow system that holds a configurable context per customer - the business's services, tone, and pricing rules - and runs the conversation logic for inbound SMS. It qualifies the lead and drafts a personalized reply in that business's voice, automatically, 24/7.

Integrations, auth & reliability
Fjord's automation reaches outside its own stack - most contractors already run GoHighLevel for CRM and messaging, so I integrated Fjord with GoHighLevel's APIs and webhooks rather than asking anyone to switch tools. Every endpoint sits behind JWT-based authentication, hot paths are cached in Redis, and billing runs through Stripe. Before shipping changes to endpoints every tenant depends on, I load-test them with k6 against a p95 latency budget under 5 seconds. That combination - GoHighLevel integration plus a faster, tested provisioning path - cut client onboarding time by 88%.
- React
- Node
- Express
- Supabase
- Redis
- Stripe
- GoHighLevel
- Gemini
- k6