Configuration
Foundry configuration lives in four places, each with a distinct purpose.
Site Config
File: content/config/site.yml
Business identity and social links. Referenced by the footer, social components, and RSS feeds.
business:
name: "My Startup"
legalName: "My Startup LLC"
foundingYear: 2026
logo: "/favicon-96x96.png"
mission: "Helping founders validate faster."
socials:
x: https://x.com/yourhandle
github: https://github.com/yourrepo
linkedin: https://linkedin.com/in/yourprofile
| Field | Required | Description |
|---|---|---|
business.name | Yes | Display name used in footer copyright and metadata |
business.legalName | Yes | Legal entity name for copyright |
business.foundingYear | Yes | Year shown in copyright line |
business.logo | Yes | Path to logo image (from public/) |
business.mission | Yes | Mission statement, used in meta descriptions |
socials | No | Key-value pairs of platform name to profile URL |
Social keys are matched to icons automatically — x gets the X/Twitter icon, github gets the GitHub icon, and so on. Any key maps to i-simple-icons-{key}.
Navigation Config
File: content/config/navigation.yml
Controls the header, footer, and optional site banner. A minimal example:
header:
title: My Startup
navigation:
- label: About
icon: i-lucide-info
to: /about
footer:
columns:
- label: Product
children:
- label: Features
to: /features
See the full navigation configuration for all available fields.
App Config
File: app/app.config.ts
Runtime configuration that controls how the Foundry layer behaves. The essentials:
export default defineAppConfig({
title: 'My Startup',
description: 'Validating our next big thing',
logo: {
light: '/logo-light.svg',
dark: '/logo-dark.svg',
alt: 'My Startup Logo',
},
content: {
collections: {
pages: { name: 'pages', type: 'page', prefix: '/' },
faq: { name: 'faq', type: 'data' },
config: { name: 'config', type: 'data' },
navigation: { name: 'navigation', type: 'data' },
searchable: ['pages'],
},
routing: {
offers: '/offers',
success: '/success',
},
},
})
Unspecified fields keep their layer defaults via defu deep merge.
See the full app config shape and override examples for details.
Environment Variables
Create a .env file from .env.example. The minimum viable setup needs NUXT_PUBLIC_SITE_URL and NUXT_WEBHOOK_URL:
# Required
NUXT_PUBLIC_SITE_URL=https://mysite.com
# Signal capture (webhook delivery)
NUXT_WEBHOOK_URL=https://discord.com/api/webhooks/...
# Analytics (optional)
NUXT_PUBLIC_SCRIPTS_UMAMI_ANALYTICS_WEBSITE_ID=abc123
See the full environment variables reference for all available variables.
Config Resolution Order
Configuration is deep-merged with your values taking highest priority:
- Your
nuxt.config.ts— highest priority - Layer
nuxt.config.ts— defaults for everything - Config module — auto-detects site URL, name from
package.json, foundry version
This means you only need to set what you want to change. Everything else falls back to sensible defaults.
Learn more about defu deep merging.
Next Steps
Now that your project is configured, learn how to create and manage Content.