# Config Reference (config.toml)

## Config Reference

**File:** `src/config/config.toml` · **Skill level:** Beginner

`config.toml` holds every site-wide setting. It is grouped into tables: a line in `[brackets]` starts a table, and every `key = value` line below it belongs to that table until the next one. The file has a comment beside most keys; this page explains them in one place.

<Aside type="note">
  Restart `npm run dev` after changing `baseUrl`, `trailingSlash`, the folder
  names, or anything in `[settings.multilingual]`. Other changes show up when
  you save.
</Aside>

### Site Identity
Table: `[site]`

| Key                       | What it does                                                                                 |
| ------------------------- | -------------------------------------------------------------------------------------------- |
| `title`                   | Site name, used in page titles, social previews, and structured data                         |
| `description`             | Default description for search results and social previews                                  |
| `tagline`                 | Added after page titles ("Pricing - your tagline"). Ships empty, which uses `common.tagline` from `src/i18n/<language>.json`, so each language has its own. A page turns it off with `disableTagline: true` |
| `taglineSeparator`        | Text between title and tagline. Empty uses `" - "`                                           |
| `baseUrl`                 | Your live address, for example `"https://www.example.com"`. Ships empty. Used for canonical links, the sitemap, `robots.txt`, RSS feeds, `llms.txt`, Open Graph URLs, and structured data. A `SITE_URL` environment variable on the build wins over it |
| `logo`                    | Main logo, for light backgrounds                                                             |
| `logoLight`               | Logo for dark footers                                                                        |
| `logoAlternate`           | Logo shown on transparent headers over images                                                |
| `logoText`                | Text next to the logo. Empty shows the image only                                            |
| `logoWidth`, `logoHeight` | Logo size, for example `"30px"`                                                              |
| `trailingSlash`           | `true` makes every URL end with `/` (`/pricing/`). Restart the dev server after changing it  |
| `[site.favicon] image`    | Source image for `npm run generate-favicons`. Leave `path` as it is                          |

Details: [Site Identity & Logo](/consultiz/customization/site-identity-logo/).

### Search Engines And AI Files
Tables: `[seo]`, `[seo.ai]`, `[seo.robotsTxt]`, `[seo.sitemap]`

| Key                        | What it does                                                                          |
| -------------------------- | ------------------------------------------------------------------------------------- |
| `author`                   | Default author meta tag, and the organization name in structured data                 |
| `keywords`                 | Default keywords for pages without their own `keywords`                               |
| `robots`                   | Default robots meta tag (`"index, follow"`)                                           |
| `[seo.ai] llmsTxt`         | Builds `/llms.txt` and `/llms-full.txt`, one per language                             |
| `[seo.ai] markdownPages`   | Builds a Markdown copy of posts, solutions, industries, projects, roles, profiles, the FAQ, and legal pages at `<page>.md` |
| `[seo.robotsTxt] enable`   | Builds `/robots.txt`                                                                  |
| `[seo.robotsTxt] disallow` | Paths crawlers must skip, for example `["/landing/"]`                                 |
| `[seo.sitemap] enable`     | Builds `/sitemap-index.xml` (only when `baseUrl` is set)                              |
| `[seo.sitemap] exclude`    | Folder names to leave out of the sitemap                                              |

Details: [SEO & AI Visibility](/consultiz/customization/seo-ai-visibility/).

### General Settings
Table: `[settings]`

| Key                   | What it does                                                                                 |
| --------------------- | -------------------------------------------------------------------------------------------- |
| `blogFolder`, `portfolioFolder`, `testimonialFolder`, `careersFolder` | Folder names of the collections, which are also their URLs. Keep them as they are: renaming one also means renaming the content and route folders and editing `src/content.config.ts` and the routes that read the collection |
| `pagination`          | Items per page on the blog category and tag pages (`/blog/category/<name>/page/2/`) and the portfolio lists; `/blog/` itself shows 10 per page |
| `stickyHeader`        | The main navigation bar sticks to the top while scrolling up and hides while scrolling down. Top bars always scroll away |
| `contactFormAction`   | Where the contact forms send messages. Ships empty, so no form sends anything until you set it |
| `contactFormProvider` | `"formsubmit.co"` (default), `"formspree"`, or `"netlify"`                                   |
| `footerDescription`   | Footer description. Empty uses `footer.description` from `src/i18n/<language>.json`          |
| `companyDesk`         | The file or page linked as **Company Desk** in the footer (`"/company-desk.pdf"`, a file in `public/`) |

Details: [Forms](/consultiz/customization/forms/).

### Motion
Tables: `[settings.headingAnimation]`, `[settings.animatedNumbers]`, `[settings.smoothScroll]`, `[settings.cursor]`

