sandbox.gf.cx — canonical subdomain template (parked 2026-05-23)

DARE.CO.UK · PARKED SKETCH · 2026-05-23

Mirrored from ~/.claude/.../memory/parked_sketch_sandbox_gfcx_subdomain_template.md. This is a design sketch parked for future build — read for context, not as a current deliverable.

Build a reusable subdomain template that ships ALL the affordances every new gf.cx subdomain should inherit — landing page, 404 catch-all, redirect rules scaffolding, thumbnail-pipeline on card URLs, media.css import, etc. First instance: sandbox.gf.cx. Future subdomains (payload, io, ask-opus, new ones) clone from this baseline.


Dan 2026-05-23: https://payload.gf.cx/evernote/ gives a 404 — the entire payload.gf.cx needs a catch-all for 404, that’s similar to pa.gf.cx, are you lost? you were searching for ? it should be part of our new sub-domain-pattern-template ideally. park for later. we should have a new sketch, for a future subdomain, call it sandbox.gf.cx — it gets redirects, it gets 404 routing, it gets thumbnail-pipeline on card url’s, etc.”“That will be pretty sweet.”

The motivating gap

Today each subdomain accumulates affordances ad-hoc: - pa.gf.cx has a 404 page, has a landing, has thumbnail pipeline on cards - payload.gf.cx got a landing in this session, has no 404 catch-all (hit at /evernote/) - assets.gf.cx has a landing, has a 404.html - io.gf.cx is still on Notion; nothing wired

When a new subdomain stands up, someone has to remember the full affordance list. Easy to ship without one or two. sandbox.gf.cx becomes the reference implementation that has ALL of them, so future subdomains clone from it.

Affordance checklist (the template content)

Affordance What it does Lives in
Declarative / landing Explains what the subdomain is, what lives here, what doesn’t, where to look instead index.html
404 catch-all “Are you lost? You were searching for <path> — try X or Y” with friendly tone, links back to landing 404.html + project config (CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Pages: automatic; R2-custom-domain: needs Worker or transform)
media.css import <link rel="stylesheet" href="https://assets.gf.cx/media/media.css"> in any page that embeds video/img every HTML file
Thumbnail pipeline on cards Any card-grid surface that links to another URL gets an OG-image-style thumbnail (the dare.co.uk pattern) thumbnailer.py / pa thumbnail service
Redirect rules scaffolding A reusable CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Transform Rule pattern: /index/, trailing-slash normalisation, www. → apex, etc. CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Rules (deployed via API)
Grayscale-thumb hover Card thumbnails default grayscale + restore color on hover (feedback_grayscale_thumb_hover_pattern.md) shared CSS (candidate for assets.gf.cx/cards/cards.css primitive)
Robots/sitemap robots.txt + sitemap.xml (auto-generated or hand) project root
Favicon + apple-touch-icon Tiny set consistent with portfolio brand project root
CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Access posture Public OR Access-gated declaration in a .cf-access-policy.md file (operator-facing) project root
Last-touched date Footer freshness stamp per feedback_last_touched_freshness_pattern.md every HTML file

Repo shape

xlab-co/toolkit/subdomain-template/
  README.md                   — what this is, how to clone
  index.html                  — declarative landing skeleton
  404.html                    — friendly catch-all
  robots.txt
  sitemap.xml.tmpl
  wrangler.toml               — CF Pages project config
  scripts/
    deploy.sh                 — wrangler pages deploy
    apply-rules.sh            — fires CF API to deploy Transform Rules
  .cf-access-policy.md.tmpl
  README-affordances.md       — the checklist above as a runbook

First instance: sandbox.gf.cx

Stand it up as the test bed. Build the template by extracting affordances from pa.gf.cx (most mature), then verify they all work on sandbox.gf.cx before cloning to fix payload.gf.cx’s missing 404 catch-all and seeding io.gf.cx.

What this also fixes

Cross-references

Resume conditions

Source: parked_sketch_sandbox_gfcx_subdomain_template_2026-05-23.md · Rendered 2026-05-23 11:24