diff --git a/README.md b/README.md
index b402a50..1fb820c 100644
--- a/README.md
+++ b/README.md
@@ -5,28 +5,19 @@ makes existing web apps agent-ready via [WebMCP](https://webmachinelearning.gith
(`document.modelContext`), with a human approval gate and real-browser verification of
every exposed tool.
-Static site with a dependency-free German-page generator: HTML, CSS, JavaScript,
-`robots.txt` and `sitemap.xml` are served directly.
-English default with a client-side German toggle. `/de/` is the crawlable German
-variant — regenerate it with `python3 build-de.py` after editing `index.html`
-and commit both files (hreflang pairs live in both pages and `sitemap.xml`).
+This repository contains the static site. It uses plain HTML, CSS and JavaScript,
+plus dependency-free generators for derived files.
Routes:
| Path | Purpose |
|---|---|
-| `/` · `/de/` | start page (bilingual copy, `/de/` generated from `index.html`) |
-| `/webmcp-agent-skill/` | the category page: **its title and `
` must keep the phrase "WebMCP agent skill"** — `webmcpify` is a coined single token and cannot rank for it. Bilingual in place, no separate `/de/` variant, so it is not part of `build-de.py`. Per-runtime install instructions live here. |
-| `/docs/` | technical entry point: coverage targets, evidence-aware resume, scoped verification and dated source boundaries |
-| `/docs/site-tools/` | dated ChatGPT Site tools setup and troubleshooting guide; official claims must stay sourced |
+| `/` · `/de/` | Start page in English and German |
+| `/webmcp-agent-skill/` | WebMCP agent skill overview and installation instructions |
+| `/docs/` | Technical documentation |
+| `/docs/site-tools/` | ChatGPT Site tools setup and troubleshooting guide |
| `/imprint.html` · `/privacy.html` | legal pages (`noindex`) |
-`tests/pages.test.mjs` guards the parts that silently rot: the consent surface on
-every page, a self-canonical per indexable page, the category phrase on
-`/webmcp-agent-skill/`, that the start and documentation pages form a linked
-tree, that every public route remains in the sitemap, and that every `FAQPage`
-schema answer still exists in the visible copy of its page.
-
Production: https://webmcpify.at
Google Analytics 4 measurement is documented in
@@ -34,43 +25,38 @@ Google Analytics 4 measurement is documented in
banner (Statistics / Marketing); the compliance record lives in
[`docs/LEGAL_COMPLIANCE_PLAN.md`](docs/LEGAL_COMPLIANCE_PLAN.md).
-Run its dependency-free contract tests with `node --test 'tests/*.test.mjs'`.
+## Development
-## Agent surface
+After editing `index.html`, regenerate and commit the German page:
-The site is itself agent-ready, in the three layers a WebMCP integration can have:
+```sh
+python3 build-de.py
+```
-- **Imperative** — `webmcp/tools.js` holds the tool contracts (`get_install_command`,
- `get_pipeline_overview`, `get_faq`, `set_language`) as pure data;
- `webmcp/site-tools.js` registers them via `document.modelContext` with the
- vendored runtime (`webmcp/webmcpify.js`).
-- **Declarative** — the install form (`#install-picker`) carries `toolname`,
- `tooldescription`, `toolautosubmit` and a `required` select with
- `toolparamdescription`, so `show_install_command` exists without JavaScript
- registration. Agents and humans go through the same submit handler; without
- scripting the control row is hidden and every install route is listed as text.
-- **Pre-visit discovery** — [`.well-known/webmcp.json`](.well-known/webmcp.json),
- served at `/.well-known/webmcp` (nginx alias, `application/json`) and advertised
- from every page via `` plus an RFC 8288 `Link` response header.
- The WebMCP spec defines **no** manifest format; this follows the de-facto shape
- third-party crawlers and inspectors probe. Runtime registration stays
- authoritative: the manifest is **generated** — run `node build-manifest.mjs` and
- commit the result after changing any tool contract; the tests fail if the
- committed file is stale or disagrees with the form.
+After changing a tool contract, regenerate and commit the discovery manifest:
-## Deploy
+```sh
+node build-manifest.mjs
+```
+
+Run the dependency-free contract tests with:
-Merging to `main` deploys automatically. `.github/workflows/site.yml` runs the contract
-tests and the generated-file check on every PR, then on every push to `main`:
+```sh
+node --test 'tests/*.test.mjs'
+```
-1. pulls `main` into the docroot on the host through a restricted deploy key, whose
- forced command only runs `git pull --ff-only` and prints the deployed `HEAD`;
-2. fails unless the deployed commit contains the pushed one;
-3. verifies `https://webmcpify.at/` (200 + HSTS) and every public route.
+## Agent surface
+
+The site is itself agent-ready, in the three layers a WebMCP integration can have:
-Host: `tuejon.at`, docroot `/opt/webmcpify` (clone of `main`, no build step), nginx vhost
-`/etc/nginx/sites-available/25-webmcpify.conf` (TLS via Let's Encrypt/certbot,
-http→https and www→apex 301s, HSTS). Jobs run on the repo's self-hosted `tuejon-ci`
-runner and skip pull requests from forks.
+- **Imperative** — tool contracts in `webmcp/tools.js` are registered through
+ `document.modelContext` by `webmcp/site-tools.js`.
+- **Declarative** — the install form exposes an equivalent tool through HTML
+ attributes and keeps the same workflow available without scripting.
+- **Pre-visit discovery** — [`.well-known/webmcp.json`](.well-known/webmcp.json)
+ advertises the available tools to compatible crawlers and inspectors.
+
+## Deploy
-Manual fallback (same effect as the pipeline): `ssh tj@tuejon.at 'cd /opt/webmcpify && git pull --ff-only'`.
+Pull requests run the contract tests and generated-file checks. Merges to `main`
+deploy automatically and verify the public routes.