| Key                                | What it does                                                                   |
| ---------------------------------- | ------------------------------------------------------------------------------ |
| `[settings.headingAnimation] enable` | Reveals headings as they scroll into view                                    |
| `style`                            | `"chars"` (letters slide in), `"words"` (word by word), or `"fade"`            |
| `duration`, `stagger`              | Seconds per word or heading, and seconds between words (`"words"` only)        |
| `selector`, `exclude`              | Which headings animate, and which are skipped                                  |
| `[settings.animatedNumbers] enable`, `duration` | Count-up animation for statistics such as "98%" or "250+"         |
| `[settings.smoothScroll]`          | Smooth scrolling (Lenis): `enable`, `respectReducedMotion`, `duration`, `wheelMultiplier`, `keyboardShortcuts`, `keyboardDuration` |
| `[settings.cursor]`                | The circle that follows the mouse: `enable`, `size`, `hoverSize`, `opacity`, `borderWidth`, `followRatio` |

Details: [Animations](/consultiz/customization/animations/).

### Copyright
Table: `[settings.copyright]`

`enable` shows the copyright line in every footer. `text` overrides `footer.copyright` from the i18n files; leave it empty on a multilingual site.

### Footer Newsletter
Table: `[settings.subscription]`

| Key                 | What it does                                                                           |
| ------------------- | -------------------------------------------------------------------------------------- |
| `enable`            | Shows the newsletter form in the homepage and corporate footers. It stays disabled until `formAction` is set |
| `title`, `note`     | Override the form's title and note. Empty uses `footer-newsletter-grid.md` (homepage footer) or the i18n `subscription` text |
| `formAction`        | Your Mailchimp form URL                                                                |
| `mailchimpTagValue` | Optional numeric Mailchimp tag ID, sent as the hidden `tags` field                     |

The newsletter **section** used on inner pages has its own settings in `src/content/sections/english/newsletter.md`. See [Forms](/consultiz/customization/forms/).

### Cookie Banner
Table: `[settings.cookieConsent]`

| Key        | What it does                                                                  |
| ---------- | ----------------------------------------------------------------------------- |
| `enable`   | Shows the cookie banner and holds consent-gated scripts until visitors choose |
| `revision` | Raise it by 1 when your cookie use changes, to ask every visitor again        |

Details: [Cookies & Analytics](/consultiz/customization/cookies-analytics/).

### Languages
Table: `[settings.multilingual]`

| Key                    | What it does                                                         |
| ---------------------- | -------------------------------------------------------------------- |
| `enable`               | `false` builds only the default language                             |
| `defaultLanguage`      | Language served without a prefix (`"en"`)                            |
| `disableLanguages`     | Languages to skip, for example `["fr"]`                              |
| `showDefaultLangInUrl` | `true` adds the prefix to the default language too (`/en/pricing/`)  |

Details: [Internationalization](/consultiz/customization/internationalization/).

### Contact Details
Table: `[settings.contactInfo]`

`phone`, `email`, `address`, `hours`, and `mapLink`, used by the footers and the contact drawer. `phone` and `email` are Markdown links, so you can write `"[hello@example.com](mailto:hello@example.com)"`. `address` accepts `<br />` for a line break. The shipped values are demo data.

### Header
Tables: `[settings.headerOffcanvas]`, `[settings.headerTopBar]`, `[settings.officeDropdown]`, `[settings.headerActions]`, `[settings.navigationButton]`

| Setting                                  | What it does                                                                 |
| ---------------------------------------- | ---------------------------------------------------------------------------- |
| `[settings.headerOffcanvas]`             | The contact drawer opened from the header: `enable`, `logo`, `description`, and a `button` |
| `[settings.headerTopBar]`                | The strip above the menu: `enable`, `email`, `phone`, `address`, `hours`, the `show…` switches, a highlighted `link`, and the style per header (`layouts`) |
| `[settings.officeDropdown]`              | The **Our office** list in the top bar: `enable`, `label`, and `offices` (name, flag, url) |
| `[settings.headerActions] exploreUrl`    | The search button's destination. Empty hides search; `"/search/"` uses the included search page |
| `[settings.headerActions] exploreLabel`  | The search button text. Empty uses the translated label                     |
| `[settings.headerActions] enableOffcanvas` | Shows the drawer toggle. Both this and `[settings.headerOffcanvas] enable` must be `true` |
| `[settings.navigationButton]`            | The button at the right of the header: `enable`, `label`, `url`             |

Details: [Header](/consultiz/customization/header/).

### Table Of Contents
Table: `[settings.markup.tableOfContents]`

`enable`, `startLevel`, `endLevel`, `ordered`, and `expanded` for the table of contents built from Markdown headings.

### Social Previews
Table: `[opengraph]`

| Key                      | What it does                                                    |
| ------------------------ | --------------------------------------------------------------- |
| `image`                  | Shared preview image (`/images/og-image.jpg`, in `public/`), used when a page has no `image` |
| `ogLocale`, `ogType`     | Open Graph locale and type                                      |
| `twitter`, `twitterCard` | X (Twitter) handle and card type                                |

### Custom Head Scripts
Table: `[head]`

`content` is pasted into the `<head>` of every page. Use it for analytics, verification tags, or extra stylesheets. With the cookie banner on, mark tracking scripts so they wait for consent: see [Cookies & Analytics](/consultiz/customization/cookies-analytics/).