Skip to main content

Blog Agent Rules

Read this file before modifying the blog subsystem.

Routing

  • Keep the public blog under app/(public)/blog/
  • Preserve the URL contract for page, category, and q
  • Do not convert pagination to infinite scroll unless explicitly requested

Sanity integration

  • Keep the standalone Sanity Studio under studio/; do not embed it in the Next.js application
  • Keep Sanity helpers in lib/sanity/
  • Keep blog-specific routing and metadata helpers in lib/blog/
  • Do not make Sanity config mandatory at build time
  • Preserve published-only fetching unless draft mode is explicitly requested
  • Content lives only in Sanity, in the single production dataset: author posts as drafts via the Sanity MCP or Studio, and let a human review and publish in the Studio. Drafts preview automatically on non-production deployments (tagged as drafts). Never reintroduce a git-side content pipeline or a staging dataset — both designs were removed deliberately.
  • Document ids must never contain a dot (post.<slug> style). Sanity hides dotted “path” ids from unauthenticated reads, which silently blanks the public blog. Use post-<slug> / category-<slug> / author-<slug>, or let Sanity generate plain ids.
  • post.faq renders as a visible FAQ section plus FAQPage JSON-LD; author it on the document like any other field
  • Render only populated author LinkedIn/X profile fields in the article byline; preserve author click attribution for each destination.

SEO

  • Use Next metadata for meta/canonical/Open Graph
  • Use next-seo for JSON-LD components only
  • Keep filtered/paginated blog index states non-canonical and non-indexed
  • Update sitemap behavior if route structure changes

Styling

  • Match Silvia’s public design language
  • Blog pages reuse the unchanged shared landing navigation/footer and V5 section primitives. Keep the CTA copy and Playfair Display font loader in blog-owned components, with Inter for body copy; do not edit landing pages or shared landing components for blog-specific requirements.
  • Keep the always-dark blog palette scoped to the blog variant in app/(public)/blog/blog-theme.css; do not alter shared app themes or experiment allocation
  • Use restrained Framer Motion reveal patterns only

Image storage

  • Upload blog hero and editorial images to Sanity (Studio upload or asset API); the site serves them from cdn.sanity.io
  • Do not add blog image binaries to the repo or reference external buckets; posts without a hero get a branded gradient placeholder automatically

Documentation

When behavior changes, update:
  • docs/blog/README.md
  • docs/blog/sanity-setup.md
  • docs/blog/seo-and-routing.md
  • this file