Personal website built with Vue 3 and Vite.
This is the source code for koch.codes, a personal website showcasing projects and information about Christian Koch's work in software development, embedded systems, and electronics.
- Framework: Vue 3
- Build Tool: Vite 6
- Language: JavaScript
npm installRun the development server with hot-reload:
npm run devThe site will be available at http://localhost:5173
Build the site for production:
npm run buildPreview the production build locally:
npm run previewsrc/- Source filespublic/- Static assetsindex.html- Entry HTML filevite.config.js- Vite configurationscripts/- Build/test tooling (agent-readiness generator lives inscripts/agents/)workers/- Cloudflare Worker for edge-only features (Markdown negotiation, Link headers, MCP, A2A)
The site publishes the emerging "agent-ready web" standards so AI agents can read and use it cheaply and reliably:
| Concern | What is served |
|---|---|
| Discovery | robots.txt (AI rules + Content-Signal), sitemap.xml, Link response headers |
| Content | Markdown twin of every page, llms.txt, llms-full.md |
| Protocols | /.well-known/api-catalog, /.well-known/mcp/server-card.json + /mcp, /.well-known/agent-card.json + /a2a |
| Auth | /auth.md (states that everything is public; no OAuth server exists, so no OAuth metadata is published) |
| Skills | /.well-known/agent-skills/index.json |
Everything static is generated from the pages people actually read, so it
cannot drift: scripts/build-agent-files.mjs parses public/llms.txt and the
app pages, then writes the Markdown twins, discovery documents and digests.
npm run agents:build # regenerate public/ (also runs as part of `npm run build`)
npm run agents:check # fail if public/ is out of sync
npm run agents:test # validate specs + run the Worker against a stubbed origin
npm run agents:deploy # deploy the Cloudflare Worker (needs CLOUDFLARE_API_TOKEN)Two things cannot be done by static hosting and live in the Worker:
- Markdown negotiation —
Accept: text/markdownreturns the.mdtwin while browsers keep getting HTML (Vary: Accepton both paths). /mcpand/a2a— a read-only MCP server (6 tools over the generatedagent-data.json) and a minimal A2A endpoint, both with no auth and no writes.
The Worker is designed so a missing or broken twin never breaks a page: it falls
through to the HTML response. It also strips Content-Encoding/Content-Length
from proxied responses (the runtime decodes the body) and sets
application/linkset+json for the extensionless API catalog.
Scan the result with POST https://isitagentready.com/api/scan ({"url":"https://koch.codes"}).
Private project - All rights reserved
personal-website vue3 vite portfolio web-development