A few days ago I shared accept.md, a small utility that lets a Next.js page return Markdown when the client sends:
Accept: text/markdown
Instead of HTML.
No one asked for SvelteKit support, still I shipped it.
It now works with:
* Next.js (App Router and Pages Router) * SSG / SSR / ISR * SvelteKit routes * Vercel (no custom server required)
What it does:
If a client sends:
Accept: text/markdown
The exact same page returns clean Markdown.
If not, it behaves normally and renders HTML.
No duplicate routes. No separate .md files. No API layer. No SEO changes.
Just proper HTTP content negotiation.
Why I built this:
LLMs prefer Markdown. Internal tools prefer Markdown. Scrapers prefer Markdown. CLI workflows prefer Markdown.
But most sites only return HTML.
The usual solutions are:
* Maintain a parallel Markdown version * Build a custom export route * Create a docs API * Spin up a custom server
That felt unnecessary.
Browsers already send Accept: text/html. Agents can send Accept: text/markdown.
HTTP already solves this. Accept.md just makes it easy to use content negotiation inside modern frameworks without breaking static generation or edge deployments.
Design goals:
* Zero UI changes * Zero runtime cost for normal visitors * Works with static builds * Cache-friendly * Framework-native
It’s intentionally small. No heavy abstraction. Just a clean way to expose Markdown representations of existing pages.
Would love feedback — especially from people building AI-native apps, documentation systems, or content-heavy SaaS.
Curious whether Markdown negotiation becomes more common as agents become first-class web clients.