← All work

Case study

Product launch sites that feed the CRM

Three server-rendered product sites whose enquiries go straight into the CRM, so no lead is lost.

My role
Sole engineer
When
2026
Status
Live
Stack
TanStack Start, React, Tailwind, Zod, Vercel

The problem

Advertising campaigns needed somewhere to send people that was better than a PDF brochure, and every enquiry had to arrive in the CRM with the campaign that produced it.

What I built

A single-page, server-rendered site per model that works as an interactive brochure: a walkthrough video, interior gallery, specification tables, deck plans in a zoomable lightbox, a comparison with the sibling models, and an enquiry form, with a WhatsApp button throughout.

A lead is never lost

The form posts to a server function, so no key reaches the browser. It validates the input, silently drops spam caught by a hidden field, rate-limits per visitor, then sends the lead to the CRM with its product and campaign. If that fails it falls back through two email providers and a relay, and if the whole function fails, the page offers a pre-filled email and WhatsApp message instead.

Details that matter

Security headers on every response, including a strict content security policy. A first-party, cookie-free analytics beacon that keeps the landing page's campaign tags through the visit and reports into the same dashboard as the leads. A 159 MB source video shipped as 14.5 MB, with video paused when it scrolls out of view. On phones the layout changes, not just shrinks, and reduced-motion settings are respected.

The hard part

The framework turned server errors into a bare unhandled marker, which made failures impossible to diagnose. I added a capture layer that follows the error's cause chain and logs it, then shows a proper error page.

Limits

The three sites live in three repositories; the shared parts should be one template.

See a live site →