Pure Phoenix Phase 3.6, DNS Migration Plan¶
URL: https://mkdocs.justinsforge.com/memory/handoffs/pure-phoenix-phase-3-6-dns-migration-2026-04-28/
Forge-side filesystem rename + prose sweep complete (sites/justinandkrystal.com/ to sites/justinkrystal.com/, 19 files updated). DNS records and tunnel ingress are next, staged here for confirmation before any live-traffic flip.
Active doctrine: FORGE-DOCTRINE.md. Default-domain rule: project_default_domain_justinsforge.md.
Discovery¶
justinandkrystal.com is not a Cloudflare zone. The live site has always been justinkrystal.com. The "rename" was textual only (forge prose + dir name). Live traffic is untouched.
Cloudflare zones currently owned (from cf.py zones)¶
gusoutdoor.co
gusthebass.com
justinkrystal.com
justinsforge.com
justinwieb.com
justinwiebelhaus.com
metaapplications.com
shopnovadesign.com
sipnservesociety.com
virtualrealityalliance.com
Both justinkrystal.com and justinsforge.com are present. No new zone purchases needed.
Current media-server tunnel ingress¶
22 entries today:
| Hostname | Origin | Classification |
|---|---|---|
landing.justinkrystal.com |
http://192.168.86.74:8085 | personal/family (KEEP) |
audiobooks.justinkrystal.com |
http://192.168.86.74:13378 | personal/family (KEEP) |
homeassistant.justinkrystal.com |
http://192.168.86.70:8123 | borderline (decide) |
books.justinkrystal.com |
http://192.168.86.74:8083 | personal/family (KEEP) |
justinkrystal.com |
http://192.168.86.74:8085 | personal/family root (KEEP) |
filebrowser.justinkrystal.com |
http://192.168.86.67:8080 | borderline (decide) |
invoiceninja.justinkrystal.com |
http://192.168.86.81:8082 | DEAD (biz-apps CT 104 destroyed) |
prowlarr.justinkrystal.com |
http://192.168.86.74:9696 | forge-internal (MOVE to justinsforge.com) |
requests.justinkrystal.com |
http://192.168.86.74:5055 | personal/family (Overseerr, KEEP) |
finn.justinkrystal.com |
https://100.112.22.2:8006 | forge-internal (MOVE) |
qtorrent.justinkrystal.com |
http://192.168.86.74:8080 | forge-internal (MOVE) |
portainer.justinkrystal.com |
https://192.168.86.74:9443 | forge-internal (MOVE) |
radarr.justinkrystal.com |
http://192.168.86.74:7878 | forge-internal (MOVE) |
sonarr.justinkrystal.com |
http://192.168.86.74:8989 | forge-internal (MOVE) |
appflowy.justinkrystal.com |
http://192.168.86.81:80 | DEAD (biz-apps) |
gizmo.justinkrystal.com |
http://192.168.86.81:8084 | DEAD (biz-apps) |
tanner.justinkrystal.com |
http://192.168.86.50:8080 | LIKELY DEAD (TNappe Insurance is in cleanup target list) |
frigate.justinkrystal.com |
http://192.168.86.84:5000 | borderline (forge-internal management, but family-aware for cameras) |
n8n.justinkrystal.com |
http://192.168.86.82:5678 | forge-internal (MOVE) |
inbox.justinkrystal.com |
http://192.168.86.50:7400 | forge-internal (MOVE, Phase 4.6 inbox brain endpoint) |
mkdocs.justinsforge.com |
http://192.168.86.50:8000 | already on justinsforge.com (KEEP) |
| (fallback) | http_status:404 | (KEEP) |
Proposed actions (require your sign-off before execution)¶
1. Remove dead ingress entries (3 records)¶
Remove from media-server tunnel:
invoiceninja.justinkrystal.com(CT 104 destroyed)appflowy.justinkrystal.com(CT 104 destroyed)gizmo.justinkrystal.com(CT 104 destroyed)
Reversibility: trivial. Re-adding is one cf-add call if ever needed.
2. Decide on borderline + suspect entries (4 records)¶
| Hostname | Question |
|---|---|
homeassistant.justinkrystal.com |
KEEP (you/Krystal control house from phone), MOVE to justinsforge (forge-internal control plane), or both? |
filebrowser.justinkrystal.com |
family-shared file browsing? if yes KEEP. If only your admin tool, MOVE. |
tanner.justinkrystal.com |
TNappe Insurance is on the deletion list (Section 14B). Remove this ingress? |
frigate.justinkrystal.com |
NVR UI: keep on justinkrystal so Krystal can also pull up cameras, OR move to justinsforge as forge-internal? |
3. Move forge-internal subdomains to justinsforge.com (8 records)¶
For each, two-step: add new *.justinsforge.com entry, leave *.justinkrystal.com for one-week grace period as redirect/alias, then remove old.
| New hostname | Origin |
|---|---|
prowlarr.justinsforge.com |
http://192.168.86.74:9696 |
finn.justinsforge.com |
https://100.112.22.2:8006 |
qtorrent.justinsforge.com |
http://192.168.86.74:8080 |
portainer.justinsforge.com |
https://192.168.86.74:9443 |
radarr.justinsforge.com |
http://192.168.86.74:7878 |
sonarr.justinsforge.com |
http://192.168.86.74:8989 |
n8n.justinsforge.com |
http://192.168.86.82:5678 |
inbox.justinsforge.com |
http://192.168.86.50:7400 |
4. Coordination tasks downstream of the DNS move¶
- n8n credentials: any workflow with hardcoded
n8n.justinkrystal.comURL needs updating ton8n.justinsforge.com. Audit before flipping. Most n8n workflows hit by IP not domain so likely zero touches; verify. - Cloudflare Access policies: if any apps have CF Access in front, the policies are zone-scoped. Need to mirror to justinsforge.com zone.
- iOS Shortcuts: the inbox webhook endpoint Justin uses from his phone is configured by URL; needs update on the Shortcuts side after DNS flips.
- Bookmarks (your phone, browsers): one-time refresh.
- MEMORY.md / CLAUDE.md prose: scan for hardcoded subdomain refs after DNS flip.
Execution sequence (when you approve)¶
- Add the 8 new
*.justinsforge.comingress entries via/cf-add(additive, no traffic moves yet) - Verify each new URL resolves to the expected origin via curl
- Update iOS Shortcut for inbox webhook
- One-week soft-cutover: both old and new URLs work
- Remove the 8 old
*.justinkrystal.comingress entries plus the 3 dead biz-apps entries (11 removals total) - Decide on the 4 borderline/suspect entries per your call above
- Sweep MEMORY.md, CLAUDE.md, system-map, hooks for any hardcoded subdomain refs that need updating
Status¶
| Step | State |
|---|---|
sites/justinandkrystal.com/ to sites/justinkrystal.com/ rename |
DONE 2026-04-28 |
| 19-file prose sweep (justinandkrystal to justinkrystal) | DONE 2026-04-28 |
| Dead-ingress removal (4 records: invoiceninja, appflowy, gizmo, tanner) | DONE 2026-04-28 |
| Forge-internal migration to justinsforge.com (11 records: prowlarr, finn, qtorrent, portainer, radarr, sonarr, n8n, inbox, homeassistant, filebrowser, frigate) | DONE 2026-04-28 |
| Active prose sweep for new subdomains | DONE 2026-04-28 (4 active files updated: sites/justinkrystal.com/README.md, landing/index.html, landing/admin.html, infra/n8n/outbound-pattern.md) |
| Historical handoff/daily-log refs | NOT updated (preserved as historical accuracy) |
| iOS Shortcut for inbox webhook | YOUR ACTION: update Shortcut to point at https://inbox.justinsforge.com instead of https://inbox.justinkrystal.com |
| Browser bookmarks | YOUR ACTION: refresh bookmarked admin URLs (n8n, radarr, sonarr, etc.) |
Final tunnel ingress state (post-migration)¶
=== justinkrystal.com (personal/family, 5 entries + root) ===
landing.justinkrystal.com -> http://192.168.86.74:8085
audiobooks.justinkrystal.com -> http://192.168.86.74:13378
books.justinkrystal.com -> http://192.168.86.74:8083
justinkrystal.com -> http://192.168.86.74:8085
requests.justinkrystal.com -> http://192.168.86.74:5055
=== justinsforge.com (forge-internal, 12 entries) ===
mkdocs.justinsforge.com -> http://192.168.86.50:8000
prowlarr.justinsforge.com -> http://192.168.86.74:9696
finn.justinsforge.com -> https://100.112.22.2:8006
qtorrent.justinsforge.com -> http://192.168.86.74:8080
portainer.justinsforge.com -> https://192.168.86.74:9443
radarr.justinsforge.com -> http://192.168.86.74:7878
sonarr.justinsforge.com -> http://192.168.86.74:8989
n8n.justinsforge.com -> http://192.168.86.82:5678
inbox.justinsforge.com -> http://192.168.86.50:7400
homeassistant.justinsforge.com -> http://192.168.86.70:8123
filebrowser.justinsforge.com -> http://192.168.86.67:8080
frigate.justinsforge.com -> http://192.168.86.84:5000
Both zones are protected by Cloudflare Access where applicable. 4 dead biz-apps + tanner ingress entries removed.
[Claude Code]