One hostname, three independent systems stitched together by a single Caddy vhost on the Helsinki edge (CT 100). The bare root is a static gallery, /showcase/* is a second static tree, and everything else proxies to the FastAPI review app on 127.0.0.1:8099. The three don't share navigation — this page is the connective tissue they're missing.
Match order matters: the two handle blocks win first, then everything falls through to the app. This is why / and /review are two entirely different pages.
| Pattern | Serves from | Notes |
|---|---|---|
| handle_path /showcase/* | /var/www/dhm-showcase | Static file server. /showcase → /showcase/ redirect. |
| handle / | /var/www/dhm-gallery | Bare root only — a single 68 KB index.html that hotlinks images out of the showcase tree. |
| handle /review | proxy :8099 → / | Rewrites to the app's own index. /review/ → /review redirect. |
| (fallback) | proxy :8099 | Every other path: /more, /p/*, /export/*, /curate*, /static/*, /preview/*, /fullres/*. |
Experiment write-ups generated by the gallery builders in packages/raw-process/scripts/. Each page sits beside its own full/, prev/ and sometimes upscaled/ image directories. Only four are reachable from the root — the rest are the reason this sitemap exists.
index.html, so there is no page to open. 101 files with no viewer. no page405 MBSource lives in packages/review-site/. The front page splits into a curated featured set (the FEATURED_SLUGS list in app/main.py) and everything else under /more. Comments append per-property to comments/<slug>.jsonl.
100-centre-st41 routes
/p/{slug}#{scene}. Form-only; 405 on GET.no pageok200
Amber-marked entries are the ten featured on /review, in the order they appear there; the rest live under /more. Watch the near-duplicate slugs — 100-centre and 100-centre-st render the same address, as do the 10-spiers-rd, 102-park-st, 104-mason and 10-ashland pairs.
This page is now linked from the root gallery footer, so a crawl from / reaches all 68. Before that it found 48. The /showcase/ index itself is orphaned — the root links straight past it to /showcase/lora/ — and /showcase/lora/ links only to picks/ and model-compare/. Everything else in the showcase tree, including the 2.3 GB v3-e2e acceptance report and its three per-property pages, is direct-URL-only. Same for the whole /curate tool.
<meta name="robots" content="noindex">, and the host serves no robots.txt and no sitemap.xml (both 404). Access control is obscurity — the site is public and unauthenticated./docs and /openapi.json are exposed. FastAPI's interactive docs are live, which is how the /curate routes surface. Worth disabling if the host is meant to look read-only./var/www/dhm-gallery is 68 KB because all 414 of its images are hotlinked out of /showcase/lora/v3-e2e/full/. Pruning that directory breaks the front page.packages/review-site/app/main.py defines 6 routes; the deployed app serves 11 — the five /curate* routes exist only on the server.deploy-helsinki.sh targets a layout that's gone. The script builds and ships a frontend with /highlights/, /recipe-tour/ and /compare; all three 404 today. The vhost was repurposed on 2026-06-26 and again on 2026-08-10, and the script wasn't updated.