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.