Landing pages
Switch the marketing site's whole landing page, header and footer to a ready-made niche with one line of config.
The marketing site ships several complete landing pages, one per niche. Each
one brings its own home page, header, footer and browser-tab name. You pick
one in apps/marketing/config.ts:
export const config = {
appName: "AlmostShipped",
landingPage: "restaurant", // "saas" | "restaurant" | "institute" | "travel" | "workspace" | "ai" | "devtool" | "app" | "spend" | "commerce" | "scheduling" | "banking"
// ...
};That's the whole switch. Every other marketing page (blog, contact, legal) keeps working and picks up the chosen header and footer.
Available variants
| Variant | For | What's on the page |
|---|---|---|
saas (default) | Software products (the demo is Northpeak, a made-up analytics and AI workspace) | Hero with a tabbed product tour, a rating and customer logos, a sticky scroll-driven feature scene, integrations and data governance, why choose us, sliding testimonials, an independent-study band, pricing from your payments config, FAQ |
restaurant | Restaurants, takeaways, cafés | Hero with rating, ordering options, featured menu, family band, reviews, location and hours |
institute | Online schools and academies (the demo is a Quran academy) | Hero, why choose us, three steps, teachers with an application form, pricing with a monthly/yearly switch, student platform, testimonials, FAQ |
travel | Travel agencies and tour operators (the demo is a guided Umrah trip) | Hero with a live countdown, payment plan, the trip, guides, team, hotels with photo rails, a scroll-driven flights scene, train, ziyarah, extra activities, what's included, room prices, FAQ, and a reservation form |
workspace | Team workspaces and productivity tools (the demo is Notewell, a made-up connected workspace) | Hero with a rotating word and a drawn app window among ink doodles, a logo wall, an AI bento (meeting notes, answers with sources, agents), use cases, illustrated customer stories, a stats line, a three-plan pricing table, FAQ, and its own "Request a demo" contact page |
ai | AI products with credit-based usage (the demo is Echoform, a made-up AI voice platform) | Hero with Studio, Agents and API tabs over a carousel of glossy voice orbs that play a sample in the browser's own voice, a logo grid, two drawn app mock-ups, Studio and Agents bentos with customer lines, an API list with a code card, a research timeline, safety cards with line drawings, credit-based pricing, latest updates, a floating voice-chat bubble, and its own "Talk to sales" contact page |
devtool | Developer tools and product-development software (the demo is Stackline, a made-up issue tracker for software teams and their AI agents) | Dark-first, with its own light theme: a hero with a drawn app window (an open issue, its activity and an agent writing a plan and opening a pull request), made-up customer wordmarks, a two-tone statement, three principles with isometric line drawings, four feature sections (intake and triage, planning and roadmaps, agents and automations, review and ship) each with a drawn mock-up, a changelog line, two quote cards, a four-tier pricing table, a closing call to action, and its own "Contact sales" contact page |
app | Consumer mobile apps (the demo is Pennyleaf, a made-up personal-finance app for iPhone, Android and the web) | Hero with a phone and floating cards, a sliding row of bank marks, five assistant feature rows mixing two-card and full-width cards, an assistant-style picker, money tabs, household cards, a 3×3 feature grid, a privacy band, a review wall with a counting rating, one-plan pricing with a yearly/monthly switch, and its own "Get help" contact page |
spend | Spend management and corporate cards (the demo is Tallymark, a made-up spend platform for UK businesses) | Hero with a work-email box and a drawn company card among floating agent cards on a dotted stage, a sliding row of customer wordmarks, four feature columns, a receipts-by-text phone panel, card-controls and bill-pay cards side by side, a self-stepping "admin on autopilot" list beside its mock-ups, a customer savings story, a dark band of counting stats, Tally AI policy-flag and savings cards, a six-card product grid, three-plan pricing with a yearly/monthly switch, FAQ, and its own "Book a demo" contact page |
commerce | E-commerce platforms (the demo is Cartloom, a made-up platform brands use to sell online, in person and on social) | Dark and cinematic, with light sections between the dark bands in light mode: a hero whose second line rotates, beside a drawn shop with orders popping in, a two-tone "sell everywhere" statement over three channel pictures, a chat-checkout card, the editor, an admin orbit and channel tiles, a borders card with clickable markets over a dotted world map, back-office tabs with two mock-ups each, three merchant stories, the Weft AI band with a self-typing prompt, a drifting wall of made-up app icons, a green band (checkout stats that count up, a dotted globe with order arcs, payouts), three-plan pricing with a yearly/monthly switch, numbered closing steps, and its own "Talk to us" contact page |
scheduling | Scheduling and booking software (the demo is Slotwise, a made-up scheduling platform with an open-source core) | Crisp monochrome on light grey between hairline rails: a hero with a working booking page (pick a length, time zone, day and time, then confirm), a sliding row of customer wordmarks, three numbered how-it-works cards, a features bento (event types with working switches, a short booking link, an availability editor, a reminder workflow with stacking notifications, a paid-session checkout), team tabs (round-robin, collective and a working routing form), an icon grid, a quote carousel, an app grid of made-up app icons, a code card with embed, React and API tabs beside an embed preview, an "open by default" band, a wall of love, four-plan pricing with a monthly/yearly switch, FAQ, and its own "Talk to us" contact page |
banking | Business banking and fintech (the demo is Harbourline, a made-up business-banking app for UK startups and growing companies) | Bands that change tone as you scroll, with a header that follows them: a coded harbour scene at dusk (moonlit in dark mode) with the web app rising out of it, a product overview with a timed list beside a panel that bleeds off the edge, a sliding customer row, a story carousel with progress-bar pagination, a 2×2 card grid, a big quote, two split rows with timed lists, a grid mixing full-width and paired cards, counting stats, frosted security tiles, news cards, two plan cards, numbered disclaimers, and its own "Talk to our team" contact page |
hr | Global hiring, payroll and HR platforms (the demo is Crewlane, a made-up employer-of-record, payroll and HRIS platform) | A split hero (a plum panel with toggle tiles that light up the matching product cards on a drawn stage beside it), a drifting row of customer wordmarks, six product cards with drawn mock-ups (a contract generator with local terms, a multi-currency payroll run, contractor invoices and a payout, an org chart, a visa tracker, a laptop on its way), a tabbed "how fast" timeline, a dark band with a dotted world map of hiring pins and payroll currency chips and a drifting cloud of product chips, a full-width payroll run dashboard with a pay-day timeline, an employee profile beside a working onboarding checklist, a customer-story carousel, counting stats, a dark reviews row, four per-person plans, FAQ, a closing band, a floating "talk to us" pill, and its own "Book a demo" contact page |
security | Compliance automation and trust platforms (the demo is Certwell, a made-up SOC 2, ISO 27001 and GDPR compliance platform) | A background that eases from cream to lavender to navy as you scroll: an inset periwinkle hero with a drifting dot field and a drawn compliance dashboard (framework rings, tests, a live activity line), made-up customer wordmarks, six product cards that turn lavender on hover, made-up apps wired into live tests, a controls list beside an evidence timeline, an AI chat and a questionnaire that fills itself in with cited sources, a trust-centre preview beside a vendor risk table, a big quote, a sideways row of text-only framework cards, three stage cards with line art, counting stats and stories, an auditor directory, three-plan pricing, guides, FAQ, and its own "Book a demo" contact page |
agency | Agencies and studios planning their people (the demo is Plotline, a made-up resource-planning and scheduling tool) | A night band with a working team schedule (drag a bar to fix an overbooked day, hover for details, click a name for the person card) and a capacity-vs-demand card, a drifting row of studio wordmarks, a sticky story that swaps a utilisation heatmap, a budget burn chart and a studio report as you scroll, a timesheet card beside a time-off calendar whose leave request you can approve, an integrations hub with made-up app marks, a drifting row of quote cards, three per-person plans with a monthly/yearly switch, counting stats on a grey band, a closing band, and its own "Book a walkthrough" contact page |
crm | CRMs and sales tools (the demo is Kinfold, a made-up AI-native CRM) | Precise monochrome between hairline rails: a hero with a drawn app window (a companies table with typed columns, one row still enriching) and a drafted email, customer wordmarks, five chapters with a table of contents that follows you (data model, a deals board with a working board/table switch, a research agent filling in a record, a workflow canvas, a report chart), an inbox-sync feed beside a record page with an activity timeline, a black band (a glowing horizon, a self-advancing list beside a wireframe tunnel, integration tiles, a code card), a serif quote that fills in as you scroll, counting stats, story tabs, four-plan pricing with a yearly/monthly switch, a changelog row, and its own "Talk to sales" contact page |
creator | Creator business platforms (the demo is Thrivecast, a made-up home for courses, coaching, community, memberships and downloads) | A warm off-white hero with a creator spotlight that moves on by itself (drawn portraits on studio scenes, earnings and product cards) and counting stats, a black band whose square tabs slide a carousel of gradient cards (a course player, a booking calendar, a community feed, membership tiers, a downloads page), a walkthrough band, three alternating rows on stone panels (a revenue dashboard with payouts, a checkout with an order bump, an email funnel), three-plan pricing with a monthly/yearly switch, a moss workshop band, five new-tool cards (a site builder, a branded app, a creator network, Spark AI with a self-typing prompt, a member helper), a story carousel, FAQ, and its own "Book a walkthrough" contact page |
design | Website builders and design tools (the demo is Tessel, a made-up website builder for designers) | Dark-first, with its own light theme: a hero with a live editor (layers, inspector, a cursor dragging an image with a smart guide, and a working breakpoint switcher the drawn site reflows to), made-up customer wordmarks, an AI build demo where the prompt types itself and a page assembles section by section, an animation timeline with a pause button, components and effects cards, a CMS whose Live/Draft switches update the site's journal, a language switcher that flips a page, SEO and analytics cards, a publish flow you can run, collaboration, hosting, security and A/B cards, two drifting rows of code-drawn sites, counting stories, a marketplace with working tabs, four-plan pricing with a yearly/monthly switch, a typing prompt box, and its own "Talk to sales" contact page |
logistics | Last-mile delivery software (the demo is Dropline, a made-up route planning, dispatch and live-tracking platform for UK couriers) | A pale hero with a drawn dispatch board running off the edge (today's routes, a stop open with its ETA, and a made-up city map with every route, numbered stops, the depot and live vans whose ETA chips count down), three courier quotes, an isometric stack of shippers, dispatchers, drivers and customers that lights up as you point at each, four chapters down a rail with coloured dots: Plan (a route-optimisation card, a navy shipper portal with orders dropping in, a driver app with turn-by-turn directions, delivery zones and route rules), Track (a sliding row of live tracking with a van driving its route, proof of delivery with a drawn doorstep photo and a signature that writes itself, exceptions and driver messages), Delight (four options that change a phone's customer tracking page: live ETA, a text message, a driver note or the shop's branding) and Grow (a step chart and a driver-performance card, counting stats and a quote), a navy API band with a code card that types itself, a drawn van outside a row of terraces, three per-driver plans with a yearly/monthly switch, guide covers, FAQ, a navy closing band, and its own "Book a demo" contact page |
email | Email platforms for developers (the demo is Postwire, a made-up email API, broadcasts and deliverability platform) | Dark-first, with its own light theme: a serif hero beside a coded stack of glass envelopes on a beam of light, made-up customer wordmarks, SDK samples behind ten working language tabs in a code card, a sandbox you can send from beside a live webhook event log, a broadcast composer with an open slash menu, audience and broadcast-analytics cards, a template studio (files, TSX and the rendered email, with working phone/desktop and light/dark inbox switches), a DNS records card whose "Check again" verifies the pending record, IP warm-up and reputation cards, six deliverability features, a big quote, a dashboard with metrics, logs and domains tabs and a two-week chart, four-plan pricing with a transactional/marketing switch, a drifting row of stories, a closing line over a giant wordmark, and its own "Talk to the team" contact page |
storage | Cloud file sharing and review for creative teams (the demo is Clipvault, a made-up media storage, review and approval platform) | Dark and cinematic, with its own light theme (a daylight grading suite where the viewer stays dark): a hero with a drawn app window (sidebar, asset grid and a viewer whose playhead scrubs past comment markers that pop up their notes), a drifting row of made-up studio wordmarks, four platform columns, a media browser with status fields and a selection bar, two big statements beside glowing glass arcs with a counting figure, a storage sheet with a metadata card, live camera-to-cloud uploads and a desktop drive, a review player where picking a comment jumps to its frame and draws its annotation (with a Fields tab), a version stack beside a side-by-side or wipe compare that works out what changed, approvals you can sign off to move the project on, a branded share-page carousel (reel, gallery with theme picker, link settings), customer stories round a phone running the mobile review app, integrations and security cards (a watermarked frame and an access log), four-plan pricing with a yearly/monthly switch, a closing band over rising glass arches, and its own "Talk to the Clipvault team" contact page |
support | Customer-support platforms (the demo is Calmdesk, a made-up AI-first support platform for B2B and technical teams) | Calm and precise on white, with deep-forest bands: a hero with a working support inbox (four threads from email, chat, a shared channel and a form; click one to open it, with the AI agent's reply and its sources, a handoff, and a customer sidebar with plan, ARR, renewal and a live SLA timer), made-up customer wordmarks, a channels statement, a platform band of six cards with green line drawings, an agent stage that plays a ticket through to a resolution or a handoff (a switch picks the ending), a routing workflow that lights each example thread's path, a customer timeline beside its account card, live SLA, plan-priority and business-hours cards, a help-centre article with an Ask AI box, an insights chart with a view switch, a developer band with code tabs, a reply composer and a webhook log, story cards with counting results, a set-up timeline, three-plan pricing with a monthly/yearly switch and per-resolution AI pricing, security seals, a dotted closing box, and its own "Book a demo" contact page |
healthcare | Health and wellness clinics (the demo is Wellroom, a made-up practice-management platform for physio, massage, counselling and more) | Calm and clinical-warm on white under a tilted pale-aqua wash: a serif hero over a drawn practice calendar (three practitioners and their rooms, colour-coded appointments and an appointment drawer) with a patient-app message and a live video session floating off its edges, a strip of disciplines, folder tabs (booking and scheduling, charting and notes, forms and reminders, billing and claims, telehealth, the patient app) each opening a deep-teal panel with two mock-ups (a room-by-room day and a booked-online card, a SOAP note with a body chart beside a template picker, an intake form and a text reminder, an invoice and an insurance-claim tracker, a video call and its waiting room, a booking phone and its confirmation email), four illustrated reasons, takings and missed-appointment report cards, counting figures and a carousel of clinic stories with drawn practitioners, three illustrated support cards, per-practitioner pricing with a monthly/yearly switch, an FAQ, a closing band with a drawn desk, a journal strip, a footer note that the company is fictional and nothing is medical advice, and its own "Book a demo" contact page |
nonprofit | Charity fundraising platforms (the demo is Hearthfund, a made-up home for donations, campaigns, events, donors, receipts and payouts) | Warm and photo-led like a charity's own site, with drawings in place of photos: a two-tier header with a marigold "Start free" block running to the screen's edge, a full-width drawn hero of a community fundraiser with a serif headline over a cream wash, a cream impact band of grey tags and four ruled counters that count up, a carousel of eight drawn tools with overlapping caption cards, alternating rows and paired cards on textured colour fields holding the mock-ups (a working donation form with amount chips and a monthly switch, a campaign page with a progress bar and donor wall, a peer-to-peer fundraiser card, an event ticket with a check-in list, a donor CRM table, a receipt email with its tax-back claim batch, a payouts summary, an impact report with a growing chart), a three-and-two grid of two-tone icons, charity stories on a grey band, plans with a monthly/yearly switch, a switching band, an FAQ, a two-band charcoal footer with a note that the company is fictional, and its own contact page |
invoicing | Invoicing and admin for freelancers (the demo is Paperlane, a made-up app for proposals, contracts, invoices, time and expenses) | Quiet black-and-white with small radii and black pills whose labels roll on hover: a centred hero over a grey bar of seven tools on a panel of drawn paper art, each opening the app window (a proposal with three packages, a contract whose signature writes itself, an invoice editor with VAT beside its Pay now page, a ticking time tracker, a receipt being scanned, the client portal and a revenue-and-tax report), playing through by itself until you pick one; three preview cards, drifting made-up wordmarks, three chapters with outlined feature chips and two mock-ups each (enquiries and a proposal's road to a deposit, a project board and budget, a late invoice's reminders and this week's payments), automation and bank-feed cards, generic integration tiles, four role cards with black captions, six reviews on a warm wash, three moving-in cards, three-plan pricing with a monthly/yearly switch, questions, a black closing band into a black footer, and its own "Talk to a real person" contact page |
fitness | Smart rings and wellness wearables (the demo is Nimbus Ring, a made-up smart ring and app for sleep, readiness, activity and stress) | Premium, calm and warm, with drawings in place of photos: a cream hero with the ring drawn in code catching the light beside floating readiness and sleep cards; a serif statement over six tall painted topic cards that widen on "+" to show a paragraph, a member's quote and a figure; five dark app screens fanned out (stress, temperature, Today, heart, sleep); three member quotes over two rows of drifting metric tiles; a day from 07:00 to 22:00 in four rows of painted scenes, each with two app cards; Coach, an AI chat card whose prompt chips change the answer, beside its phone screen; the ring with a finish switch and its specs, then the sizing kit and battery cards; ring and membership pricing with a monthly/yearly switch; questions; a night band of press cards from made-up publications and the footnotes; and its own "Talk to Nimbus Care" contact page |
marketplace | Talent marketplaces and freelance networks (the demo is Talentry, a made-up network where independents show work and clients hire and pay) | White, quiet and work-first, with drawings in place of photos: a centred hero with an "I'm hiring / I'm a freelancer" switch that changes the line under the headline, a prompt box that types example briefs and the suggestion chips, with drawn independents floating at the sides; a sideways row of dark trending cards (challenges with a prize, communities with counts); a discovery board whose Projects / People switch and craft tabs stick under the header and swap portfolio tiles drawn in code for freelancer cards; a grey "post a brief" strip; eight bold craft tiles; for clients, a search window whose filter chips really filter the results, an AI-match card beside a team-hiring board; for independents, a profile page with a services menu and reviews, a proposal with milestones beside a commission-free payout; milestone payments beside a fee comparison; counting figures and three stories; plans for clients and independents with a monthly/yearly switch; FAQ; a closing panel; and its own contact page |
forms | Form and survey builders (the demo is Formlark, a made-up form builder you write like a doc, free to start) | Quiet and paper-white like a doc, with a hand-drawn layer on top: a centred hero over an editor window that writes a form by itself (a title, an intro, then / opening the slash menu and three blocks dropping in), made-up wordmarks, a pink-to-violet free-plan card over doodled hills, a slash-command line you can really type into beside the privacy promises, Lark AI drafting a form from one of three prompts, a respondent window you step through (date picker, stars, a scale, uploads, a signature pad you can draw on, a payment field), conditional logic with a live rule and an on/off switch, a bakery order that adds itself up, hidden-field links that greet by name, a filterable responses table, a drop-off funnel, a team workspace, a theme switcher (themes, corners, the badge), embed, popup, link and custom-domain cards, generic integration tiles with webhook and API code cards, use cases, a wall of love, Free and Pro pricing with a monthly/yearly switch, questions, and its own contact page dressed as a Formlark form |
cloud | Backend and database platforms for developers (the demo is Rootbase, a made-up Postgres development platform) | Dense and calm like a database dashboard, dark-first with its own light theme: a two-line hero over a grid of seven product tiles, each with its own drawing (a linked schema, sign-in methods over drifting sign-ins, a deploy over a globe, stored files, live cursors, an embeddings cloud, tables wired to endpoints); made-up logos; a dashboard window with Table editor / SQL editor / Access rules tabs (typed columns, tinted SQL with its results, rules per table); client-library code tabs whose heading follows the language; a branching diagram beside a CLI session and generated types; templates and framework quickstarts; a horizontal accordion of customer stories; a wall of community posts; a green dot-matrix star count; four plans; a closing call to action with a security strip; and its own contact page |
events | Party invites and events apps (the demo is Invitely, a made-up app for invites, RSVPs, blasts, polls, albums and tickets) | Loud invites on calm chrome, with drawings in place of photos: a black hero with a poster headline and a pile of themed invite covers that deals itself, with chat bubbles popping in; a press strip whose quotes take turns; three cards (an invite being designed, a phone with a working Going / Maybe / Can't go picker that fires confetti, a phone getting a blast and a reminder); a 3D fan of twelve invite covers drifting by; a theme studio whose themes, effects and lettering restyle a live invite; a dark band where one phone stays put and swaps to a blast that types itself, a date poll whose bars grow and a reminder schedule; a guest list with working tabs beside co-hosts; an album of drawn party "photos"; a ticket with a drawn code beside the host's sales; a sideways row of reviews; Free and Plus plans with a monthly/yearly switch; a closing button inside spinning rings of tiny covers; and its own contact page |
social | Social-media scheduling tools (the demo is Postcove, a made-up scheduler for creators and small businesses, priced per channel) | Warm, friendly and uncluttered, with every channel made up ("Photo app", "Short video", "Pro network"…) and every screen drawn in code: a slim news strip, then a faint grid hero with channel tiles fading in and out on its cells, a pill that leads to sign-up and a counting line of users; drifting customer wordmarks; four big feature cards, each a white card around a pastel panel holding two mock-ups (a post composer with working per-channel preview tabs and live character counts, an assistant whose tone chips rewrite a draft, a comment inbox with suggested replies, an analytics chart whose bars grow beside a best-time-to-post heatmap); a week calendar beside a queue; four small cards (a team approval, the mobile app, a link-in-bio phone, the browser extension); a bar of channel tiles; a night band where an assistant chat plans next week message by message; Made for tabs with a customer story each; a pastel bento of resources; open company numbers that count up; Free / Essentials / Team pricing with a monthly/yearly switch and a "How many channels?" slider that updates every total; a closing card; and its own contact page |
desktop | Mac apps and keyboard launchers (the demo is Flint, a made-up keyboard-first launcher for Mac, free with a Pro plan) | Dark and glossy, with its own deliberate light theme: a hero of ember light bars behind a 3D keycap that tilts with the pointer; a Mac-style screen whose live Flint window a dock switches between a working command bar (it types a query, filters as you type, and takes the arrow keys, return and ⌘K actions), clipboard history, a calculator and window layouts; a dim keyboard with four lit promise keys; featured extensions with mini UIs and a store grid by category; an AI chat window that runs its steps and streams its answer, beside Quick AI and AI Commands demos; a people row with lit quotes; snippets that expand, a quicklink that fills itself, hotkeys that press, a theme picker and a shared team library; a developer blueprint with a code window and isometric drawings; Free and Pro pricing with a yearly/monthly switch; community cards; a closing keyboard with the hotkey lit; and its own contact page |
Think of these like the dashboard demos: they show what the boilerplate can do. Every section is self-contained, so keep the ones you need and delete the rest from the variant's landing component.
Making a variant yours
Using the restaurant as the example; every variant has the same layout under
apps/marketing/modules/home/variants/<name>/.
- Wording lives in the translations, under
home.restaurantinpackages/i18n/translations/<locale>/marketing.json. English, German, Spanish and French ship complete, so the language switcher translates the whole page. A test fails if any language is missing a string. - Business details — name, rating, phone, map link, featured dishes and
prices — live in
data.ts. - Photos: set
imageon a dish (orheroImage/familyImage) to a path underapps/marketing/public/. Until you do, each slot shows a drawn placeholder in your brand colours, so the page never looks broken. - Colours are the
--rest-*tokens inapps/marketing/app/globals.css, with separate light and dark values. - Headline font is set in
fonts.ts. Anynext/fontfont works. - "Book a table" opens the contact page while the contact form is on
(
FEATURES.contactForm), and becomes a phone link when it's off.
The SaaS variant works the same way, under home.saas and
apps/marketing/modules/home/variants/saas/. Northpeak, its customers and
their quotes are made up: change the name and lists in data.ts, the drawn
customer wordmarks in components/CustomerLogo.tsx, and the quotes in the
strings. "Start free" goes to sign-up in your SaaS app when
NEXT_PUBLIC_SAAS_URL is set, and to the pricing section otherwise; "Book a
demo" opens the contact page and is hidden while the contact form is off
(lib/links.ts). The pricing cards are your real plans, read from the
payments config, so they never drift from checkout. The product tour's
Dashboards tab shows the demo app's own dashboard screenshot
(apps/marketing/public/images/dashboard-*.webp); every other product view is
drawn in code. Colours are the --saas-* tokens in app/globals.css, and the
font is set in fonts.ts.
The travel variant works the same way, under home.travel and
apps/marketing/modules/home/variants/travel/. Its trip dates roll forward to
the next departure in data.ts, so the demo's countdown never runs out; set
a fixed date for a real trip. Every "Reserve" button opens one reservation
form that sends through the same handler as the contact form, so requests
arrive at CONTACT_EMAIL with every answer listed and the traveller as
reply-to. No payment is taken there: reply with how to pay the deposit, or
wire your payment provider into lib/send-booking-request.ts.
The workspace variant works the same way, under home.workspace and
apps/marketing/modules/home/variants/workspace/. Notewell, its customers,
people, quotes and figures are made up: change the name, prices and lists in
data.ts, the drawn customer wordmarks in components/CompanyLogo.tsx, and
the words in the strings. Every picture is drawn in code, so there are no
images to replace: the app window and product mock-ups live in sections/,
the ink doodles in components/Doodles.tsx and the story portraits in
components/Portrait.tsx. The hero's rotating word stands still for visitors
who prefer reduced motion. "Get Notewell free" and "Log in" go to sign-up and
the app in your SaaS app when NEXT_PUBLIC_SAAS_URL is set, and to the
pricing section otherwise; "Request a demo" opens the variant's own contact
page, whose form sends through the same handler as every other contact form,
and is hidden while the contact form is off (lib/links.ts). The pricing
table is plain demo data in data.ts, not wired to checkout. Colours are the
--work-* tokens in app/globals.css, and the font (Inter) is set in
fonts.ts.
The AI variant works the same way, under home.ai and
apps/marketing/modules/home/variants/ai/. Echoform, its customers, voices,
models, releases and figures are made up: change the name, plans, credits
and lists in data.ts, the drawn customer wordmarks in
components/CompanyMark.tsx, the code samples in sections/api/samples.ts,
and the words in the strings. Every picture is drawn in code, so there are
no images or audio files to replace: the orbs in components/Orb.tsx, the
painted art in components/GradientArt.tsx, the line drawings in
components/LineArt.tsx and the app mock-ups in sections/. The play
buttons read a line aloud with the browser's built-in speech
(lib/use-speech.ts), in the page's language; where the browser can't speak,
the orbs and waveforms still animate. The orbs' shimmer, the carousel and the
waveforms stand still for visitors who prefer reduced motion. "Sign up" and
"Log in" go to sign-up and the app in your SaaS app when
NEXT_PUBLIC_SAAS_URL is set, and to the pricing section otherwise; "Contact
sales" and "Talk to sales" open the variant's own contact page, whose form
sends through the same handler as every other contact form, and are hidden
while the contact form is off; "Read the docs" shows when a docs URL is set
(lib/links.ts). The pricing table is plain demo data in data.ts, priced in
credits but not wired to checkout or to the credit system. Colours are the
--ai-* tokens in app/globals.css, and the fonts (Geist at weight 300 for
headings, Inter for text) are set in fonts.ts.
The devtool variant works the same way, under home.devtool and
apps/marketing/modules/home/variants/devtool/. Stackline, its customers,
people, agents, issues, roadmap, changelog entries and figures are made up:
change the name, plans and lists in data.ts, the drawn customer wordmarks in
components/CompanyMark.tsx, the diff in sections/review/diff.ts, and the
words in the strings. Issue ids, people's names and code stay in data.ts, so
they read the same in every language. Every picture is drawn in code, so there
are no images to replace: the app mock-ups live in sections/, the isometric
line drawings in components/IsoArt.tsx and the status and priority icons in
components/IssueIcons.tsx. The page is designed dark-first; the site still
opens in config.defaultTheme, so set it to "dark" to greet visitors with
the dark version (the light theme is a finished design too, not a fallback).
Rows fade in as they scroll into view, the agent's "Thinking…" shimmers, the
hero's agent writes out its plan and a teammate's cursor drifts across the
board; all of it stands still for visitors who prefer reduced motion. "Sign
up", "Log in" and "Get started" go to sign-up and the app in your SaaS app when
NEXT_PUBLIC_SAAS_URL is set, and to the pricing section otherwise; "Contact
sales" opens the variant's own contact page, whose form sends through the same
handler as every other contact form, and is hidden while the contact form is
off; "Changelog" and "View all" open the changelog page while it's on
(lib/links.ts). "Learn more" and the feature links point at # until you
have pages for them (set them in FEATURE_SECTIONS in data.ts). The pricing
table is plain demo data in data.ts, not wired to checkout. Colours are the
--dev-* tokens in app/globals.css, and the fonts (Inter, as a variable font
so headings can sit at weight 510, and Geist Mono for labels and code) are set
in fonts.ts.
The app variant works the same way, under home.app and
apps/marketing/modules/home/variants/app/. Pennyleaf, its banks, merchants,
funds, reviews, publications, people and figures are made up: change the name,
price, trial length and lists in data.ts, the drawn bank marks in
components/BankMark.tsx, the publication wordmarks in
components/PressMark.tsx, and the words in the strings (swap in real reviews,
with permission, before you go live). Merchant, bank and fund names stay in
data.ts, so they read the same in every language, and every amount is
formatted in pounds by the code. Every picture is drawn in code, so there are
no images to replace: the phone in components/PhoneFrame.tsx (it scales with
its width), and the app screens and cards in sections/. Each feature row (in
the assistant section and the money tabs) shows either two separate cards side
by side, one painted and one quiet, or one full-width card, each with a short
caption (FeatureRow in components/ShowcaseCard.tsx); which layout a row uses
is set in ASSISTANT_ROWS and MONEY_LAYOUTS in data.ts, and on phones every
card stacks to full width. The cards float gently, chart lines draw in, the
bank row slides and the rating counts up as they scroll into view; all of it
stands still for visitors who prefer reduced motion. "Get started" and "Log in"
go to sign-up and the app in your SaaS app when NEXT_PUBLIC_SAAS_URL is set, and to
the pricing section otherwise; the download pills use the store links in
APP_INFO.storeLinks once you set them, and sign-up until then (they use plain
icons, not the stores' badge artwork); "Get help" opens the variant's own
contact page, whose form sends through the same handler as every other contact
form, and is hidden while the contact form is off (lib/links.ts). The plan
and its yearly/monthly prices are plain demo data in data.ts, not wired to
checkout. Colours are the --app-* tokens in app/globals.css, and the fonts
(Plus Jakarta Sans for everything, Geist Mono for the receipt-style labels) are
set in fonts.ts.
The spend variant works the same way, under home.spend and
apps/marketing/modules/home/variants/spend/. Tallymark, its customers,
merchants, suppliers, ledger, people, quotes and figures are made up: change the
name, plans, stats and lists in data.ts, the drawn customer wordmarks in
components/CompanyMark.tsx, and the words in the strings (swap in real quotes,
with permission, and say where your stats come from before you go live).
Company, merchant and people's names stay in data.ts, so they read the same in
every language, and every amount and date is formatted in pounds by the code.
Every picture is drawn in code, so there are no images to replace: the company
card in components/CorporateCard.tsx (no card-network logo; add your issuer's
artwork if you have it), the phone in components/PhoneFrame.tsx, and the
product mock-ups in sections/. The hero's cards float, the customer row
slides, the "admin on autopilot" list steps through by itself while it's on
screen (picking a job or the pause button stops it), the stats count up and the
chart bars grow as they scroll into view; all of it stands still for visitors
who prefer reduced motion. The work-email boxes go to sign-up in your SaaS app
with the address filled in when NEXT_PUBLIC_SAAS_URL is set, and to the
pricing section otherwise; "Get started" and "Log in" do the same; "Book a demo"
opens the variant's own contact page, whose form sends through the same handler
as every other contact form, and falls back to sign-up while the contact form is
off (lib/links.ts). The plans and their yearly/monthly prices are plain demo
data in data.ts, not wired to checkout. Colours are the --spend-* tokens in
app/globals.css, and the fonts (Inter Tight for everything, IBM Plex Mono for
the receipt-style labels) are set in fonts.ts.
The scheduling variant works the same way, under home.scheduling and
apps/marketing/modules/home/variants/scheduling/. Slotwise, its customers,
apps, people, posts, reviews and figures are made up: change the name, figures,
team, event types, plans and lists in data.ts, the drawn customer wordmarks
in components/CompanyMark.tsx, the made-up app icons in
components/AppMark.tsx, the code samples in sections/developers/samples.ts,
and the words in the strings. People's, company and app names, handles and
slugs stay in data.ts, so they read the same in every language, and every
price, date and time is formatted by the code. Every picture is drawn in code,
so there are no images to replace. The hero's booking page works: past days,
weekends and full days are greyed out, the times are re-told in whichever time
zone the visitor picks, in 12 or 24-hour clock, and confirming only shows a
"booked" state, with nothing sent or stored (the calendar maths is in
lib/calendar.ts). The event-type and availability switches, the team tabs,
the routing form, the quote carousel, the code tabs (with a copy button) and the
wall's "Show more" work too. Cards rise in as they scroll into view, the logo
row slides, the calendar-sync ring turns and the workflow's notifications stack
in on a loop; all of it stands still for visitors who prefer reduced motion.
"Get started" and "Log in" go to sign-up and the app in your SaaS app when
NEXT_PUBLIC_SAAS_URL is set, and to the pricing section otherwise; "Book a
demo" and "Talk to sales" open the variant's own contact page, whose form sends
through the same handler as every other contact form, and are hidden while the
contact form is off; "Read the docs" shows when a docs URL is set
(lib/links.ts). The plans and their monthly/yearly prices are plain demo data
in data.ts, not wired to checkout. Colours are the --slot-* tokens in
app/globals.css, and the fonts (Outfit for headings, Inter for text and Geist
Mono for labels and code) are set in fonts.ts.
The commerce variant works the same way, under home.commerce and
apps/marketing/modules/home/variants/commerce/. Cartloom, its merchants,
products, customers, carriers, apps, quotes and figures are made up: change the
name, plans, markets, orders and lists in data.ts, the merchants' wordmarks
in components/BrandMark.tsx, and the words in the strings (swap in real
merchants and quotes, with permission, and say where your stats come from
before you go live). Brand, product, carrier, app, customer and town names stay
in data.ts, so they read the same in every language, and every amount and
date is formatted by the code (pounds, plus each market's own currency on the
borders card). Every picture is drawn in code, so there are no images to
replace: the products (a mug, candle, trainer, tote, jumper, serum and lamp)
in components/ProductArt.tsx, each coloured from one tone in PRODUCTS, the
dotted map and globe from the rough land grid in lib/world.ts, the made-up
app icons from generic glyphs in sections/Apps.tsx, and the store, admin,
checkout and till mock-ups in sections/. No real network, marketplace,
carrier or payment brand appears. The header, hero, AI band, green band,
closing band and footer stay dark in both themes; the sections between them
turn white in light mode. The hero's second line rotates and its orders pop
in, the admin's rings turn, the app wall drifts, the AI prompt types itself,
the stats count up, chart lines and the globe's arcs draw in, and cards rise as
they scroll into view; all of it stands still for visitors who prefer reduced
motion. "Start free trial" and "Log in" go to sign-up and the app in your SaaS
app when NEXT_PUBLIC_SAAS_URL is set, and to the pricing section otherwise;
"Contact" opens the variant's own contact page, whose form sends through the
same handler as every other contact form, and is hidden while the contact form
is off (lib/links.ts). The plans and their yearly/monthly prices are plain
demo data in data.ts, not wired to checkout. Colours are the --cart-*
tokens in app/globals.css, and the fonts (Inter for everything, IBM Plex Mono
for the small stat labels) are set in fonts.ts.
The banking variant works the same way, under home.banking and
apps/marketing/modules/home/variants/banking/. Harbourline is not a bank:
it, its customers, people, quotes, publications, ratings and figures are made
up, and the footer's numbered notes say so. Change the name, figures, accounts,
plans and lists in data.ts, the customers' wordmarks in
components/CompanyMark.tsx, the publications' in components/PressMark.tsx,
and the words in the strings. Before you use it for a real financial product,
replace the made-up figures and add your own legal and regulatory wording; the
page names no regulator, partner bank or deposit-protection scheme, and its
savings and exchange-rate mock-ups are labelled illustrative rather than
offered. Company, merchant and person names stay in data.ts, so they read the
same in every language, and every amount and date is formatted by the code
(balances show their pence small and raised, as in the app). Every picture is
drawn in code, so there are no images to replace: the hero's harbour scene in
sections/hero/HarbourScene.tsx (its colours are the --bank-sky-*,
--bank-hill-* and --bank-water-* tokens, dusk in light mode and a moonlit
blue hour in dark), the web app's home screen in
sections/hero/DashboardWindow.tsx, the cards in components/PayCard.tsx
(no real card network's mark), the phone in components/Phone.tsx, and the
other mock-ups in sections/. The page runs in bands that change tone as it
scrolls (night, warm sand, cool light, night again); each section says which
it is with data-bank-tone, and the header follows the band under it. The
night bands stay dark in both themes; in dark mode the light bands turn
charcoal. The overview and the two split rows open their next item on a timer
(FeatureAccordion), pausing under the pointer, and the story carousel fills
a progress bar per story and has a pause button; the scene's mist, water and
lighthouse move gently, the app window rises as it scrolls into view, the
stats count up and cards rise in; all of it stands still for visitors who
prefer reduced motion. "Open account" and "Log in" go to sign-up and the app in
your SaaS app when NEXT_PUBLIC_SAAS_URL is set, and to the plans otherwise;
"Talk to sales" opens the variant's own contact page, whose form sends through
the same handler as every other contact form, and is hidden while the contact
form is off; the news cards open the blog while it's on (lib/links.ts). The
plans and their prices are plain demo data in data.ts, not wired to
checkout. Colours are the --bank-* tokens in app/globals.css, and the font
(Hanken Grotesk as a variable font, so headings can sit at weight 480) is set
in fonts.ts.
The hr variant works the same way, under home.hr and
apps/marketing/modules/home/variants/hr/. Crewlane, its customers, people,
reviews, payroll figures and exchange rates are made up, and the footer says
so. Its contract, payroll and visa mock-ups name local terms without quoting
any law, rate or statutory figure, and no page claims a legal entity in a
named country: add your own legal wording before you use it for a real
service. Change the name, figures, people, countries, plans and lists in
data.ts, the drawn customer wordmarks in components/CompanyMark.tsx, and
the words in the strings (swap in real reviews, with permission, and say where
your stats come from before you go live). People's and company names stay in
data.ts, and countries are ISO codes named in the visitor's language by the
browser, so none of them need translating; every amount and date is formatted
by the code, in pounds for the plans and in each country's own currency in the
mock-ups. Every picture is drawn in code, so there are no images to replace:
the dotted world map from the rough land outlines in lib/world.ts (one SVG
path), and the hero's stage, product cards, payroll dashboard, profile and
checklist in sections/. Countries show as two-letter tags rather than flags.
The hero's tiles light up their cards, the speed tabs redraw their timeline,
the onboarding checklist ticks, and the stories and reviews scroll on arrows;
the hero's cards float, the logo and chip rows drift, the map's pins pulse,
the payroll bars grow, the stats count up and cards rise in as they scroll
into view; all of it stands still for visitors who prefer reduced motion.
"Get started" and "Log in" go to sign-up and the app in your SaaS app when
NEXT_PUBLIC_SAAS_URL is set, and to the pricing section otherwise; "Book a
demo" and the floating pill's "Talk to us" open the variant's own contact page,
whose form sends through the same handler as every other contact form, and go
to sign-up while the contact form is off (lib/links.ts). The plans and their
prices are plain demo data in data.ts, not wired to checkout. Colours are the
--hr-* tokens in app/globals.css, and the fonts (Bricolage Grotesque,
narrowed with its width axis, for headings, and Instrument Sans for text) are
set in fonts.ts.
The agency variant works the same way, under home.agency and
apps/marketing/modules/home/variants/agency/. Plotline, its studios, clients,
people, apps, review sites and figures are made up, and the footer says so.
Change the name, people, projects, bookings, plans and lists in data.ts, the
drawn studio wordmarks and app marks in components/StudioMark.tsx and
components/AppMark.tsx, and the words in the strings (swap in real quotes,
with permission, and say where your stats come from before you go live).
People's, studios', clients' and apps' names stay in data.ts, so none of
them need translating; every amount, hour and date is formatted by the code.
Every picture is drawn in code: the working schedule in
sections/hero/ScheduleDemo.tsx (its rules, such as which day a bar may move
to and who's over capacity, are plain functions in lib/schedule.ts), and the
heatmap, burn chart, report, timesheet, calendar and hub in sections/. The
schedule's bars drag (or move with the arrow keys) and snap to days, the
status line and person card update as you go, the leave request can be
approved or declined and undone, and the pricing switch flips the plans; the
story's media cross-fades as you scroll, the hero's cards float, the studio
and quote rows drift, the burn line draws in, the stats count up and cards
rise in; all of it stands still for visitors who prefer reduced motion.
"Start free" and "Log in" go to sign-up and the app in your SaaS app when
NEXT_PUBLIC_SAAS_URL is set, and to the pricing section otherwise; "Book a
demo" and "Book a walkthrough" open the variant's own contact page, whose form
sends through the same handler as every other contact form, and go to the
pricing section while the contact form is off (lib/links.ts). The plans and
their prices are plain demo data in data.ts, not wired to checkout. Colours
are the --plot-* tokens in app/globals.css, and the fonts (Sora for
headings and Onest for text) are set in fonts.ts.
The crm variant works the same way, under home.crm and
apps/marketing/modules/home/variants/crm/. Kinfold, its customers, the
companies and people in the mock-ups, the deals, quotes and figures are made
up: change the name, companies, deals, plans, changelog and lists in
data.ts, the customer wordmarks in components/CustomerMark.tsx, the little
company logos in components/CompanyBadge.tsx, and the words in the strings
(swap in real customers and quotes, with permission, and say where your stats
come from before you go live). People's and company names, domains and towns
stay in data.ts, so they read the same in every language, and every amount
and date is formatted in pounds by the code. Every picture is drawn in code,
so there are no images to replace: the app mock-ups are in sections/ (the
hero's table in sections/hero/, one folder per chapter's mock-ups in
sections/chapters/, the sync card and record page in sections/sync/, the
black band's horizon, tunnel, code card and line drawing in
sections/memory/), and the integration tiles are generic icons, not real
brands. The board/table switch, the pricing switch, the story tabs and the
black band's list work; the research agent ticks through its steps and fills
in the record, the sync feed files new messages and its totals tick up, and
the black band's list advances by itself, all only while they're on screen;
the hero's last row shimmers until it's enriched, dashes flow along the
workflow's edges, the integration row slides, the quote fills in from grey to
ink as you scroll, the growth curve draws in and the stats count up. All of it
stands still for visitors who prefer reduced motion. The header turns dark
over the black band and the footer. "Start for free" and "Log in" go to
sign-up and the app in your SaaS app when NEXT_PUBLIC_SAAS_URL is set, and to
the pricing section otherwise; "Talk to sales" opens the variant's own contact
page, whose form sends through the same handler as every other contact form,
and is hidden while the contact form is off; "Browse integrations" opens the
docs when a docs URL is set (lib/links.ts). The plans and their
yearly/monthly prices are plain demo data in data.ts, not wired to checkout.
Colours are the --crm-* tokens in app/globals.css, and the fonts
(Instrument Sans for everything, Newsreader for the quote and JetBrains Mono
for code and small labels) are set in fonts.ts.
The creator variant works the same way, under home.creator and
apps/marketing/modules/home/variants/creator/. Thrivecast, its creators,
quotes, stats and earnings are made up, and the page says so wherever it shows
earnings (under the hero's figures, under the spotlight and the stories, in
the pricing note and in the footer). Change the name, creators, figures,
plans and lists in data.ts and the words in the strings (swap in real
stories, with permission, and say where your figures come from before you go
live). People's names stay in data.ts, so they read the same in every
language, and every amount, count and date is formatted by the code, in
pounds. Every picture is drawn in code, so there are no photos to replace:
the people are flat illustrated portraits (components/Portrait.tsx, one look
per person in data.ts) on warm studio scenes (components/Scene.tsx), and
the product mock-ups are in sections/ (the spotlight's cards in
sections/hero/, the five product cards in sections/products/, the
dashboard, checkout and funnel in sections/platform/, the new-tool drawings
in sections/releases/). The spotlight moves on by itself (it pauses while
hovered or focused) and has arrows; the product tabs slide their carousel (and
the header's product links open the right card); the stories move on arrows;
the pricing switch flips the plans; the funnel's and network's dashes flow,
Spark's prompt types itself, the revenue line draws in, the stats count up and
rows rise in as they scroll into view. All of it stands still for visitors who
prefer reduced motion. "Start free trial" and "Log in" go to sign-up and the
app in your SaaS app when NEXT_PUBLIC_SAAS_URL is set, and to the pricing
section otherwise; "Book a walkthrough" opens the variant's own contact page,
whose form sends through the same handler as every other contact form, and
goes to sign-up while the contact form is off (lib/links.ts). There's no
email box anywhere, so nothing personal ends up in a URL. The plans and their
prices are plain demo data in data.ts, not wired to checkout. Colours are the
--thrive-* tokens in app/globals.css, and the fonts (Host Grotesk for
everything and Red Hat Mono for the small figures in the mock-ups) are set in
fonts.ts.
The design variant works the same way, under home.design and
apps/marketing/modules/home/variants/design/. Tessel, its customers, the
sites in the showcase, the templates, plugins and creators in the marketplace,
the people and every figure are made up: change the name, lists, plans and
figures in data.ts, the customer wordmarks in components/CompanyMark.tsx,
and the words in the strings (swap in real customers and stories, with
permission, before you go live). Brand, site, template and people's names,
domains and the localisation card's little bakery page (written in each
language on purpose) stay in data.ts, so they read the same in every
language, and every price, count and date is formatted by the code, in
pounds. Every picture is drawn in code, so there are no screenshots to
replace: the editor in sections/hero/HeroCanvas.tsx, the miniature sites in
components/SiteThumb.tsx (one art direction per site), and the other
mock-ups in sections/ (the AI build in sections/ai/, the timeline,
components and effects in sections/tools/, the CMS, languages and SEO in
sections/content/, the platform cards in sections/platform/, the
marketplace window in sections/marketplace/). The hero's breakpoint switcher
works (it cycles Desktop, Tablet and Phone by itself until you pick one, and
the drawn site reflows with container queries) while a cursor drags an image
into place; the AI prompt types itself and the page assembles section by
section, with Replay; the timeline plays with a pause button; the CMS posts'
Live/Draft switches update the journal beside them; the language tabs flip
the page; the Publish button runs the domain steps; the marketplace tabs, the
pricing switch and the closing prompt box (which types example prompts and is
a link to sign-up, not a form) all work; the showcase rows drift and pause on
hover, the stories' figures count up and sections rise in as they scroll into
view. All of it stands still for visitors who prefer reduced motion. "Sign
up", "Start for free" and "Log in" go to sign-up and the app in your SaaS app
when NEXT_PUBLIC_SAAS_URL is set, and to the pricing section otherwise;
"Talk to sales" opens the variant's own contact page, whose form sends through
the same handler as every other contact form, and is hidden while the contact
form is off (lib/links.ts). The plans and their yearly/monthly prices are
plain demo data in data.ts, not wired to checkout. Colours are the --tess-*
tokens in app/globals.css (dark-first, with a light theme of its own), and
the fonts (Albert Sans for everything and DM Mono for the small labels in the
mock-ups) are set in fonts.ts.
The email variant works the same way, under home.email and
apps/marketing/modules/home/variants/email/. Postwire, its customers, the
people, domains, addresses, IPs and every figure are made up: change the name,
lists, plans and figures in data.ts, the customer wordmarks in
components/CompanyMark.tsx, and the words in the strings (swap in real
customers and stories, with permission, before you go live). Code samples,
event names, DNS values, brand and people's names stay in data.ts, so they
read the same in every language; the template studio builds its TSX from the
translated words, so the code and the rendered email always match, and every
price, count, percentage and time is formatted by the code, in pounds. Every
picture is drawn in code: the hero's glass envelopes in
sections/hero/EnvelopeStack.tsx, the glossy section icons in
components/IconTile.tsx, and the product mock-ups in sections/ (the code
card in sections/integrate/, the sandbox and webhook log in
sections/developers/, the composer, audience cards, template studio, DNS,
warm-up and reputation cards, dashboard and pricing in their own folders). The
language tabs, the sandbox's Send button, the template files and preview
switches, "Check again", the dashboard tabs and the pricing switch all work;
the webhook log adds an event every few seconds while it is on screen, the
stories drift and pause on hover, and sections rise in as they scroll into
view. All of it stands still for visitors who prefer reduced motion. "Get
started" and "Log in" go to sign-up and the app in your SaaS app when
NEXT_PUBLIC_SAAS_URL is set, and to the pricing section otherwise; "Read
the docs" goes to NEXT_PUBLIC_DOCS_URL when it is set and to the code
sample otherwise; "Talk to sales" opens the variant's own contact page, whose
form sends through the same handler as every other contact form, and is hidden
while the contact form is off (lib/links.ts). The plans are plain demo data
in data.ts, not wired to checkout. Colours are the --post-* tokens in
app/globals.css (dark-first, with a light theme of its own; the code
windows stay dark in both), and the fonts (Instrument Serif for the hero,
Space Grotesk for headings, Golos Text for text and Fragment Mono for code)
are set in fonts.ts.
The support variant works the same way, under home.support and
apps/marketing/modules/home/variants/support/. Calmdesk, its customers, the
people, threads, quotes and every figure are made up: change the name, threads,
lists, plans and figures in data.ts, the customer wordmarks in
components/CompanyMark.tsx, and the words in the strings (swap in real
customers and quotes, with permission, before you go live). Company, person and
agent names, ticket numbers, endpoints and code stay in data.ts (the code
samples in sections/developers/samples.ts), so they read the same in every
language, and every amount, count, date and time is formatted by the code, in
pounds. Every picture is drawn in code, so there are no screenshots to replace:
the app window in sections/hero/InboxWindow.tsx, the platform band's green
drawings in sections/platform/Glyphs.tsx, and the other mock-ups in
sections/ (the agent player in sections/agents/, the routing workflow in
sections/workflows/, the timeline and SLA cards in sections/context/,
the article in sections/help/, the chart in sections/insights/, the code
window and composer in sections/developers/). Channels and integrations are
generic icons, not any chat app's or tracker's logo. The inbox's threads open on
click and their SLA timers tick down live; the agent player plays its ticket
when it scrolls into view, with a switch between a resolution and a handoff and
a Replay button; the routing workflow cycles its example threads while it's on
screen (the chips pick one by hand); the chart's view switch, the code tabs (with
copy) and the pricing switch work; the SLA ring counts down, chart bars grow,
lines draw in, the stories' results count up and sections rise in as they
scroll into view. All of it stands still for visitors who prefer reduced motion.
"Start free trial" and "Log in" go to sign-up and the app in your SaaS app when
NEXT_PUBLIC_SAAS_URL is set, and to the pricing section otherwise; "Book a
demo" opens the variant's own contact page, whose form sends through the same
handler as every other contact form, and goes to sign-up while the contact form
is off (lib/links.ts). The plans, their yearly/monthly prices and the price
per AI resolution are plain demo data in data.ts, not wired to checkout.
Colours are the --calm-* tokens in app/globals.css, and the fonts (Funnel
Sans for everything and Fragment Mono for the buttons, small labels, timers and
code) are set in fonts.ts.
The healthcare variant works the same way, under home.healthcare and
apps/marketing/modules/home/variants/healthcare/. Wellroom, its clinics,
practitioners, patients, stories and every figure are made up, and nothing on
the page is medical advice (the footer says so): change the name, people,
appointments, plans and figures in data.ts and the words in the strings
(swap in real clinics and stories, with permission, before you go live).
Insurance claims stay generic, with no insurer named. People's, clinics' and
towns' names stay in data.ts, so they read the same in every language, and
every amount, date and time is formatted by the code, in pounds and British
order. There are no photos to replace: the practitioners and patients are flat
drawings in components/Person.tsx (skin tone, hair or head scarf, glasses
and clothes set per person in PEOPLE), the calendar is
components/DayCalendar.tsx, the video call components/VideoCall.tsx, the
feature mock-ups are in sections/features/, and the rooms, round "why"
pictures, support scenes and desk are in sections/stories/,
sections/why/, sections/support/ and sections/FinalCta.tsx. The
feature tabs switch on click and with the arrow keys, and a /#feature-<tab>
link (the header's Features menu, the footer) opens that tab; the stories
carousel steps with its arrows and dots, the pricing switch works, the video
timers tick, the hero's cards float, chart bars grow, lines draw in, figures
count up and sections rise in as they scroll into view. All of it stands still
for visitors who prefer reduced motion. "Start free trial" and "Log in" go to
sign-up and the app in your SaaS app when NEXT_PUBLIC_SAAS_URL is set, and
to the pricing section otherwise; "Book a demo" opens the variant's own contact
page, whose form sends through the same handler as every other contact form,
and goes to sign-up while the contact form is off. The journal strip links to
the blog and hides while the blog is off; it has no email field (lib/links.ts).
The plans and their monthly/yearly prices per practitioner are plain demo data
in data.ts, not wired to checkout. Colours are the --well-* tokens in
app/globals.css, and the fonts (Fraunces for headings, softened with its
SOFT axis, and Nunito Sans for everything else) are set in fonts.ts.
The nonprofit variant works the same way, under home.nonprofit and
apps/marketing/modules/home/variants/nonprofit/. Hearthfund, its charities,
campaigns, donors, supporters, bank and every figure and story are made up
(the footer says so): change the name, people, plans and figures in data.ts
and the words in the strings (swap in real charities and stories, with
permission, before you go live). Tax wording stays generic on purpose ("tax
relief", "tax-back claims on eligible gifts"), with no real scheme named:
name the one your country has. People's, charities' and place names stay in
data.ts, so they read the same in every language, and every amount and date
is formatted by the code, in pounds and British order. There are no photos to
replace: the people are flat drawings in components/Person.tsx (skin tone,
hair or head scarf, glasses and clothes set per person in PEOPLE), the
hero, carousel and story scenes are in sections/hero/, sections/tools/
and sections/stories/, the textured colour fields in
components/FieldPanel.tsx and components/Grain.tsx, the two-tone icons in
components/TwoToneIcon.tsx, and the product mock-ups in sections/. The
donation form works (pick one-off or monthly and an amount, tick the fees and
the total changes, though nothing is sent), the carousel steps with its arrows,
dots, swipes and arrow keys, the pricing switch works, the counters count up,
progress bars fill, chart bars grow, the hero's bunting sways and its card
floats, and rows rise in as they scroll into view. All of it stands still for
visitors who prefer reduced motion. "Start free" and "Log in" go to sign-up
and the app in your SaaS app when NEXT_PUBLIC_SAAS_URL is set, and to the
pricing section otherwise; "Book a demo" and "Talk to our team" open the
variant's own contact page, whose form sends through the same handler as every
other contact form, and hide while the contact form is off. The stories link
to the blog while it's on; the footer's call to action has no email field
(lib/links.ts). The plans are plain demo data in data.ts, not wired to
checkout. Colours are the --hearth-* tokens in app/globals.css, and the
fonts (Crimson Pro for headings, Montserrat for text and Barlow Condensed for
the small capitals) are set in fonts.ts.
The invoicing variant works the same way, under home.invoicing and
apps/marketing/modules/home/variants/invoicing/. Paperlane, its freelancers,
clients, reviews, studio wordmarks and every figure are made up (the footer
says so): change the name, clients, invoices, plans and figures in data.ts
and the words in the strings (swap in real customers and reviews, with
permission, before you go live). The setting is British (pounds, VAT at 20%),
and the tax wording stays generic on purpose: the tax pot and VAT figures are
labelled as estimates to help plan, not tax advice, in the report, the
questions and the footer. People's, companies' and file names, invoice
numbers and amounts stay in data.ts, so they read the same in every
language, and every amount, date and time is formatted by the code. Every
picture is drawn in code: the app window in components/AppWindow.tsx, the
paper-art backdrops in components/PaperArt.tsx, the wordmarks in
components/CompanyMark.tsx, the dot-matrix icons in
components/DotIcon.tsx, the seven tool views in sections/tour/, the
chapter cards in sections/chapters/ and the automation and bank-feed cards
in sections/smarter/. Integrations are generic icons, not any other
company's logo. The tour plays through its tabs while it's on screen (paused
on hover, stopped once you pick a tab), the contract's signature writes
itself, the "Pay now" button gets tapped and the payment lands, the timer
ticks, a scan line sweeps the receipt, chart bars grow and lines wipe in, the
wordmarks drift, the pricing switch works and sections rise in as they scroll
into view. All of it stands still for visitors who prefer reduced motion.
"Start free" and "Log in" go to sign-up and the app in your SaaS app when
NEXT_PUBLIC_SAAS_URL is set, and to the pricing section otherwise; "Talk to
us" opens the variant's own contact page, whose form sends through the same
handler as every other contact form, and hides while the contact form is off;
"Read more stories" shows while the blog is on (lib/links.ts). The plans are
plain demo data in data.ts, not wired to checkout. Colours are the
--paper-* tokens in app/globals.css, and the fonts (Rethink Sans for
everything and Mrs Saint Delafield for the signatures) are set in fonts.ts.
The fitness variant works the same way, under home.fitness and
apps/marketing/modules/home/variants/fitness/. Nimbus Ring is a fictional
demo product, and its members, quotes, publications, survey and every figure
are made up (the footer and the press footnotes say so): change the name,
prices, finishes, figures and lists in data.ts and the words in the strings
(swap in real reviews and coverage, with permission, before you go live).
The health wording stays on general wellbeing on purpose: trends, patterns
and "your usual range", no diagnoses, conditions or regulatory claims, cycle
insights kept generic, and Coach, the questions and the footer all say that
nothing here is medical advice. Have your own wording checked before you put
a real product here. People's and publications' names stay in data.ts, so
they read the same in every language, and every price, duration, time and
temperature is formatted by the code, in pounds and British style. There are
no photos to replace: the ring is drawn in components/RingRender.tsx (the
finishes are colour ramps in FINISHES), the painted scenes in
components/Scene.tsx, the phone in components/PhoneFrame.tsx, the five
app screens in sections/app/, the day's cards in sections/day/ and the
Coach chat in sections/coach/. The topic cards widen on "+" (and scroll with
their arrows, a swipe or the keyboard; /#topic-sleep and friends jump to
one), Coach answers whichever prompt you pick, the finish switch recolours
the ring, the pricing switch works, the header slides away as you read down
and returns as a floating bar, light sweeps across the ring, the metric tiles
drift, score rings and charts draw in and rows rise in as they scroll into
view. All of it stands still for visitors who prefer reduced motion. "Shop
the ring", "Start membership" and "Log in" go to sign-up and the app in your
SaaS app when NEXT_PUBLIC_SAAS_URL is set, and to the pricing section
otherwise; "Nimbus Care" opens the variant's own contact page, whose form
sends through the same handler as every other contact form, and hides while
the contact form is off. The footer has no email field: it links to the
journal (while the blog is on) and to sign-up instead (lib/links.ts).
Prices are plain demo data in data.ts, not wired to checkout. Colours are
the --nimbus-* tokens in app/globals.css, and the fonts (Noto Serif
Display, set narrow and light, for the display lines and Public Sans for
everything else) are set in fonts.ts.
The marketplace variant works the same way, under home.marketplace and
apps/marketing/modules/home/variants/marketplace/. Talentry, its
independents, studios, clients, reviews and every figure are made up: change
the name, people, work, stories, plans and figures in data.ts and the words
in the strings (swap in real people and reviews, with permission, before you
go live). People's, studios' and clients' names, the brand words drawn inside
the artwork and the trending hashtags stay in data.ts, so they read the same
in every language, and every amount, rate, date and count is formatted by the
code, in pounds and British style. The payment wording stays generic on
purpose: milestones are "funded and held" by a payments partner until the
client approves, with no legal escrow claims, and the fee comparison is
against "a typical marketplace" and "an agency", not named companies. There
are no photos to replace: the portfolio pieces are drawn in
components/Artwork.tsx (eleven kinds, from brand marks and websites to film
frames and 3D, in the fixed palettes in data.ts), the illustrated faces in
components/Avatar.tsx (each person's look is in PEOPLE), the app windows
in components/AppWindow.tsx and the product views in sections/. The
hero's switch changes its line, the typed examples and the chips; the
discovery switch and tabs swap the tiles and cards; the search chips filter
the results; the pricing switches work; the trending row scrolls with its
arrows; match rings draw in, budget and milestone bars grow, figures count up
and rows rise in as they scroll into view. All of it stands still for
visitors who prefer reduced motion. "Sign up", "Post a brief", "Let's go" and
"Log in" go to sign-up and the app in your SaaS app when
NEXT_PUBLIC_SAAS_URL is set, and to the pricing section otherwise; nothing a
visitor types is carried along. "Get help" opens the variant's own contact
page, whose form sends through the same handler as every other contact form,
and hides while the contact form is off (lib/links.ts). The plans are plain
demo data in data.ts, not wired to checkout. Colours are the --tal-*
tokens in app/globals.css, and the fonts (Wix Madefor Display for headings
and Wix Madefor Text for everything else) are set in fonts.ts.
The forms variant works the same way, under home.forms and
apps/marketing/modules/home/variants/forms/. Formlark, its studio, bakery,
customers, reviewers, team and every figure are made up (the footer says so):
change the name, people, responses, prices and figures in data.ts and the
words in the strings (swap in real customers and reviews, with permission,
before you go live). People's, company and file names, links and amounts stay
in data.ts, so they read the same in every language, and every amount, date,
time and file size is formatted by the code, in pounds and British order. There
are no photos or screenshots to replace: the doodles are our own SVG drawings
in components/Doodles.tsx (the lark, bubbles, a paper plane, one cluster per
section, the hills and the laptop), the people are line-drawn faces in
components/DoodleFace.tsx, the wordmarks and integration tiles are in
components/CompanyMark.tsx and components/AppMark.tsx (plain icons on
coloured tiles, never another company's logo), and the product mock-ups are in
sections/. Most of it works: the hero's editor types a form by itself while
it's on screen, the "Just type" line is a real combobox (type /, filter, pick
with the arrow keys and Enter), the AI card drafts any of its three prompts,
the respondent window steps through its questions (pick options, dates, stars
and scores, and draw a signature), the logic rule follows your score and can be
switched off, the bakery total and its Pay button add up as you change the
order, the hidden-field link switches person, the responses filter, the theme
switcher re-dresses the form, the popup opens, "Copy link" copies, the pricing
switch works, squiggles draw themselves under heading words, doodles wiggle on
hover and cards rise in as they scroll into view. All of it stands still for
visitors who prefer reduced motion. "Create a form" and "Log in" go to sign-up
and the app in your SaaS app when NEXT_PUBLIC_SAAS_URL is set, and to the
pricing section otherwise; "Contact us" opens the variant's own contact page (a
Formlark-style form whose message sends through the same handler as every
other contact form) and hides while the contact form is off (lib/links.ts).
The plans are plain demo data in data.ts, not wired to checkout. Colours are
the --lark-* tokens in app/globals.css, and the fonts (Reddit Sans for
everything, Caveat for the handwritten notes and Reddit Mono for links and
code) are set in fonts.ts.
The cloud variant works the same way, under home.cloud and
apps/marketing/modules/home/variants/cloud/. Rootbase, its customers, people,
posts, stories and every figure are made up (the footer says so): change the
name, figures, tables, stories, posts and plans in data.ts, the client-library
samples in sections/libraries/samples.ts, and the words in the strings (swap
in real customers and quotes, with permission, before you go live). Company,
people's and framework names, handles, code, table and column names stay in
the data, so they read the same in every language, and every price, size,
count and percentage is formatted by the code, in pounds and British style.
There are no screenshots or third-party logos to replace: the product tiles'
drawings are in sections/hero/, the dashboard windows in
sections/dashboard/, the branching diagram in sections/workflow/, the
made-up logos in components/CompanyMark.tsx, the framework marks in
components/QuickstartMark.tsx (generic shapes, never the frameworks' own
logos), the language tabs are plain monograms and the community posts are
generic cards with no social network's branding. The dashboard tabs swap their
windows, the language tabs swap the sample, the heading and the install line
(and "Copy" copies), the story strips widen on hover, focus or click (and open
in place on phones), the realtime cursors wander, the sign-ins drift, the
schema and branch lines flow, the SQL caret blinks, the dot-matrix display
lights up and cards rise in as they scroll into view. All of it stands still
for visitors who prefer reduced motion. "Start your project" and "Sign in" go
to sign-up and the app in your SaaS app when NEXT_PUBLIC_SAAS_URL is set,
and to the pricing section otherwise; "Book a demo" and "Talk to the team"
open the variant's own contact page, whose form sends through the same handler
as every other contact form, and hide while the contact form is off; "Docs"
and the guide links use NEXT_PUBLIC_DOCS_URL when it is set
(lib/links.ts). The footer has no email field. The plans are plain demo
data in data.ts, not wired to checkout. Colours are the --root-* tokens in
app/globals.css, and the fonts (DM Sans for everything and Source Code Pro
for code) are set in fonts.ts.
The events variant works the same way, under home.events and
apps/marketing/modules/home/variants/events/. Invitely, its hosts, guests,
events, venues, publications, reviews and every figure are made up (the footer
says so): change the name, people, invites, guest list, poll, tickets, reviews
and plans in data.ts and the words in the strings (swap in real reviews and
coverage, with permission, before you go live). People's, venues' and
publications' names stay in data.ts, so they read the same in every
language, and every price, fee, date, time and count is formatted by the code,
in pounds and British style. There are no photos to replace: the invite covers
are drawn in components/InviteArt.tsx (twelve themes built from gradients,
patterns and SVG doodles; a long word shrinks the title rather than breaking
it), the faces in components/Avatar.tsx (each person's look is in PEOPLE),
the party "photos" in components/PhotoArt.tsx, the phone in
components/PhoneFrame.tsx, the ticket's code in components/QrCode.tsx (it
looks the part but doesn't scan) and the app screens in sections/. The hero's
pile deals a new cover to the front every few seconds, the RSVP picker counts
you in and fires confetti for "Going", the theme studio restyles the invite
(and "Surprise me" rolls all three choices), the dark band's phone swaps
screens as each step passes (the blast types itself, the poll's bars grow and
the bell rings), the guest list tabs, pricing switch and review arrows work,
the occasions fan and the closing rings drift, and cards rise in as they scroll
into view. All of it stands still for visitors who prefer reduced motion.
"Start an invite" and "Log in" go to sign-up and the app in your SaaS app when
NEXT_PUBLIC_SAAS_URL is set, and to the pricing section otherwise; "Download
the app" scrolls to the store pills, which use your store links once they're
set in data.ts; "Say hello" and "For venues and clubs" open the variant's own
contact page, whose form sends through the same handler as every other contact
form, and hide or fall back to sign-up while the contact form is off
(lib/links.ts). The plans are plain demo data in data.ts, not wired to
checkout. Colours are the --invite-* tokens in app/globals.css, and the
fonts (Anybody, squeezed narrow for the poster headings, and Schibsted Grotesk
for everything else) are set in fonts.ts.
The desktop variant works the same way, under home.desktop and
apps/marketing/modules/home/variants/desktop/. Flint, its extensions,
authors, team, people, quotes and every figure are made up (the footer says
so): change the name, search results, clipboard entries, layouts, extensions,
people, themes and plans in data.ts and the words in the strings (swap in
real extensions and quotes, with permission, before you go live). Extension,
people's and company names, links, file names and code stay in data.ts, so
they read the same in every language, and every price, count, time,
percentage and unit is formatted by the code, in pounds and British style.
There are no screenshots or third-party logos to replace: the light bars are
CSS in components/Beams.tsx, the hero keycap is sections/hero/HeroKeycap.tsx,
the keyboards are components/Keyboard.tsx and the values grid, the icon tiles
are plain glyphs on gradients in components/AppTile.tsx (never another
company's logo), people are initials in components/Avatar.tsx, the
blueprint's drawings are sections/developers/IsoFigure.tsx, and the app
windows are in sections/. No Apple logo or trademark is used: the menu bar
carries Flint's own mark. Most of it works: the command bar types its demo
query once it's on screen, then filters as you type (lib/search.ts), moves
with the arrow keys, runs with return (a stage tool opens that tool) and opens
actions with ⌘K; the clipboard filters and previews entries; the calculator
types and answers its examples (the exchange rate is a demo rate); the window
layouts glide into place; the AI chat ticks its steps and streams the answer,
Quick AI types its prompts and AI Commands runs its steps; the store tabs, the
Huebox palette, the people row, the theme picker and the pricing switch work;
snippets expand, the quicklink fills its link, the hotkeys press and cards rise
in as they scroll into view. All of it stands still for visitors who prefer
reduced motion. "Download for Mac" uses DESKTOP_INFO.downloadUrl once you set
it, and sign-up in your SaaS app (or the pricing section) until then; "Get Pro"
and "Log in" go to sign-up and the app when NEXT_PUBLIC_SAAS_URL is set, and
to the pricing section otherwise; "Talk to us" opens the variant's own contact
page, whose form sends through the same handler as every other contact form,
and falls back to sign-up while the contact form is off; "Read the docs" shows
when NEXT_PUBLIC_DOCS_URL is set (lib/links.ts). The footer has no email
field. The plans are plain demo data in data.ts, not wired to checkout.
Colours are the --flint-* tokens in app/globals.css, and the fonts (Be
Vietnam Pro for everything and Azeret Mono for the small print, keys and
blueprint) are set in fonts.ts.
The institute works the same way, under home.institute and
apps/marketing/modules/home/variants/institute/. Its "Enrol" and "Start
learning" buttons go to sign-up in your SaaS app when NEXT_PUBLIC_SAAS_URL
is set, to the contact page otherwise, and to the pricing section if the
contact form is off too, so they never lead to a 404. Its "Become a teacher"
form sends through the same handler as the contact form, so applications
arrive at CONTACT_EMAIL with the applicant as reply-to.
Adding your own niche
- Create
apps/marketing/modules/home/variants/<name>/with a page, a header and a footer component. Optionally add aContactcomponent too: the/contactpage then shows it, in your variant's style, instead of the plain contact page. Put the sharedContactForminside it (itsfieldClassNameandsubmitClassNameprops restyle the fields and button), so messages still go through the one handler. The institute variant does this. - Register it in
apps/marketing/modules/home/variants/registry.ts. - Set
landingPage: "<name>"in the config.
The registry's keys are the config's type, so a misspelled variant name fails the build instead of rendering a blank page. Delete the folders for the niches you don't use.