Sanity
Overview
Sanity is a structured content platform with real-time collaboration, GROQ querying, and a customizable React-based Studio. Content is stored in the Content Lake with CDN delivery, Portable Text for structured rich content, and visual editing capabilities for live frontend previews.
Instructions
- When defining schemas, use
defineType() and defineField() with validation rules, model content for reuse by separating pages from content blocks, and use references over inline objects for shared content.
- When querying data, write GROQ queries with projections to fetch only needed fields, use the
-> dereference operator for joined data, and set useCdn: true for production reads.
- When customizing Sanity Studio, configure desk structure for sidebar navigation, add custom input components for specialized editing, and create custom publish workflows with actions.
- When building rich content, use Portable Text which is structured data (not HTML) that renders on any platform, with customizable toolbar, custom blocks, and inline objects.
- When integrating with Next.js, use
next-sanity with ISR, preview mode, and visual editing, and @sanity/visual-editing for click-to-edit overlays in the frontend.
- When managing environments, use datasets (production, staging, development) for content isolation, GROQ-powered webhooks for filtered build triggers, and set
apiVersion to a specific date to avoid breaking changes.
- When handling images, use Sanity's image with hotspot for focal point selection and
sanity-image-url for generating responsive image URLs with transforms.
Examples
Example 1: Build a content-driven marketing site
User request: "Set up Sanity with Next.js for a marketing site with modular page builder"
Actions:
- Define page, hero, feature, CTA, and testimonial schemas as reusable block types
- Configure Sanity Studio with desk structure and live preview
- Set up
next-sanity with ISR and GROQ queries for each page type
- Enable visual editing with
@sanity/visual-editing for click-to-edit overlays
Output: A modular marketing site where editors build pages from reusable content blocks with live preview.
Example 2: Implement real-time content preview
User request: "Add live preview to our Sanity + Next.js site so editors see changes as they type"
Actions:
- Configure Sanity Studio's Presentation tool for side-by-side editing
- Set up
@sanity/visual-editing in the Next.js frontend for click-to-edit overlays
- Use
client.listen() for real-time content updates in preview mode
- Configure draft content display with
!(_id in path("drafts.**")) filtering
Output: A live editing experience where content changes appear in the frontend as editors type.
Guidelines
- Use
defineType() and defineField() for schema definitions; they provide TypeScript types for the Studio.
- Model content for reuse: separate pages from content blocks so blocks can appear on any page.
- Use references over inline objects for content that appears in multiple places.
- Query with GROQ projections to fetch only needed fields, not entire documents.
- Use the CDN API (
useCdn: true) for production reads; it is free and fast.
- Set
apiVersion to a specific date to avoid breaking changes.
- Use Portable Text for rich content; it is structured data that renders on any platform.
1---2name: sanity3description: Sanity4---5# Sanity67## Overview89Sanity is a structured content platform with real-time collaboration, GROQ querying, and a customizable React-based Studio. Content is stored in the Content Lake with CDN delivery, Portable Text for structured rich content, and visual editing capabilities for live frontend previews.1011## Instructions1213- When defining schemas, use `defineType()` and `defineField()` with validation rules, model content for reuse by separating pages from content blocks, and use references over inline objects for shared content.14- When querying data, write GROQ queries with projections to fetch only needed fields, use the `->` dereference operator for joined data, and set `useCdn: true` for production reads.15- When customizing Sanity Studio, configure desk structure for sidebar navigation, add custom input components for specialized editing, and create custom publish workflows with actions.16- When building rich content, use Portable Text which is structured data (not HTML) that renders on any platform, with customizable toolbar, custom blocks, and inline objects.17- When integrating with Next.js, use `next-sanity` with ISR, preview mode, and visual editing, and `@sanity/visual-editing` for click-to-edit overlays in the frontend.18- When managing environments, use datasets (production, staging, development) for content isolation, GROQ-powered webhooks for filtered build triggers, and set `apiVersion` to a specific date to avoid breaking changes.19- When handling images, use Sanity's image with hotspot for focal point selection and `sanity-image-url` for generating responsive image URLs with transforms.2021## Examples2223### Example 1: Build a content-driven marketing site2425**User request:** "Set up Sanity with Next.js for a marketing site with modular page builder"2627**Actions:**281. Define page, hero, feature, CTA, and testimonial schemas as reusable block types292. Configure Sanity Studio with desk structure and live preview303. Set up `next-sanity` with ISR and GROQ queries for each page type314. Enable visual editing with `@sanity/visual-editing` for click-to-edit overlays3233**Output:** A modular marketing site where editors build pages from reusable content blocks with live preview.3435### Example 2: Implement real-time content preview3637**User request:** "Add live preview to our Sanity + Next.js site so editors see changes as they type"3839**Actions:**401. Configure Sanity Studio's Presentation tool for side-by-side editing412. Set up `@sanity/visual-editing` in the Next.js frontend for click-to-edit overlays423. Use `client.listen()` for real-time content updates in preview mode434. Configure draft content display with `!(_id in path("drafts.**"))` filtering4445**Output:** A live editing experience where content changes appear in the frontend as editors type.4647## Guidelines4849- Use `defineType()` and `defineField()` for schema definitions; they provide TypeScript types for the Studio.50- Model content for reuse: separate pages from content blocks so blocks can appear on any page.51- Use references over inline objects for content that appears in multiple places.52- Query with GROQ projections to fetch only needed fields, not entire documents.53- Use the CDN API (`useCdn: true`) for production reads; it is free and fast.54- Set `apiVersion` to a specific date to avoid breaking changes.55- Use Portable Text for rich content; it is structured data that renders on any platform.