B2BEA.org Rebuild sanity-schema-spec
sanity-schema-spec artifact · for B2BEA.org Rebuild · status draft
sanity-schema-spec artifact · for B2BEA.org Rebuild · status draft
No explicit evidence field yet. Require tests, screenshots, linked PRs, or reviewed outputs before marking complete.
- 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
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
publishedrequires valid slug, canonical path, SEO fields, GEO fields, and social fields.draft,preview, andscheduledcontent 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.
Machine-readable source fields
atlas-codex
draft
B2BEA.org Rebuild
1
docs/specs/2026-05-08-b2bea-org-sanity-schema-spec.md
a820dd0c-6cef-4133-bfbd-d802fd806e44
2026-05-08
sanity-schema-spec