Feedback new subdomain links home

When I add a new public hostname / subdomain on a forge-controlled apex (most often justinsforge.com, occasionally justinkrystal.com), I must, in the same task, add a tile linking to it from the apex's landing page. Don't ship a subdomain that doesn't exist on the home page.

Why: Justin navigates from the home pages, not by typing URLs. A subdomain that's not in the index might as well not exist. Asked for it explicitly on 2026-05-02 after I added several subdomains over a session without updating the landing.

How to apply:

After any cf-add call (or equivalent ingress add), update the matching landing index BEFORE marking the task done:

Apex Landing file Notes
justinsforge.com /home/justinwieb/forge/sites/justinsforge.com/landing/index.html served by nginx on Console:8100. Existing sections: Brain, Operations, Home, Automation, Studio, Dashboards, Capture, Surfaces, Family hub, Brands.
justinkrystal.com (verify path, family-side, may or may not have a curated index)

For a new subdomain on justinsforge.com:

  1. Pick the right section (re-use existing Studio / Dashboards / Operations / etc., create a new section only if no existing section fits).
  2. Add a .tile entry with: matching emoji icon, name, one-line desc.
  3. If the subdomain is a frequent destination, also add it to the top .quickbar pill row.
  4. If the subdomain only exists for low-traffic admin (e.g., a single-project preview, an internal API), it's fine to skip the home tile and rely on a parent hub instead. Two known exceptions today:
  5. Per-project Hyperframes URLs (<name>-hf.justinsforge.com) live inside the hub at hyperframes.justinsforge.com, not on home.
  6. The inbox webhook (inbox.justinsforge.com) is POST-only, kept as text reference in Capture.

The tile pattern (copy-paste):

<a class="tile" href="https://NAME.justinsforge.com">
  <span class="icon">&#NNNNN;</span>
  <span class="name">Display Name</span>
  <span class="desc">One sentence about what it does.</span>
</a>

Skip the rule when: - The new subdomain is intentionally headless (POST webhook, internal API). Document why in the Capture section instead of adding a tile. - The new subdomain is a per-instance child of a parent hub (Hyperframes per-project URLs, Remotion per-project URLs, etc.). Parent hub gets the tile, children don't.

Audit command: to find drift between Cloudflare ingress and the landing page:

diff <(for t in "AdGuard" "media-server" "VR Alliance"; do
  /home/justinwieb/forge/scripts/forge_cloudflare_cf.py ingress "$t" 2>&1 | awk '/justinsforge\.com/ {print $1}'
done | sort -u) \
  <(grep -oE 'https://[a-z0-9-]+\.justinsforge\.com' /home/justinwieb/forge/sites/justinsforge.com/landing/index.html | sed 's|https://||' | sort -u)

[Claude Code]