Overview

Pages are MDX entries under content/pages. Each page includes SEO, a title, optional subtitle, and a sections list (Header, Text, Image). These pages render at the site root via the dynamic [slug] route.

Location and slug

  • Collection: page
  • Path: content/pages
  • Filename: editable; generated from title by slugify (lowercase, trimmed).

Use unique slugs. Avoid reserved paths used by other routes (e.g. blog, docs, roadmap, changelog, dashboard, auth).

Fields

  • seo — shared SEO object (title, description ≤ 160 chars, Open Graph, article meta).
  • title — required.
  • subtitle — optional.
  • sections — list of content blocks (Header, Text, Image).

Sections and templates

Available templates for pages:

  • Headervariant (Primary/Secondary) and text.
  • Text — rich text content.
  • Image — image fields plus optional source { title, url }.

The editor shows friendly labels via getSectionLabel to make blocks easy to identify.

Single page route

  • generateStaticParams() lists page slugs from the Tina connection for SSG.
  • generateMetadata() maps page.seo with generateSeoMetadata() and pathname: <slug>.
  • The page component renders:
    • PageHeader (title, subtitle)
    • PageSections (maps section types to UI templates)

PageSections mapping

The renderer maps Tina section types to UI components:

  • PageSectionsHeaderHeaderTemplate
  • PageSectionsTextTextTemplate
  • PageSectionsImageImageTemplate

Unknown templates are ignored gracefully.

SEO and sitemap

  • Page-level SEO comes from the page’s seo object.
  • The sitemap service reads pages from the Tina connection and uses seo.openGraph.updatedTime for lastModified when available.
  • home or index is emitted as / in the sitemap.

Guidelines

  • Keep titles short; slugs are generated from the title.
  • Use Primary header for main sections and Secondary for subheads.
  • Add image source info when relevant.
  • Update seo.openGraph.updatedTime when you make edits.