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, andq - 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
productiondataset: 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. Usepost-<slug>/category-<slug>/author-<slug>, or let Sanity generate plain ids. post.faqrenders 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-seofor 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.mddocs/blog/sanity-setup.mddocs/blog/seo-and-routing.md- this file