B2BEA.org Rebuild sanity-schema-spec
internal prototype · canonical JSON + Dreamborn Forge HTML
internal generated
sanity-schema-spec · supabase_json

B2BEA.org Rebuild sanity-schema-spec

sanity-schema-spec artifact · for B2BEA.org Rebuild · status draft

Planning Surface

Use this to decide what happens next.

Status

draft

Agent Handoff
Start Here

sanity-schema-spec artifact · for B2BEA.org Rebuild · status draft

Completion Evidence

No explicit evidence field yet. Require tests, screenshots, linked PRs, or reviewed outputs before marking complete.

Artifact Shape
  • source: atlas-codex
  • status: draft
  • project: B2BEA.org Rebuild
  • version: 1
  • filename: docs/specs/2026-05-08-b2bea-org-sanity-schema-spec.md
  • project id: a820dd0c-6cef-4133-bfbd-d802fd806e44
  • generated at: 2026-05-08
  • artifact type: sanity-schema-spec
Source Body

Full legacy body rendered for humans

B2BEA.org V1 Sanity Schema Spec

Source of record: RedKey local project artifact draft.

  • Project: B2BEA.org Rebuild
  • Project ID: a820dd0c-6cef-4133-bfbd-d802fd806e44
  • Artifact: sanity-schema-spec
  • Version: 1
  • Status: draft
  • Generated: 2026-05-08

Purpose

Define the editorial/public content schemas Sanity must own in V1. Supabase remains source of truth for operational/application data; HubSpot remains CRM source of truth.

Sanity Owns

  • Standard public pages
  • Articles/blog posts
  • Podcast episode content
  • Guides/reports/resource landing content
  • Topic/concept editorial content
  • Event public explanatory content when event operations are not the source
  • Custom HTML import registry metadata if implementation chooses Sanity for import records
  • Shared SEO/GEO/social metadata fields for publishable content

Sanity Does Not Own

  • Member accounts and profiles
  • Vendor operational records and submitted review changes
  • Practitioner company workspace data
  • Entitlements, payments, course enrollment, lesson progress
  • Survey responses and exports
  • HubSpot leads, deals, renewals, and sales activity

Core Document Types

| type | purpose | route_family |

| --- | --- | --- |

| standardPage | Structured public pages using reusable templates. | standard_marketing_page, audience_landing_page |

| article | Blog/editorial detail pages. | editorial_detail |

| podcastEpisode | Podcast detail pages and podcast listing source. | editorial_detail |

| resource | Guides, reports, case studies, downloadable resources. | resource_detail_or_download |

| topic | Topic hubs and topical landing content. | topic_or_concept_detail |

| concept | Glossary/concept detail pages. | topic_or_concept_detail |

| eventContent | Public event page content where operational event record is separate. | event_detail |

| customHtmlImport | Registry for approved custom imports if stored in Sanity. | custom_html_import |

| redirect | Editorial/public redirect definitions for slug changes and removed pages. | system_generated |

Shared Fields

Every publishable document must include:

type PublishableFields = {
  title: string;
  slug: { current: string };
  status: 'draft' | 'preview' | 'scheduled' | 'published' | 'archived';
  owner: string;
  excerpt?: string;
  canonicalUrl?: string;
  seo: SeoFields;
  geo: GeoFields;
  social: SocialFields;
  publishedAt?: string;
  scheduledFor?: string;
  updatedAt: string;
  noindex: boolean;
};

Metadata Fields

type SeoFields = {
  metaTitle: string;
  metaDescription: string;
  canonicalPath: string;
  schemaType: 'WebPage' | 'Article' | 'PodcastEpisode' | 'Event' | 'Course' | 'ProfilePage' | 'CollectionPage';
};

type GeoFields = {
  aiSummary: string;
  primaryAudience: string[];
  primaryEntities: string[];
  topicTags: string[];
  answerableQuestions: string[];
};

type SocialFields = {
  ogTitle: string;
  ogDescription: string;
  ogImage: string;
  twitterCard: 'summary' | 'summary_large_image';
};

Publishing Rules

  • published requires valid slug, canonical path, SEO fields, GEO fields, and social fields.
  • draft, preview, and scheduled content must be excluded from public nav, sitemap, and search index.
  • Slug changes after publish require redirect handling before publish.
  • Archived content must not appear in public discovery by default.

Open Decisions

| id | question | required_before |

| --- | --- | --- |

| SANITY-OQ-001 | Should customHtmlImport records live in Sanity, Supabase, or both? | Slice 2 |

| SANITY-OQ-002 | Which current resource pages become resource documents versus custom imports? | Slice 1 |

| SANITY-OQ-003 | Should event operational registration data stay fully Supabase while Sanity owns only content copy? | Slice 1 event implementation |

Acceptance Criteria

  • Every public editorial/page route family has an owning schema.
  • Shared metadata fields are required before publish.
  • Operational records are not duplicated into Sanity as source of truth.
  • Implementation can generate TypeScript schema/types and validation from this spec.
Structured Payload

Machine-readable source fields

source

atlas-codex

status

draft

project

B2BEA.org Rebuild

version

1

filename

docs/specs/2026-05-08-b2bea-org-sanity-schema-spec.md

project id

a820dd0c-6cef-4133-bfbd-d802fd806e44

generated at

2026-05-08

artifact type

sanity-schema-spec