SiteDocument

SiteDocument

Documentation

The persisted root configuration for a Quail Pages site. This document is saved as site.config.json at the root of a complete Quail Pages site source. A complete site source is organized around site.config.json with supporting authored content in sibling directories: - pages/ contains authored PageDocument JSON files. - components/ contains reusable Component JSON files. - assets/ contains static files copied into the generated site's public root. - plugins/ contains site plugin resources and configuration owned by plugins. Source directory names are not necessarily part of their public paths. For example, assets/favicon.svg is published as /favicon.svg. Every page manifest source is relative to pages/; its independent path explicitly maps that PageDocument to a public URL.

Kind

Site

Required fields

pages, theme, title, url

Authoring guidance

Use when

Authoring site.config.json or packaging a complete Quail Pages site source.

Avoid when

Authoring an individual page or reusable component; use a PageDocument or Component instead.

Properties

authors

Author profiles keyed by the page-authored display name.

branding

Browser, installed-app, and publisher-logo presentation.

description

string

Summary used by content or metadata.

footer

Site footer content.

generatedPages

Machine-generated page sources beneath pages/ and their independent public paths. Uses the same manifest contract as pages; the distinction is ownership, not routing or rendering behavior. Generators may replace this collection. Sources remain relative to the site's pages/ directory.

Use when: A generator owns reusable or reference pages that coexist with authored pages.

header

Site header content.

identity

Structured organization and brand identity used by discovery metadata.

imageBaseUrl

string

Optional image-service base URL used to expand site-relative images.

imageDefaults

Site-wide defaults for authored images.

*

pages

Page sources beneath pages/ and their independent public paths.

plugins

Site-wide plugin configuration keyed by registered plugin ID.

socials

References site social definitions.

*

theme

string

Registered theme identifier.

*

title

string

Visible heading or display name.

*

url

string

Canonical public base URL.

variables

Values available to inline interpolation.

Example

Required

{ "pages": [], "theme": "example", "title": "Example", "url": "https://example.com" }

Full

{ "authors": { "Jane Smith": { "profileUrl": "/authors/jane-smith/" }, "John Doe": { "profileUrl": "/authors/john-doe/" } }, "branding": { "appleTouchIcon": "example", "appTitle": "example", "faviconIco": "example", "faviconSvg": "example", "manifest": "/site.webmanifest", "publisherLogo": "example", "themeColor": "#0f172a" }, "description": "A representative Quail Pages example used to demonstrate this authored JSON contract in generated documentation.", "footer": { "sections": [ { "id": "footer-navigation", "title": "Footer navigation", "elements": [ { "type": "menu", "class": "qp-menu--footer", "navId": "qp-footer-menu", "ariaLabel": "Footer navigation", "items": [ { "label": "About", "link": { "href": "/about/" } }, { "label": "Privacy", "link": { "href": "/privacy/" } } ] } ] } ] }, "generatedPages": [ { "path": "/", "source": "root/index.json" } ], "header": { "sections": [ { "id": "site-header", "title": "Site header", "titleSrOnly": true, "elements": [ { "type": "image", "src": "/branding/logo.svg", "alt": "Acme Home", "loading": "eager", "fetchPriority": "high", "link": { "href": "/" }, "class": "site-logo" }, { "type": "menu", "navId": "qp-primary-nav", "mobileCollapse": true, "ariaLabel": "Primary navigation", "items": [ { "label": "Home", "link": { "href": "/" } }, { "label": "Pricing", "link": { "href": "/pricing/" } } ] } ] } ] }, "identity": { "brand": { "id": "example", "identifiers": [ { "propertyID": "example", "value": "example" } ], "name": "example" }, "legalName": "example", "name": "example", "organizationId": "example" }, "imageBaseUrl": "https://example.com", "imageDefaults": { "lightbox": true }, "pages": [ { "path": "/", "source": "root/index.json" } ], "plugins": { "events": {}, "featherquest/newsletter": {}, "google-analytics": {} }, "socials": {}, "theme": "example", "title": "Example", "url": "https://example.com", "variables": { "annualPrice": "$290", "contactEmail": "[email protected]", "monthlyPrice": "$29" } }

examples are generated from the schema.