Marketing pages

Config-driven landing pages, pricing, about, and per-persona pages.

Pages are data

Marketing pages render from typed configuration in src/config/marketing-pages.ts. Each page is a list of sections (hero, features, testimonials, pricing, FAQ, newsletter, contact, CTA, stats, mission) rendered by olwibaUI blocks.

Changing your pitch means editing config, not markup:

{
  type: 'hero',
  heading: 'Start from something solid',
  description: '...',
  primaryCta: { label: 'Explore the demo', href: '/sign-up' },
}

Section components, layout, responsiveness, and dark mode are handled by the block layer. Your job is the words.

Persona landing pages

src/config/personas.ts defines audience-specific landing pages served at /for/:slug. Each persona carries its own meta tags, hero copy, features, use cases, FAQs, and keywords, and getPersonaMarketingPage assembles a full page from them.

Add a persona to the array and it automatically gets a route, an entry on /for, a phone mockup preview built from its own copy, and a sitemap entry. This is the message-match tool: paid traffic for a specific audience lands on a page written for exactly that audience.

Pricing

Plans live in sharedPricingPlans and render on both the home page and /pricing. Monthly and annual price points, feature checklists, and the highlighted plan are all data.

SEO

Every page builds meta tags through buildSeoMeta: title, description, canonical path, and keywords flow into the document head. robots.txt, sitemap.xml, and the RSS feed are generated routes that pick up your pages automatically. Authenticated areas send noindex headers.

Feature-flagged pages

Public pages can be toggled per deployment with client env flags: VITE_ENABLE_BLOG_PAGE, VITE_ENABLE_PRICING_PAGE, and VITE_ENABLE_ABOUT_PAGE control whether those routes and their navigation entries appear.