Contact inquiry
Core siteThe main lead form. It asks what we need for a first look and sends it to our inbox. It is built from the shared form set-up, with extra boxes added per trade when ?niche= is present.
Design reference
.lead-form / .field / .form-* classes,
plus the footer capture's own .footer-capture-* set — all in
public/styles.css, so this page can't drift from what ships. It's the form sibling of the
hero sections, section gallery,
pop-ups, and footer gallery.
The main lead form. It asks what we need for a first look and sends it to our inbox. It is built from the shared form set-up, with extra boxes added per trade when ?niche= is present.
The low-friction email-only on-ramp beside the CTA button in every grid-category footer. A native method="get" form to /contact — no JS, no new backend contract — that hands the email in via ?email=.
This specimen renders the real FooterCapture.astro component, not a copy — it ships with no id names (the label wraps the box instead), so it is safe to put here twice. Its tracking is stripped by the guard below, same as every other sample's scripts and endpoints.
The book-it-yourself calendar. Pick a call kind, a day, and a time from real open slots, then leave your details. Run by booking-engine.js on the live route.
Low-friction registration — name and email only — posted to the inquiries endpoint by webinar-register.js, then redirected to the confirmation page.
Sign in to your start page. Your email and password go to the safe sign-in page, then you come back.
View liveType an account email. If it has an account, we send the next steps. We word it carefully so it never tells you whether an account exists.
View liveThe $1 digital-product checkout. Unlocks the Caravan Launch Kit on payment. Card entry is handled by the secure payments SDK, which only loads on the live route.
View liveFixed deposit that reserves a kickoff slot for an engagement. Card entry is handled by the secure payments SDK, which only loads on the live route.
View livePackage-based checkout — pick a tier, then pay the set price. Card entry is handled by the secure payments SDK, which only loads on the live route.
View liveOpen-amount checkout for invoiced or agreed one-off payments. Card entry is handled by the secure payments SDK, which only loads on the live route.
View live
Every form above is shown at rest. After a submit, the shared
.form-status region under the form takes one of four states —
the same element form-engine.js writes to.
Sending…
data-state="loading" Waiting on confirmation…
data-state="pending" Thanks — we'll be in touch shortly.
data-state="success" That didn't send. Please try again.
data-state="error"