Skip to content

Basics / 04

Configuration

Where every setting lives. Five small files in src/config/ control the copy, navigation, SEO, and forms.

Browse the docs

Settings are split into small files by job. They’re merged into one siteConfig object in src/config/site.ts, which is what pages and blocks import.

File What’s in it
identity.ts Site name, URL, author, navigation, footer, fonts
pages.ts Copy for the home, about, contact, and blog pages, plus the CTA band
blocks.ts Default copy for each section the theme uses, one key per block
banner.ts Announcement bars, if the theme has one
integrations.ts SEO, answer-engine data, contact form, analytics

Identity

// src/config/identity.ts
export const identity = {
  name: "Northwind Studio",
  url: "https://northwind.studio",
  author: { name: "Ada Park", email: "[email protected]" },
  navigation: {
    links: [
      { label: "Services", href: "/#services" },
      { label: "Blog", href: "/blog/" },
      {
        label: "Company",
        children: [
          { label: "About", href: "/about/" },
          { label: "Contact", href: "/contact/" },
        ],
      },
    ],
    cta: { label: "Start a project", href: "/contact/", size: "md" },
  },
  // footer, fonts ...
};

Add children to a link to turn it into a dropdown. Give the parent an href too and the label links while the arrow opens the menu.

Page copy

pages.ts holds the words on the built-in pages: headings, intros, button labels, and the title and description each page uses for search results. Edit the copy here instead of in the page files.

Section copy

blocks.ts has one key per section, named after the block (hero, services, faq). The keys match what the blocks read, so rename them only together with the block.

Integrations

Key Controls
seo Default title, description, social image, Twitter handle, sameAs profiles
aeo Summary, topics, and FAQ used by llms.txt and FAQ structured data
contactForm Form provider, field labels, redirect. See Forms
analytics provider ("google", "plausible", or null) plus googleId or plausibleDomain

Environment variables

Copy .env.example to .env for anything secret, such as a Formspree ID or analytics key. Never commit .env.

Overriding config with props

Config sets the default; a prop wins for that one usage. See Theme structure.