Content authoring guide
Content lives in apps/web/src/content/ as typed MDX, validated at build by Zod
(see apps/web/src/content.config.ts). Malformed content fails the build rather
than shipping.
Add a case study
Section titled “Add a case study”Create apps/web/src/content/cases/<slug>/index.mdx (folder-per-entry so images
sit beside the file):
---title: 'Outcome-led title with the number in it'client: 'Client name'summary: 'One or two sentences leading with the outcome.'disciplines: ['engineering', 'data']outcome: kicker: 'Grew.' # optional 1-2 word opener, real punctuation headline: 'A falsifiable, declarative sentence sourced from the body.' stat: { value: '10×', label: 'revenue growth' } # genuine numerals ONLY supporting: # max 2, requires stat, true numbers from the body - { value: '500k', label: 'avg weekly pageviews' }role: 'Embedded product & engineering team'duration: '5 years'hero: ./hero.pngheroAlt: 'Describe the image'featured: falseorder: 10legacySlug: 'old-wordpress-slug'---
## The challenge
...
## What we did
...
## The outcome
...Add a blog post
Section titled “Add a blog post”Create apps/web/src/content/posts/<slug>/index.mdx with the post frontmatter
(title, description, publishedDate, author, category, tags, hero).
Images
Section titled “Images”Reference images relatively (./hero.png); Astro optimizes them to AVIF/WebP with
correct dimensions to protect CLS.