TrademarkTrademark
Guides
Surfaces

Landing

The marketing site: a landing page, about, contact, pricing, brand and the legal pages.
The landing surface is the marketing site. It is the surface that owns /, and it requires no slices: every page is rendered from content files in the repository, so it runs with no environment at all. It is usually the first surface named, next to whatever the site markets: --surfaces landing,dashboard, say. Without it, another surface's rootRedirect decides where / lands.

Routes

  • / — hero, features, elements, customization, testimonials, FAQ.
  • /about — the story, benefits and team.
  • /contact — contact cards.
  • /pricing — plans, testimonials and the FAQ.
  • /brand — brand assets and guidelines.
  • /terms-of-use, /privacy-policy — the legal pages.
  • /products/landing, /products/dashboard — product pages for the template itself.
Every page shares the layout in src/app/(landing)/layout.tsx: the banner, the header and the footer. Titles, descriptions and canonical URLs for each route are the landing object in src/resources/seo.js. The blog is a surface of its own, Blog. When both are scaffolded it wears this surface's banner, header and footer.

Where the content lives

  • src/content/legal/*.mdx — the terms and the privacy policy.
  • src/content/about/about.js — /about.
  • src/content/pricing/pricing.js — the plans on /pricing.
  • src/content/brand/brand.js — /brand.
  • src/content/misc/faq.js — the FAQ on / and /pricing.
  • src/content/misc/testimonials.js — testimonials on / and /pricing.
  • src/content/misc/navigation.tsx — the header's mega menu, mobile menu and promo card.
The legal pages are disclaimers as shipped. Replace them with your own before publishing.

The home page and /

The landing page is /, and that is the URL search engines index. With the dashboard surface, / also knows who uses the app:
  • Signed in (in demo mode, a browser that has opened the dashboard before): a logo splash, then the dashboard. The landing page stays open to them at /home, which canonicalizes back to /.
  • Everyone else, search engines included: the landing page at /. On /home they get a permanent redirect to /, so the content has exactly one indexable URL. Both routes read the session, so they render per request and are never cached.
/sitemap.xml lists / with the marketing and legal pages, and /robots.txt points crawlers at the sitemaps and keeps them out of /app and the API. Without the dashboard surface, / is a static landing page and /home always redirects to it.

The seams

  • The page itself. src/app/(landing)/home-content.tsx is a list of sections from src/app/(landing)/components. Reorder, remove or add sections there.
  • Pricing. The plans on /pricing are static content in pricing.js, and their buttons link to /auth?state=signup. They are not read from src/resources/plans.json, so with the billing slice keep the two in step by hand.
  • The banner and footer. Banner.tsx and Footer.tsx hold their text and links directly; some footer links are # placeholders.

When it is absent

The surface owns the marketing navigation, so a project without it has none. Its absent transforms remove the content exports from src/content/index.ts, set HAS_LANDING = false in src/resources/docs.js so the docs header and footer drop their links outward, and strip the links to /about and the legal pages from the store's nav and footer and from the sign-in form. See Scaffolding for how transforms run.
Last updated November 1, 2026
Edit this page on GitHub