# Sanity blog solution docs

- [Draft mode is on, and the page still shows published content](https://agenticboilerplate.com/cookbook/blog-sanity/draft-mode-and-the-app-router-cache): Draft mode only bypasses caches for reads that know about it. One direct client.fetch, or a token-less client, and the editor sees yesterday's copy.
- [GROQ projections that stop your blog index fetching every article body](https://agenticboilerplate.com/cookbook/blog-sanity/groq-projections-that-avoid-over-fetching): *[_type == "post"] returns whole documents, drafts of fields included. Project explicitly, dereference in the query, and slice every list.
- [Sanity images without the 4MB original and the layout jump](https://agenticboilerplate.com/cookbook/blog-sanity/image-urls-and-lqip): asset->url hands the browser the raw upload. Build a transform URL with a width, and use the LQIP Sanity already generated as the blur placeholder.
- [Modelling references in Sanity without an N+1 on every page](https://agenticboilerplate.com/cookbook/blog-sanity/modelling-references-without-n-plus-one): A reference is a pointer, not an embed. Dereference inside the projection, model the direction that reads well, and never resolve in a loop.
- [Webhook revalidation or a revalidate timer: pick one](https://agenticboilerplate.com/cookbook/blog-sanity/webhook-revalidation-vs-time-based): A 60-second timer rebuilds pages nobody asked for and still makes editors wait. Tag every read, invalidate on publish, and stop guessing.

---

Agentic Boilerplate: A Next.js repo your agent already knows. Free during launch, then $99 once.

- Site map for agents: https://agenticboilerplate.com/llms.txt
- Public API: https://agenticboilerplate.com/openapi.json
- Contact: agenticstudio@gmail.com
