Primary care, longevity and recovery under medical supervision: a bilingual site, booking connected to the CRM and a content factory that respects the evidence.
How I solved it
Fenix Medical Center combines primary care, longevity and recovery under medical supervision. The brief: a bilingual site, a CRM and a content factory.
System architecture
Under the hood.
The system's real parts and how they talk: pick a path or open a component.
The whole system
13 components, 13 connections and 3 guided paths.
Open a component to see what it receives, where it sends and which paths include it.
Components
- Visitor — Bilingual site ES / EN
- Next.js 16 site — next-intl · 40 pages
- Cinematic engine — Pre-rendered video + CSS
- Contact form — Lead without health data
- 3-step booking — Day → time → details
- Vercel WAF — 5 requests / 10 min per IP
- POST /api/lead — Fail-closed switch
- Strict validation — 7 fields · no free text
- ghl.ts — GHL REST API
- Meta Conversions API — No personal data
- GHL Inbound Webhook — Lead intake
- Website Intake workflow — Contact → tags → opportunity
- Website Leads pipeline — New → Scheduled · 6 fields
Connections
- Visitor → Next.js 16 site: HTTPS
- Next.js 16 site → Cinematic engine
- Next.js 16 site → Contact form
- Next.js 16 site → 3-step booking
- Contact form → Vercel WAF: POST
- Vercel WAF → POST /api/lead
- POST /api/lead → Strict validation
- Strict validation → GHL Inbound Webhook: 7 fields
- GHL Inbound Webhook → Website Intake workflow
- Website Intake workflow → Website Leads pipeline: New
- 3-step booking → ghl.ts: Slots
- ghl.ts → Website Leads pipeline: Booking
- Next.js 16 site → Meta Conversions API
Guided paths
- Lead capture
- The form goes through the WAF (5 requests per 10 min per IP) and the fail-closed switch; only 7 fields, no free text, reach GHL.
- 3-step booking
- Booking checks free slots in GHL, records the contact and creates the appointment, which moves to Scheduled in the pipeline.
- Compliance boundary
- Health data stays out: 7 fields with no free text, no pixel on treatment pages and a Conversions API without personal data.
Read the case as text
01 · The challenge
Communicate medical therapies without promising more than the evidence supports, and turn visits into appointments without exposing health data.
02 · Constraints
- Every medical claim with permitted and prohibited wording.
- Health data kept out of the form and out of advertising.
- Hispanic patients: a bilingual site and clear prices.
03 · Decisions
- 01A registry of 109 claims with permitted and prohibited wording.
- 02A 7-field form with no free text and a fail-closed switch into GoHighLevel.
- 03A 3-step booking against the CRM's real calendar.
- 04A base of 1,096 public medical videos to write scripts with keyword search.
04 · Outcome
A 40-page site in two languages, with booking connected to the CRM and a content factory that never overpromises.
