CoreMVP

Landing Page

Change the landing page sections, calls to action, and pricing presentation.

Edit src/routes/_marketing/index.tsx to add, remove, or reorder the home page's sections. The page composes the existing components in src/components/landing/; it does not own authentication or billing rules.

Choose an edit point

ChangeFile
Headline, product badge, dashboard preview, and first linkssrc/components/landing/hero-section.tsx
Product preview sectionssrc/components/landing/product-showcases.tsx
Feature descriptionssrc/components/landing/features-section.tsx
Frequently asked questionssrc/components/landing/faq-section.tsx
Final call to actionsrc/components/landing/final-cta.tsx
Shared section framingsrc/components/landing/technical-grid.tsx
Site name, description, and default social imagesrc/config/site.config.ts

The shipped page also includes LogoCloud, LatestBlogPosts, and LatestChanges. Its native loader reads public summaries through src/lib/landing.server.ts; keep that server-only source out of client components when changing those sections.

Change a call to action

Use TanStack Router's Link for application navigation. For example, you can replace a hero link with a signup action:

import { Link } from '@tanstack/react-router';
import { Button } from '@/components/ui/button';

<Button asChild>
  <Link to="/signup">Create an account</Link>
</Button>

For a Docs link, pass the slug to its native catch-all route:

<Link to="/docs/$" params={{ _splat: 'getting-started' }}>
  Read the setup guide
</Link>

These links change navigation only. Keep checkout creation and access checks in the existing billing API and server readers.

Change pricing presentation

The home page links to /pricing; it does not include a pricing section by default. The pricing route uses the shared pricing components and src/config/pricing.config.ts for plan names, descriptions, features, and displayed prices. Public environment settings select the approved Stripe Product and Price IDs.

Change presentation in that configuration and the components under src/components/pricing/. Keep the displayed amount aligned with its actual Stripe Price. The browser starts checkout through the same-origin Hono API; it never lists products with a Stripe secret key. Follow Payments to configure and verify the catalog.

Check your changes

Run bun run dev and inspect / and /pricing. Follow each changed link, check the page on a narrow screen, and confirm that removing a marketing section leaves the corresponding application and billing behavior working.

What's next

Was this page helpful?

On this page