File Migration

Move 170 Files Into Their Domain Subfolders
Follows: plan-domain-isolation (Steps 1โ€“3 complete)
Plan Document ยท Walter ๐Ÿฆ‰ ยท March 17, 2026
DRAFT

I. The Situation

Domain subfolders exist. Nginx roots are pointed at them. Every domain except 1.foo is now 404. 170 files sit in /mnt/public/ waiting to be sorted.

1.foo still serves from /mnt/public/ directly โ€” it sees everything. This is intentional. 1.foo is the main vault and gets to keep all the documents that don't explicitly belong elsewhere.

Strategy: Move the specific files OUT of the flat directory INTO their domain subfolders. Everything left behind stays accessible via 1.foo.

II. File Assignments

Each domain gets only the files that are specifically about that domain. 1.foo keeps everything else.

0.foo โ€” Domain Monitor
mv domain-status.html โ†’ 0.foo/domain-status.html
Note: Also update domain-monitor.py to write to /mnt/public/0.foo/domain-status.html
Note: 0.foo nginx has location / { root ...; try_files ... } โ€” needs an index or the monitor file needs to be the index
123.foo โ€” Family Front Door
mv 123.foo.html โ†’ 123.foo/index.html
mv 123.foo-backup-20260315.html โ†’ 123.foo/ (backup)
12345.foo โ€” Charlie's Thing
mv 12345.foo.html โ†’ 12345.foo/index.html
mv 12345.foo-backup-20260315.html โ†’ 12345.foo/ (backup)
clankers.discount โ€” Fleet Dashboard
mv clankers.html โ†’ clankers.discount/index.html
mv clankers-backup-20260315.html โ†’ clankers.discount/
mv clankers-backups/ โ†’ clankers.discount/clankers-backups/
Note: Update fleet-monitor.py output path to /mnt/public/clankers.discount/index.html
Note: Update backup path to /mnt/public/clankers.discount/clankers-backups/
flawless.engineering โ€” Case Studies
mv flawless-engineering.html โ†’ flawless.engineering/index.html
mv flawless-engineering-20260316-0748z.html โ†’ flawless.engineering/
mv flawless-engineering-20260316-1510pm.html โ†’ flawless.engineering/
mv flawless.html โ†’ flawless.engineering/ (if different from above)
patty.adult โ€” Patty's Site
mv patty-adult.html โ†’ patty.adult/index.html
mv patty-adult-drudge.html โ†’ patty.adult/
mv patty-adult-v2-ivory.html โ†’ patty.adult/
Note: patty.adult nginx is in /etc/nginx/sites-enabled/default, not domains.conf. Its root needs to be updated separately to /mnt/public/patty.adult.
drip.xxx โ€” Drip Pilates
mv drip-xxx-site/index.html โ†’ drip.xxx/index.html
mv drip-xxx.html โ†’ drip.xxx/ (original flat version)
mv drip-xxx-20260317-2024z.html โ†’ drip.xxx/ (backup)
mv drip.html โ†’ drip.xxx/ (earlier version)
mv drip-game.html โ†’ drip.xxx/
symlink drip/ โ†’ drip.xxx/drip (render images)
Note: drip-xxx-site can be removed after migration
if-anyone-builds-it-everyone-dies.help
mv dies-help.html โ†’ if-anyone-builds-it-everyone-dies.help/index.html
if-anyone-builds-it-everyone-dies.rip
mv dies-rip.html โ†’ if-anyone-builds-it-everyone-dies.rip/index.html
2.foo through 9.foo โ€” Empty (No Files to Move)
These domains have no dedicated content yet. Their subfolders exist and are empty. They'll return 403 until they get content. That's correct.

III. What Stays in /mnt/public/ (= 1.foo)

Everything not listed above. That's ~140 files including:

IV. Execution

STEP 1 โ€” MOVE DOMAIN-SPECIFIC FILES

Run the moves listed in Section II. All mv operations within the same filesystem โ€” instant, no copy needed.

cd /mnt/public

# 0.foo
mv domain-status.html 0.foo/

# 123.foo
mv 123.foo.html 123.foo/index.html
mv 123.foo-backup-20260315.html 123.foo/

# 12345.foo
mv 12345.foo.html 12345.foo/index.html
mv 12345.foo-backup-20260315.html 12345.foo/

# clankers.discount
mv clankers.html clankers.discount/index.html
mv clankers-backup-20260315.html clankers.discount/
mv clankers-backups clankers.discount/

# flawless.engineering
mv flawless-engineering.html flawless.engineering/index.html
mv flawless-engineering-20260316-0748z.html flawless.engineering/
mv flawless-engineering-20260316-1510pm.html flawless.engineering/
mv flawless.html flawless.engineering/

# patty.adult
mv patty-adult.html patty.adult/index.html
mv patty-adult-drudge.html patty.adult/
mv patty-adult-v2-ivory.html patty.adult/

# drip.xxx
cp drip-xxx-site/index.html drip.xxx/index.html
mv drip-xxx.html drip.xxx/
mv drip-xxx-20260317-2024z.html drip.xxx/
mv drip-game.html drip.xxx/
ln -sf /mnt/public/drip drip.xxx/drip

# if-anyone-builds-it-everyone-dies.*
mv dies-help.html if-anyone-builds-it-everyone-dies.help/index.html
mv dies-rip.html if-anyone-builds-it-everyone-dies.rip/index.html
STOP โ€” VERIFY DOMAINS

Why: Every domain that had content should now be back online.

Check: Run domain monitor. Expected: 0.foo, 123.foo, 12345.foo, clankers.discount, flawless.engineering should be 200 again. Single-digit .foo domains stay 403 (correct โ€” they're empty).

How to continue: All domain-specific sites verified working.

STEP 2 โ€” UPDATE SCRIPTS

Two scripts write to the old paths:

STEP 3 โ€” UPDATE PATTY.ADULT NGINX ROOT

patty.adult is in /etc/nginx/sites-enabled/default. Its root needs to change from /mnt/public to /mnt/public/patty.adult.

STEP 4 โ€” GIT COMMIT ON VAULT

cd /mnt && git add -A && git commit -m "file migration: domain isolation complete"