Booking Page โ "Request a Key"
Requirements: just a browser and a text editor to preview/edit; a local static server, Supabase project, and Stripe account are optional and only needed to make the form actually submit and take payment โ full walkthrough in SETUP.md.
A single-file, Cameo-style video-request booking page. Black-and-gold, mobile-first, built with a Chivo Mono / Space Mono / Doto type system. Visitors pick a request type, fill in details, add optional upgrades, and submit โ the page is wired to POST straight to a Supabase table and kick off a Stripe checkout via a Supabase Edge Function.
What's in the box
index.htmlโ the entire page. No build step, no framework, no dependencies beyond two external services you plug in yourself:- Google Fonts (Chivo Mono, Space Mono, Doto) loaded via
<link>tags - A Supabase REST endpoint + Edge Functions for submitting the booking and creating a Stripe Checkout session
- Optional analytics hook for PostHog (disabled by default โ see below)
The page includes: - A profile header, sample-clip strip, scarcity/social-proof line, and a live-activity ticker (the ticker text is hardcoded sample copy โ replace it) - A 6-option request-type picker that expands into a details form - Two optional add-ons (priced) and a running total - Client-side form validation - Three end states: request-submitted fallback, payment-success, payment-cancelled
Quickstart
- Open
index.htmlin a browser. It renders and is fully interactive with no backend โ form submission will fail gracefully until you connect the pieces below. - Swap the copy: business name, request types (
#choices), prices (data-price,BASE_PRICEin the script), reviews, footer contact link. - Swap the images: the
<img>tags point atimages/...paths that are not included in this template (personal photos were intentionally left out). Drop in your own and update thesrcattributes. - Wire up submission (optional โ the form works as a static page without this):
- Create a Supabase project with a
bookingstable matching thepayloadobject in the submit handler (id,service,name,email,phone,instagram,duration,preferred_date,preferred_time,location,offer_amount,details,status). - Replace
YOUR_PROJECT_REFandYOUR_SUPABASE_ANON_KEY(both markedkeyzhub-allowin the file) with your real project ref and anon key. There are three places: the CSP<meta>tag near the top, andSUPABASE_URL/SUPABASE_KEY/FUNCTIONS_BASEin the script near the bottom. - Write two Supabase Edge Functions the page already calls:
booking-emailโ fire-and-forget notification on new bookingcreate-checkoutโ creates a Stripe Checkout Session and returns{ checkout_url }
- On successful Stripe checkout, redirect back to this page with
?payment=success&booking_id=...(or?payment=cancelled&booking_id=...) โ the page already handles both query params on load. - (Optional) Analytics: the page has a no-op PostHog snippet. It stays inert until you
replace
__POSTHOG_KEY__with a realphc_...project key. - Deploy anywhere that serves static files โ Vercel, Netlify, GitHub Pages, S3, etc. There's nothing to build.
Make it your own
This is a template, not a live integration โ nothing will submit successfully until you connect your own Supabase project and Edge Functions. Everything else (copy, prices, request types, images, contact links) is yours to replace.