> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cfosilvia.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Agent rules

# 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


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.