siteSettings document is a singleton — there is exactly one per site. It controls global branding (logo, site name), header navigation, footer content, social links, and contact information.
Singleton pattern
The singleton is enforced in two ways:- Document actions —
sanity.config.tsrestricts allowed actions topublish,discardChanges, andrestore. Editors cannot create or delete the document. - New document options —
siteSettingsis removed from the “New document” menu so a second instance cannot be created.
production dataset, the document ID is siteSettings. On the rwc dataset, each site has its own singleton: siteSettings-rwc-us and siteSettings-rwc-intl. getSiteSettingsId() in sanity.ts returns the correct ID for the current build.
Fields
Branding group
Full site name (e.g.
YWCC Industry Capstone). Used in the <title> tag fallback and footer.Multi-site discriminator. Hidden on the
production dataset.Default meta description for pages that do not have their own SEO description set.
Primary site logo. Used in the header. Supports hotspot. Must include
alt text.Light-on-dark variant of the logo. Used in the footer. Must include
alt text.Navigation group
Primary call-to-action button shown in the header. Inline object with
text and url from the shared buttonFields definition.Ordered list of header navigation links. Each item uses
linkFields (label, href) and supports a children array for dropdown sub-items.Sub-items (
children) are stored in the schema but are not yet rendered in the header. Rendering dropdown navigation is planned for a future story.Footer group
Footer body content with two sub-fields:
text(text) — body copy shown in the footercopyrightText(string) — copyright line in the footer bottom bar
Links shown in the footer bottom bar (e.g. Privacy Policy, Terms of Use). Each item uses
linkFields.Links shown in the footer Resources column. Each item uses
linkFields.Links shown in the footer Programs column. Each item uses
linkFields.Social & Contact group
Social media links. Each item has:
platform(string, required) — one ofgithub,linkedin,twitter,instagram,youtubeurl(url, required) — full URL to the profile
Contact information displayed in the footer. Sub-fields:
address(string)email(string, validated as email with a warning)phone(string)
Current academic semester label (e.g.
Fall 2026). Displayed in various blocks and used as a default semester filter. Format: Season YYYY.Fetching site settings
getSiteSettings() in sanity.ts fetches the singleton and caches the result for the entire build:
Layout.astro, Header.astro, and Footer.astro. Because of the module-level cache, only one API call is made per build regardless of how many pages include those components.