Configuration

All the configuration files in a Foundry project — site config, navigation, app config, and environment variables.

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.

content/config/site.yml
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
FieldRequiredDescription
business.nameYesDisplay name used in footer copyright and metadata
business.legalNameYesLegal entity name for copyright
business.foundingYearYesYear shown in copyright line
business.logoYesPath to logo image (from public/)
business.missionYesMission statement, used in meta descriptions
socialsNoKey-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}.

File: content/config/navigation.yml

Controls the header, footer, and optional site banner. A minimal example:

content/config/navigation.yml
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:

app/app.config.ts
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:

.env
# 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:

  1. Your nuxt.config.ts — highest priority
  2. Layer nuxt.config.ts — defaults for everything
  3. 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.