TrademarkTrademark
Ctrl k
Search docs...
Guides
Surfaces

Landing

The marketing site: a landing page, about, contact, pricing, brand, an MDX blog 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.
  • / — hero, features, elements, customization, latest posts, testimonials, FAQ.
  • /about — the story, benefits and team.
  • /contact — contact cards.
  • /pricing — plans, testimonials and the FAQ.
  • /brand — brand assets and guidelines.
  • /blog, /blog/[slug] — the MDX blog.
  • /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.
  • src/content/blog/*.mdx — the blog; the file name is the slug.
  • 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.
A blog post is an MDX file with frontmatter: The newest post leads the blog as a wide card and the rest sit in a grid of 16:9 covers, so give every post an image. The blog's newsletter form posts to an Aveiro embed form, through the same src/lib/newsletter.ts hook as the spotlight surface. Set NEXT_PUBLIC_AVEIRO_SITE_ID to your site's ID from Audience → Embed in Aveiro. The ID is public and needs no secret. Without it, submitting shows "The newsletter is not configured yet." and nothing is sent. The legal pages are disclaimers as shipped. Replace them with your own before publishing.
  • The page itself. src/app/(landing)/page.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.
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 October 18, 2026
Edit this page on GitHub