HavenClean
Website that turns search into bookings
Marketing site and admin platform for a cleaning company across Boston, Orlando, and Miami — instant online quotes, a bookings-and-leads backend, bilingual (EN/ES), and technical SEO from day one.

Strategy
Two problems, one build. The front of house had to convert paid clicks into bookings; the back of house had to turn those bookings into a business the team could see and run. We scoped both into a single Next.js application.
On the public side: a site that looks nothing like the template competition, a conversion path with intent-matched entry points — instant quote, persistent call button, customer area — and technical SEO plus answer-engine optimization from day one, across Boston, Orlando, and Miami, in English and Spanish. On the operations side: a dashboard where every quote becomes a lead, every lead a trackable record, and conversion and pipeline value are visible at a glance.

Design
A clean, high-trust identity — deep navy over bright white, bold display type, and real interior photography — that signals a professional service in the first second. Every path on the page is matched to where the visitor is: ready to book, comparing, or just calling.
- Deep-navy and white palette with bold display headings and photographic, full-bleed interiors — nothing like the stock-blue template look the category defaults to
- Conversion paths matched to intent: an instant online quote, a persistent call button, and a separate Customer Area for existing clients
- Trust signals above the fold — 5.0-on-Google social proof, an insured and background-checked crews badge, and a 24-hour satisfaction guarantee surfaced throughout
- Fully bilingual (English and Spanish) with locale-aware routing, plus a three-metro locations layer — Boston, Orlando, and Miami — for local relevance

Technology
Next.js 16 (App Router) and React 19, server-rendered and shipped as a standalone container image through GHCR to Dokploy — with a Postgres-backed admin platform behind the marketing site, not just a static brochure.
- Next.js 16 App Router + React 19, bilingual (English and Spanish) routing via next-intl with locale-correct metadata, canonical, and hreflang
- Operations backend: a dashboard for bookings, leads, customers, crews, and team — backed by Postgres via Drizzle ORM — surfacing conversion rate, pipeline value, and bookings by metro and service
- Instant online quote to booking flow with transactional email via Resend, plus a self-service Customer Area for existing clients
- Technical SEO and AEO from day one: per-route metadata, JSON-LD structured data, sitemap and robots, and per-metro local pages for Boston, Orlando, and Miami
- CI/CD on self-hosted GitHub Actions runners: typecheck + build + push to GHCR + Dokploy redeploy, with a preview environment spun up for every pull request and staging-to-prod promotion by image retag
Operations
The site is only half the product. Behind it runs an admin platform where the team works the whole funnel from one place — bookings, leads, customers, crews, and team — with conversion rate, pipeline value, and bookings over time on the dashboard. Every instant quote becomes a tracked lead, so paid spend is measurable end to end instead of disappearing into an inbox. It's built on Postgres via Drizzle and server-rendered with image optimization and route-level code-splitting, so the paid-traffic landing paints fast and the booking flow stays responsive.
