Stack
How this site is built
The footer of every page shows what that page cost your browser to load.
- Build
- A small TypeScript script renders every page to static HTML. No framework, no client-side router.
- Delivery
- Cloudflare Workers with static assets. A small Worker answers
/mcpand the event feed; everything else is served straight from the edge. - CSS
- Inlined into each page, so the first response carries everything needed to draw it.
- JavaScript
- None on text pages. The homepage loads one module; the diorama and charts load when the browser is idle or when scrolled to.
- Images
- AVIF with WebP and JPEG fallbacks, sized per screen, with width and height set so nothing jumps.
- Type
- Josefin Sans, Instrument Serif and DM Mono, self-hosted, with size-matched fallbacks.
- Navigation
- Links prerender on hover with the Speculation Rules API, so most clicks show the next page at once.
- Motion
- Scroll-driven CSS where the browser supports it. Everything respects reduced motion.
For machines
- /mcpMCP server (Streamable HTTP). Tools: list_products, get_product, list_posts, get_post.
- /llms.txtA plain index of the site for language models.
- /index.mdEvery page has a Markdown twin: add .md to the path.
- /api/eventsThe latest anonymised events from the products, as JSON. /api/events/socket streams them over a WebSocket.
- /sitemap.xmlEvery page, for search engines.
Add the MCP server
- Claude Code
claude mcp add --transport http albretsen https://albretsen.no/mcp - Cursor
{ "mcpServers": { "albretsen": { "url": "https://albretsen.no/mcp" } } } - VS Code
code --add-mcp '{"name":"albretsen","type":"http","url":"https://albretsen.no/mcp"}' - Codex
[mcp_servers.albretsen] url = "https://albretsen.no/mcp" - Any client
https://albretsen.no/mcp