---
title: "Schema Reference"
description: "A reference for every Sanity schema type in SanityPress: global settings, documents, references, modules, fields, and fragments."
---

# Schema Reference

SanityPress's Studio schema lives in `src/sanity/schemaTypes/`, organized into 6 categories: global singletons, primary documents, referenceable documents, page-building modules, reusable fields, and shared fragments. Each entry below is named after its Sanity `_type` (or export, for fragments).

## Global

Singleton and cross-page schema, configured once and applied everywhere.

### `site`

Singleton site settings: branding (title, logo, OG image) plus header, footer, and social navigation references, and footer copyright.

### `global-module`

Injects modules before/after a page's own modules, targeted by a path glob (`*`, `blog/`) with optional exclusions.

### `skill`

Claude Agent Skill document: slugged name, title, description, and Markdown content, authored for AI tooling rather than the frontend.

## Documents

Primary content types created and edited directly in the Studio.

### `page`

The core page document: a reorderable modules array, optional markdown route, and SEO metadata.

### `blog.post`

Blog post document: Portable Text content (blocks, images, code blocks, custom HTML), publish date, categories, author reference, optional markdown, metadata.

### `announcement`

A hot-line banner positioned at the very top, above the site header, and displayed globally across all pages. Useful for promotional content.

### `redirect`

A regex-validated source path mapped to a link destination.

### `form`

A form identifier and submission endpoint, referenced by the form-module.

## References

Standalone documents that other documents and modules point to by reference.

### `blog.category`

Title and slug taxonomy for tagging blog posts.

### `logo`

Default, light, and dark image variants, referenced from `site.logo`.

### `navigation`

A named collection of link, link.list, and megamenu items, referenced by `site.header`, `site.footer`, and `site.social`.

### `person`

Name, title, and photo, referenced from blog posts and the person-list module.

### `quote`

A standalone testimonial referenced from the quote-list module.

## Modules

Page-building blocks. Every module is a reorderable array member wrapped by the `defineModule` fragment, so each one also inherits module-attributes (unique id, hidden toggle, scoped CSS) automatically. They're grouped below the way the Studio's insert menu groups them: Content, Utility, and Blog. Each also links out to its live demo on the modules directory (a few point to /search or /blog instead, where that's the actual demo).

Browse them all on the [Modules Directory](/modules) page.

### Content modules

#### `accordion-list`

Expandable FAQ-style items, with an "exclusive" toggle to allow only one open at a time. [View demo](/modules/accordion-list)

#### `callout`

Simple intro/heading block, almost always a page's opening h1. [View demo](/modules/callout)

#### `card-list`

Grid of cards (image or icon, eyebrow, content, CTAs). [View demo](/modules/card-list)

#### `form-module`

Renders a referenced form document with intro copy. [View demo](/contact)

#### `hero.cover`

Full-bleed background-image hero with alignment options. [View demo](/modules/hero-cover)

#### `hero.split`

Two-column hero, image left or right via an `onRight` toggle. [View demo](/modules/hero-split)

#### `logo-list`

Logo marquee or grid, with optional auto-scroll. [View demo](/modules/logo-list)

#### `person-list`

Grid of person cards in configurable columns. [View demo](/modules/person-list)

#### `prose`

Rich text / Portable Text module: headings, lists, tables (via custom HTML), code blocks, images, and an optional sidebar. This page is built with it. [View demo](/modules/prose)

#### `quote-list`

Testimonial grid or carousel, with configurable layout and columns. [View demo](/modules/quote-list)

#### `stat-list`

A row of value + suffix + caption stats. [View demo](/modules/stat-list)

#### `step-list`

Numbered steps, each with content and optional CTAs. [View demo](/modules/step-list)

#### `tabbed-content`

Tabbed panels, each with a label, icon, and content. [View demo](/modules/tabbed-content)

### Utility modules

#### `breadcrumbs`

Auto-generated or structured-data-only breadcrumb trail. [View demo](/modules/breadcrumbs)

#### `custom-html`

Raw HTML/CSS/JS escape hatch with an optional class name. [View demo](/modules/custom-html)

#### `search-module`

Scoped or site-wide search. [View demo](/search)

### Blog modules

#### `blog-index`

Filterable, paginated blog post index. [View demo](/blog)

#### `blog-post-content`

Sidebar-only wrapper injected on blog post pages via a global-module. [View demo](/blog/introducing-sanitypress-with-typegen)

#### `blog-post-list`

A curated, limited list of blog posts with intro copy and CTAs. [View demo](/modules/blog-post-list)

## Fields

Reusable field groups shared across documents and modules, not selectable as standalone modules.

### `cta`

A link plus a visual theme (action, action-outline, ghost, link).

### `link`

Internal (reference to a page) or external (URL) link, with an optional label and URL params/hash.

### `link.list`

A link plus a nested array of sub-links; used in navigation and megamenus.

### `megamenu`

Expanded nav dropdown: a link plus items of `link.list`, `link.card`, or `link`.

### `metadata`

Shared SEO fields: title, description, slug, OG image, no-indexing; attached to every page and post.

### `module-attributes`

Injected into every module: unique identifier for deep links, a hidden toggle, and a scoped CSS override.

### `sidebar`

Optional rail on some modules (e.g. prose): position (left/right) and its own modules (callout, custom-html, tableOfContents).

## Fragments

Schema-authoring helpers in `src/sanity/schemaTypes/fragments/`, not document or field types themselves, but the functions that build them.

### `defineModule()`

Wraps a raw object schema into a module: injects the module-attributes field/group, wires up the shared Studio preview component, and surfaces hidden/uid in the preview.

### `modules()`

Field factory for the reorderable modules array (used on page, global-module's before/after, sidebar, etc.); lists every valid module type and configures the Studio insert menu.

Every module pairs a schema here with a matching React component in `src/ui/modules/` and an entry in the `MODULES_MAP` resolver at `src/ui/modules/index.tsx`.
