[object Object]

← back to Secrets Manager

auto-save: 2026-06-21T18:53:00 (7 files) — .gitignore registry.json registry.json.bak.20260507-122845 routes.json.bak-1779124119 routes.json.bak.20260505-fanout

74dfa6288a0bba772911166e5dffdfc906d035c8 · 2026-06-21 18:53:02 -0700 · Steve Abrams

Files touched

Diff

commit 74dfa6288a0bba772911166e5dffdfc906d035c8
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Sun Jun 21 18:53:02 2026 -0700

    auto-save: 2026-06-21T18:53:00 (7 files) — .gitignore registry.json registry.json.bak.20260507-122845 routes.json.bak-1779124119 routes.json.bak.20260505-fanout
---
 .gitignore                              |    2 +
 .postbubbe-rotation-RESOLVED            |    2 +
 DW-ADMIN-ROTATION-RUNBOOK-2026-06-19.sh |  283 +++++++
 registry.json                           |  144 +++-
 registry.json.bak.20260507-122845       |  534 -------------
 routes.json.bak-1779124119              | 1234 -------------------------------
 routes.json.bak.20260505-fanout         |  535 --------------
 7 files changed, 428 insertions(+), 2306 deletions(-)

diff --git a/.gitignore b/.gitignore
index 55cb7b6..8c841b4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -41,3 +41,5 @@ tmp/
 *~
 copy-of-*
 *.over-narrowed-*
+gmc-sa-*.json
+gmc-sa-146735262.json
diff --git a/.postbubbe-rotation-RESOLVED b/.postbubbe-rotation-RESOLVED
new file mode 100644
index 0000000..7f26d65
--- /dev/null
+++ b/.postbubbe-rotation-RESOLVED
@@ -0,0 +1,2 @@
+RESOLVED 2026-06-12 08:37:00
+rotated: 
diff --git a/DW-ADMIN-ROTATION-RUNBOOK-2026-06-19.sh b/DW-ADMIN-ROTATION-RUNBOOK-2026-06-19.sh
new file mode 100644
index 0000000..7305669
--- /dev/null
+++ b/DW-ADMIN-ROTATION-RUNBOOK-2026-06-19.sh
@@ -0,0 +1,283 @@
+#!/usr/bin/env bash
+# =============================================================================
+#  DW-ADMIN ROTATION RUNBOOK  —  2026-06-19
+# =============================================================================
+#
+#  HARD RULE:  STEVE RUNS THIS.  THE AGENT (VP Security) EXECUTED NOTHING.
+#  ----------------------------------------------------------------------
+#  This file was AUTHORED by the security officer from read-only verification.
+#  Zero ALTER ROLE, zero ssh-mutate, zero fan, zero pm2, zero flag-clear ran.
+#  Every block below is a paste you (Steve) execute by hand, step by step,
+#  reading the VERIFY GATE after each step and STOPPING if it does not pass.
+#
+#  DO NOT pipe this whole file into a shell. It is STEP-GATED on purpose.
+#  Source/paste ONE step, read its verify output, then proceed to the next.
+#
+#  >>> RUN THIS IN A NON-LOGGING SHELL <<<
+#      The new password must never hit shell history. Start a clean shell:
+#          set +o history          # zsh/bash: stop appending to history NOW
+#      …or run the whole session in a subshell and clear history after:
+#          fc -p; <do work>; fc -P            # zsh
+#      At the very end:  unset NEWPW  (Step 4 verify reminds you).
+#
+# -----------------------------------------------------------------------------
+#  WHY THIS RUNBOOK EXISTS (ground truth from read-only verification)
+# -----------------------------------------------------------------------------
+#   * dw_admin rotation is NOT verifiably complete.
+#   * The canonical fan key PG_DW_ADMIN_PASSWORD does NOT exist in the secrets
+#     registry / .env / routes.json — so cli.js has NEVER fanned dw_admin.
+#     (The DSN_REWRITE map in cli.js DOES already know the key:
+#        PG_DW_ADMIN_PASSWORD -> { dsn:'DATABASE_URL', user:'dw_admin' }
+#      but with no routes.json entry there are no destinations to write to.)
+#   * Old credential 'DW2024SecurePass' is STILL LIVE in 4 local .env.local
+#     DATABASE_URL DSNs (all 127.0.0.1 / LOCAL Mac2 Postgres):
+#         ~/Projects/Norma/.env.local                       (db: sdcc)
+#         ~/Projects/StudentLoanTracker/.env.local          (db: dw_unified)
+#         ~/Projects/ClawCoder/.env.local                   (db: clawcoder)
+#         ~/Projects/Designer-Wallcoverings/DW-Programming/ImportNewSkufromURL/.env.local (db: dw_unified)
+#     …plus ~45 hardcoded source refs (the secret-strip backlog — DO-LAST).
+#   * Prod (Kamatera) compromised flag = a HARDCODED literal at
+#         ~/cncp-starter/server.js:3936   out.prod = { status: 'compromised' }
+#     (DO-LAST — clear only after 2–4 verify clean.)
+#   * Prod app DSN fan-out is SSH-manual (ROTATION-PRESTAGE.md step 3b).
+#   * ROLLBACK SOURCE = the OLD password lives on prod ONLY in
+#         /root/.pm2/dump.pm2     (NOT in any .env, NOT in the secrets registry)
+#
+# -----------------------------------------------------------------------------
+#  ROLLBACK SUMMARY (if anything FATALs after a new-pw ALTER)
+# -----------------------------------------------------------------------------
+#   Revert the role to the OLD pw that prod apps still expect. The OLD pw is
+#   recoverable from /root/.pm2/dump.pm2 on Kamatera (the DATABASE_URL inside a
+#   pm2 env block). Re-ALTER dw_admin back to that OLD pw via the same
+#   stdin-piped pattern (NEVER -c), then pm2 restart. Detailed one-liner is in
+#   Step 4 (4R). Local Mac2 rollback = re-ALTER local role to OLD pw the same
+#   way. Because every step is verify-gated, you roll back the SINGLE step that
+#   failed, not the whole sequence.
+#
+# -----------------------------------------------------------------------------
+#  PRE-FLIGHT CHECKLIST  (Step 1 — read-only, safe to run as-is)
+# -----------------------------------------------------------------------------
+#  Run Step 1 first. All three must be GREEN before you mint anything.
+# =============================================================================
+
+
+# ─────────────────────────────────────────────────────────────────────────────
+#  STEP 1 — PRE-FLIGHT  (read-only; nothing mutates)
+# ─────────────────────────────────────────────────────────────────────────────
+#  1a. Kamatera reachable over the canonical ssh alias?
+#  1b. dump.pm2 (the OLD-pw rollback source) present + non-empty on prod?
+#  1c. A CURRENT dw_unified pg_dump exists as a safety net (NOT 0-byte/stale)?
+#
+#  PASTE:
+:
+ssh my-server 'echo "ssh OK as $(whoami)@$(hostname)"' \
+  && ssh my-server 'ls -l /root/.pm2/dump.pm2 && test -s /root/.pm2/dump.pm2 && echo "dump.pm2 PRESENT+nonempty"' \
+  && ssh my-server 'ls -lt /root/backups/db/*dw_unified*.{dump,sql,sql.gz} 2>/dev/null | head -3; echo "(confirm newest is today-ish and NOT 0 bytes)"'
+#  NOTE (verified 2026-06-19): dumps live in /root/backups/db/ (the daily 03:00
+#  nightly writes dw_unified_YYYY-MM-DD_0300.dump there; newest verified ~1.49GB).
+#
+#  VERIFY GATE 1:  All three lines printed, dump.pm2 is non-empty, and a fresh
+#  dw_unified dump exists. If ANY is missing — STOP. Do not mint a new pw with
+#  no rollback source and no safety-net dump. (If the dump is stale, take one
+#  first:  ssh my-server "sudo -u postgres pg_dump -Fc dw_unified > /root/backups/db/dw_unified-$(date +%F).dump" )
+# ═════════════════════════════════════════════════════════════════════════════
+
+
+# ─────────────────────────────────────────────────────────────────────────────
+#  STEP 2 — MINT NEWPW + ALTER ROLE on BOTH prod AND local Mac2
+# ─────────────────────────────────────────────────────────────────────────────
+#  Secret hygiene baked in:
+#   * NEWPW minted into a shell var at runtime — never typed, never a literal.
+#   * Only last4 ever printed:  ${NEWPW: -4}
+#   * Every ALTER is PIPED OVER STDIN (printf | ssh "sudo -u postgres psql"),
+#     NOT psql -c "…" — so the password never appears in ps/argv on Mac2 OR
+#     on the remote (an -c arg shows in the remote process table).
+#   * Connect to db 'postgres' for the prod ALTER (always present; role-level op).
+#   * VERIFY by opening a FRESH connection with the NEW pw. NEVER probe the old
+#     pw — a failed auth with the old credential trips security-monitor.sh.
+#
+#  PASTE (2a — mint; prints last4 only):
+:
+NEWPW="$(openssl rand -base64 30 | tr -d '/+=' | cut -c1-28)"
+echo "NEWPW minted, last4=${NEWPW: -4}  (full value is in the shell var ONLY)"
+#
+#  PASTE (2b — ALTER on PROD via ssh, stdin-piped, no -c, connect db=postgres):
+:
+printf "ALTER ROLE dw_admin WITH PASSWORD '%s';\n" "$NEWPW" \
+  | ssh my-server "sudo -u postgres psql -d postgres -v ON_ERROR_STOP=1 -q -f -" \
+  && echo "PROD ALTER applied (last4=${NEWPW: -4})"
+#
+#  PASTE (2c — ALTER on LOCAL Mac2, stdin-piped, no -c):
+:
+printf "ALTER ROLE dw_admin WITH PASSWORD '%s';\n" "$NEWPW" \
+  | psql -d postgres -v ON_ERROR_STOP=1 -q -f - \
+  && echo "LOCAL Mac2 ALTER applied (last4=${NEWPW: -4})"
+#
+#  VERIFY GATE 2 — prove the NEW pw works with a fresh connection on EACH.
+#  (Uses PGPASSWORD only for these probe sub-shells; never echoes the value.)
+#  PASTE (2v):
+:
+echo "--- prod new-pw probe ---"
+ssh my-server "PGPASSWORD='$NEWPW' psql -h 127.0.0.1 -U dw_admin -d dw_unified -tAc 'select current_user, 1'" \
+  && echo "PROD new-pw: OK"
+echo "--- local new-pw probe ---"
+PGPASSWORD="$NEWPW" psql -h 127.0.0.1 -U dw_admin -d dw_unified -tAc "select current_user, 1" \
+  && echo "LOCAL new-pw: OK"
+#
+#  VERIFY GATE 2:  BOTH probes return  dw_admin|1  and print "OK". If either
+#  fails — STOP. Do NOT proceed to fan-out; the DB and the DSNs would diverge.
+#  (Roll back the side that failed via Step 4's 4R pattern with the OLD pw.)
+# ═════════════════════════════════════════════════════════════════════════════
+
+
+# ─────────────────────────────────────────────────────────────────────────────
+#  STEP 3 — REGISTER fan key PG_DW_ADMIN_PASSWORD + fan to LOCAL .env.local DSNs
+# ─────────────────────────────────────────────────────────────────────────────
+#  This is the repair that has NEVER run for dw_admin. cli.js already has the
+#  DSN_REWRITE entry; it just has NO routes.json destinations, so first you
+#  MUST add the routes.json entry, THEN register the key so the fan can write.
+#
+#  3-PRE — ADD THE MISSING routes.json ENTRY (it does not exist today).
+#  Open ~/Projects/secrets-manager/routes.json and add this under "services":
+#  ───────────────────────────────────────────────────────────────────────────
+#    "PG_DW_ADMIN_PASSWORD": {
+#      "label": "Postgres dw_admin role password (local Mac2 + prod via 3b)",
+#      "destinations": [
+#        { "type": "env_file", "path": "~/Projects/Norma/.env.local" },
+#        { "type": "env_file", "path": "~/Projects/StudentLoanTracker/.env.local" },
+#        { "type": "env_file", "path": "~/Projects/ClawCoder/.env.local" },
+#        { "type": "env_file", "path": "~/Projects/Designer-Wallcoverings/DW-Programming/ImportNewSkufromURL/.env.local" }
+#      ]
+#    }
+#  ───────────────────────────────────────────────────────────────────────────
+#  NOTE: no per-dest "dsn" is needed — cli.js's DSN_REWRITE map already maps
+#  PG_DW_ADMIN_PASSWORD -> { dsn:'DATABASE_URL', user:'dw_admin' }, so each
+#  env_file dest gets its DATABASE_URL password surgically rewritten (the rest
+#  of the DSN — host/port/db/user — is preserved). All 4 are LOCAL 127.0.0.1.
+#  The Desktop copy (~/Desktop/site-factory.env) is NOT a destination — it was
+#  RETIRED 2026-06-11 (DTD verdict A); cli.js no longer fans to it. Do not add
+#  it back. The master ~/Projects/secrets-manager/.env IS written by the fan.
+#
+#  PASTE (3a — sanity that the JSON still parses after your edit):
+:
+node -e 'JSON.parse(require("fs").readFileSync(process.env.HOME+"/Projects/secrets-manager/routes.json","utf8")); console.log("routes.json parses OK")'
+#
+#  PASTE (3b — register + fan the key, value over STDIN, never in argv):
+:
+printf "PG_DW_ADMIN_PASSWORD=%s\n" "$NEWPW" \
+  | node ~/Projects/secrets-manager/cli.js import-paste
+#  (import-paste reads KEY=VALUE from stdin → writes master .env, then fans to
+#   the 4 env_file destinations, surgically rewriting each DATABASE_URL pw.
+#   If a labeled key is required and import-paste balks, the equivalent is:
+#     node ~/Projects/secrets-manager/cli.js add PG_DW_ADMIN_PASSWORD  — and
+#     paste the value when prompted, so it still never lands in argv/history.)
+#
+#  VERIFY GATE 3 — the 4 DSNs now carry the NEW last4 and ZERO old pw remain.
+#  PASTE (3v):
+:
+echo "--- new last4 should appear in all 4 DATABASE_URL DSNs ---"
+for f in ~/Projects/Norma/.env.local \
+         ~/Projects/StudentLoanTracker/.env.local \
+         ~/Projects/ClawCoder/.env.local \
+         "$HOME/Projects/Designer-Wallcoverings/DW-Programming/ImportNewSkufromURL/.env.local"; do
+  grep -q "DATABASE_URL" "$f" \
+    && printf "%s -> dsn-pw-last4=%s\n" "$f" \
+       "$(grep -m1 DATABASE_URL "$f" | sed -E 's#.*://[^:]+:([^@]+)@.*#\1#' | tail -c 5)"
+done
+echo "--- there must be NO remaining DW2024SecurePass in the 4 files ---"
+grep -l "DW2024SecurePass" \
+  ~/Projects/Norma/.env.local \
+  ~/Projects/StudentLoanTracker/.env.local \
+  ~/Projects/ClawCoder/.env.local \
+  "$HOME/Projects/Designer-Wallcoverings/DW-Programming/ImportNewSkufromURL/.env.local" \
+  2>/dev/null && echo "!! OLD PW STILL PRESENT — STOP" || echo "clean: no DW2024SecurePass in the 4 .env.local"
+#
+#  VERIFY GATE 3:  all 4 DSNs show the NEW last4 (matches ${NEWPW: -4}) AND the
+#  "clean: no DW2024SecurePass" line printed. If any file still has the old pw,
+#  or a last4 mismatches — STOP and re-check the routes.json entry/destinations.
+# ═════════════════════════════════════════════════════════════════════════════
+
+
+# ─────────────────────────────────────────────────────────────────────────────
+#  STEP 4 — PROD-SIDE MANUAL FAN (ROTATION-PRESTAGE.md step 3b) + pm2 restart
+# ─────────────────────────────────────────────────────────────────────────────
+#  The local fan (Step 3) does NOT touch prod app DSNs. Prod apps read their
+#  DATABASE_URL from pm2 env / their own .env on Kamatera. Rewrite those DSNs
+#  to the NEW pw, then pm2 restart with --update-env so the running procs pick
+#  it up. Keep the OLD-pw rollback one-liner (4R) on hand BEFORE you restart.
+#
+#  PASTE (4a — surface what prod DSNs/apps exist; READ-ONLY, decide scope):
+:
+ssh my-server 'pm2 jlist | node -e "let d=JSON.parse(require(\"fs\").readFileSync(0));for(const p of d){const u=(p.pm2_env&&p.pm2_env.DATABASE_URL)||\"\";if(u.includes(\"dw_admin\"))console.log(p.name, u.replace(/:[^:@]+@/,\":***@\"))}"'
+#  (This lists each pm2 app whose DATABASE_URL uses dw_admin, password masked.
+#   Use the output to confirm exactly which apps need the new pw. Follow the
+#   per-app DSN-rewrite procedure in ROTATION-PRESTAGE.md step 3b — rewrite the
+#   prod-side DATABASE_URL for each, value piped/edited on the box, never in a
+#   ps-visible -c/argv. This runbook intentionally does NOT auto-generate the
+#   per-app sed; do it from the masked list above so you touch only real apps.)
+#
+#  PASTE (4b — after DSNs rewritten on prod, restart with fresh env):
+:
+ssh my-server 'pm2 restart all --update-env && pm2 save'
+#
+#  VERIFY GATE 4 — fleet is online and NOT auth-failing on the new pw.
+#  PASTE (4v):
+:
+echo "--- pm2 status (expect all online, 0 fresh restarts climbing) ---"
+ssh my-server 'pm2 list'
+echo "--- look for FATAL auth / password errors in recent logs ---"
+ssh my-server 'pm2 logs --nostream --lines 40 2>/dev/null | grep -Ei "password authentication failed|FATAL.*dw_admin|role .dw_admin." || echo "no auth failures in tail"'
+#
+#  VERIFY GATE 4:  pm2 list shows all apps 'online' (no crash-loop / climbing
+#  restart counter) AND the log grep prints "no auth failures in tail". If apps
+#  are FATAL-auth crash-looping — ROLL BACK immediately with 4R below.
+#
+#  ── 4R — ROLLBACK ONE-LINER (revert role to the OLD pw apps still expect) ──
+#  The OLD pw lives in /root/.pm2/dump.pm2. Recover it, then re-ALTER the role
+#  back to it (stdin-piped, never -c), then restart. PASTE only on a FATAL:
+#    OLDPW=$(ssh my-server "grep -o 'dw_admin:[^@]*@' /root/.pm2/dump.pm2 | head -1 | sed -E 's/dw_admin:(.*)@/\1/'")
+#    printf "ALTER ROLE dw_admin WITH PASSWORD '%s';\n" "$OLDPW" \
+#      | ssh my-server "sudo -u postgres psql -d postgres -v ON_ERROR_STOP=1 -q -f -"
+#    ssh my-server 'pm2 restart all --update-env'
+#    # then revert local Mac2 the same way and unwind Step 3 (re-fan OLD pw).
+#
+#  ── CLEANUP (run once Step 4 verifies clean) ──
+#  PASTE:
+:
+unset NEWPW
+echo "NEWPW unset. If you used 'set +o history', you may re-enable history now."
+#  Also: delete THIS runbook when done (see footer) — it is secret-adjacent.
+# ═════════════════════════════════════════════════════════════════════════════
+
+
+# ─────────────────────────────────────────────────────────────────────────────
+#  STEP 5 — DO-LAST (stub): secret-strip the ~45 hardcoded refs
+# ─────────────────────────────────────────────────────────────────────────────
+#  ONLY after Steps 2–4 verify clean. Strip the ~45 source/doc refs that still
+#  contain DW2024SecurePass (env-first, no rotation, no deploy).
+#     →  use the `secret-strip` skill  (Skill: secret-strip)  on ~/Projects
+#  Find current refs first:  grep -rl "DW2024SecurePass" ~/Projects
+#  (Not expanded here — this is hygiene, not part of the live rotation.)
+# ─────────────────────────────────────────────────────────────────────────────
+
+
+# ─────────────────────────────────────────────────────────────────────────────
+#  STEP 6 — DO-LAST (stub): clear the compromised flag + remaining open creds
+# ─────────────────────────────────────────────────────────────────────────────
+#  ONLY after 2–5 verify clean. The Kamatera "compromised" status is a
+#  HARDCODED literal — edit it from compromised to clean once rotation is done:
+#     →  ~/cncp-starter/server.js : 3936     out.prod = { status: 'compromised' }
+#  Then address any other still-open creds surfaced during the strip.
+#  (Not expanded — gate behind a fully-verified rotation.)
+# ─────────────────────────────────────────────────────────────────────────────
+
+
+# =============================================================================
+#  WHEN DONE:  rm THIS FILE — do NOT git-commit it.
+#  ----------------------------------------------------------------------------
+#  This .sh is secret-adjacent (it scaffolds a live-credential rotation). The
+#  repo's .gitignore already excludes .env* but does NOT exclude *.sh, so this
+#  file is git-trackable — never `git add` it. After a clean rotation:
+#       rm ~/Projects/secrets-manager/DW-ADMIN-ROTATION-RUNBOOK-2026-06-19.sh
+#  (or move it out of the repo entirely). Prefer rm over commit.
+# =============================================================================
diff --git a/registry.json b/registry.json
index 75c3bdb..1186e92 100644
--- a/registry.json
+++ b/registry.json
@@ -186,14 +186,13 @@
       ]
     },
     "GEMINI_API_KEY": {
-      "digest": "k720:4295091b",
+      "digest": "-mvA:8de08c8a",
       "label": "Google Gemini API Key",
-      "last_updated": "2026-05-02T15:34:58.966Z",
+      "last_updated": "2026-06-12T20:29:58.727Z",
       "validated": true,
       "verify_status": 200,
       "written_to": [
         "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
         "/Users/stevestudio2/Projects/Letsbegin/.env.local",
         "/Users/stevestudio2/Projects/Bertha/kalshi-dash/.env",
         "/Users/stevestudio2/.claude/skills/ai-analyzer/.env",
@@ -750,6 +749,145 @@
         "/Users/stevestudio2/Projects/wallco-ai/.env",
         "/Users/stevestudio2/Projects/animate-museum-posts/.env"
       ]
+    },
+    "WALLCO_AI_BACKUP_20260529_PASSPHRASE": {
+      "digest": "IFSK:805dbb57",
+      "label": "WALLCO_AI_BACKUP_20260529_PASSPHRASE",
+      "last_updated": "2026-05-29T15:19:39.700Z",
+      "validated": false,
+      "verify_status": null,
+      "written_to": [
+        "/Users/stevestudio2/Projects/secrets-manager/.env",
+        "/Users/stevestudio2/Desktop/site-factory.env"
+      ]
+    },
+    "WALLCO_AI_ADMIN_TOKEN": {
+      "digest": "497b:4db9d5d3",
+      "label": "WALLCO_AI_ADMIN_TOKEN",
+      "last_updated": "2026-05-29T15:26:36.538Z",
+      "validated": false,
+      "verify_status": null,
+      "written_to": [
+        "/Users/stevestudio2/Projects/secrets-manager/.env",
+        "/Users/stevestudio2/Desktop/site-factory.env"
+      ]
+    },
+    "GRANT_AUTH_USERNAME": {
+      "digest": "dmin:8c6976e5",
+      "label": "GRANT_AUTH_USERNAME",
+      "last_updated": "2026-06-01T21:01:37.731Z",
+      "validated": false,
+      "verify_status": null,
+      "written_to": [
+        "/Users/stevestudio2/Projects/secrets-manager/.env",
+        "/Users/stevestudio2/Desktop/site-factory.env"
+      ]
+    },
+    "GRANT_AUTH_PASSWORD": {
+      "digest": "4aJh:7405eb02",
+      "label": "GRANT_AUTH_PASSWORD",
+      "last_updated": "2026-06-01T21:01:37.733Z",
+      "validated": false,
+      "verify_status": null,
+      "written_to": [
+        "/Users/stevestudio2/Projects/secrets-manager/.env",
+        "/Users/stevestudio2/Desktop/site-factory.env"
+      ]
+    },
+    "DW_ADMIN_PG_PASSWORD": {
+      "digest": "fWdg:1e3383c0",
+      "label": "DW_ADMIN_PG_PASSWORD",
+      "last_updated": "2026-06-04T05:00:20.392Z",
+      "validated": false,
+      "verify_status": null,
+      "written_to": [
+        "/Users/stevestudio2/Projects/secrets-manager/.env",
+        "/Users/stevestudio2/Desktop/site-factory.env"
+      ]
+    },
+    "KAMATERA_ORIGIN_IP": {
+      "digest": ".125:81cca1f1",
+      "label": "KAMATERA_ORIGIN_IP",
+      "last_updated": "2026-06-11T17:24:46.007Z",
+      "validated": false,
+      "verify_status": null,
+      "written_to": [
+        "/Users/stevestudio2/Projects/secrets-manager/.env"
+      ]
+    },
+    "ANTHROPIC_API_KEY": {
+      "digest": "7AAA:798d801c",
+      "label": "Anthropic API Key",
+      "last_updated": "2026-06-11T17:24:46.281Z",
+      "validated": true,
+      "verify_status": 400,
+      "written_to": [
+        "/Users/stevestudio2/Projects/secrets-manager/.env",
+        "/Users/stevestudio2/Projects/Letsbegin/.env.local",
+        "/Users/stevestudio2/Projects/dear-bubbe-nextjs/.env"
+      ]
+    },
+    "META_ACCESS_TOKEN": {
+      "digest": "c8ZD:f65864d4",
+      "label": "META_ACCESS_TOKEN",
+      "last_updated": "2026-06-15T19:04:39.146Z",
+      "validated": false,
+      "verify_status": null,
+      "written_to": [
+        "/Users/stevestudio2/Projects/secrets-manager/.env",
+        "/Users/stevestudio2/Projects/marketing-command-center/.env"
+      ]
+    },
+    "DW_ADMIN_DB_PASSWORD": {
+      "digest": "22WF:7397bbbe",
+      "label": "DW_ADMIN_DB_PASSWORD",
+      "last_updated": "2026-06-16T16:55:26.256Z",
+      "validated": false,
+      "verify_status": null,
+      "written_to": [
+        "/Users/stevestudio2/Projects/secrets-manager/.env"
+      ]
+    },
+    "SHOPIFY_DRAFT_TOKEN": {
+      "digest": "a43b:50f4d28f",
+      "label": "Shopify Admin token (full access incl. write_draft_orders) — DW mural PDP custom-size checkout",
+      "last_updated": "2026-06-18T15:12:46.754Z",
+      "validated": false,
+      "verify_status": null,
+      "written_to": [
+        "/Users/stevestudio2/Projects/secrets-manager/.env",
+        "/Users/stevestudio2/Projects/designerwallcoverings/.env"
+      ]
+    },
+    "SLACK_BOT_TOKEN": {
+      "digest": "OlqR:20464325",
+      "label": "SLACK_BOT_TOKEN",
+      "last_updated": "2026-06-21T21:24:38.100Z",
+      "validated": false,
+      "verify_status": null,
+      "written_to": [
+        "/Users/stevestudio2/Projects/secrets-manager/.env"
+      ]
+    },
+    "SLACK_TEAM_ID": {
+      "digest": "1G7J:db7ace49",
+      "label": "SLACK_TEAM_ID",
+      "last_updated": "2026-06-21T21:24:38.137Z",
+      "validated": false,
+      "verify_status": null,
+      "written_to": [
+        "/Users/stevestudio2/Projects/secrets-manager/.env"
+      ]
+    },
+    "SLACK_REPORTS_CHANNEL": {
+      "digest": "ADND:80e3aeab",
+      "label": "SLACK_REPORTS_CHANNEL",
+      "last_updated": "2026-06-21T23:43:19.588Z",
+      "validated": false,
+      "verify_status": null,
+      "written_to": [
+        "/Users/stevestudio2/Projects/secrets-manager/.env"
+      ]
     }
   }
 }
\ No newline at end of file
diff --git a/registry.json.bak.20260507-122845 b/registry.json.bak.20260507-122845
deleted file mode 100644
index 9aef80a..0000000
--- a/registry.json.bak.20260507-122845
+++ /dev/null
@@ -1,534 +0,0 @@
-{
-  "_comment": "Registry of every secret. Values themselves never appear here — only digests + destinations. Updated by cli.js.",
-  "secrets": {
-    "DPLA_API_KEY": {
-      "digest": "ecd5:7d670175",
-      "label": "Digital Public Library of America API Key",
-      "last_updated": "2026-04-30T18:23:59.835Z",
-      "validated": true,
-      "verify_status": 200,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/Projects/wholivedthere/.env",
-        "/Users/stevestudio2/Projects/claimmyaddress/.env",
-        "/Users/stevestudio2/Projects/bubbesblock/.env",
-        "/Users/stevestudio2/.claude/skills/la-research-agent/.env"
-      ]
-    },
-    "GODADDY_API_KEY": {
-      "digest": "acsF:96974d0c",
-      "label": "GoDaddy API Key",
-      "last_updated": "2026-04-30T18:50:35.250Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/.claude.json#mcpServers.domain-suite.env.GODADDY_API_KEY"
-      ]
-    },
-    "GODADDY_API_SECRET": {
-      "digest": "Vnej:31492271",
-      "label": "GoDaddy API Secret",
-      "last_updated": "2026-04-30T18:50:40.119Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/.claude.json#mcpServers.domain-suite.env.GODADDY_API_SECRET"
-      ]
-    },
-    "BROWSERBASE_API_KEY": {
-      "digest": "lOB8:e5e8c875",
-      "label": "Browserbase API Key",
-      "last_updated": "2026-04-30T18:50:42.047Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/.claude/skills/browserbase/.env"
-      ]
-    },
-    "BROWSERBASE_PROJECT_ID": {
-      "digest": "c840:29be6dca",
-      "label": "Browserbase Project ID",
-      "last_updated": "2026-04-30T18:50:43.778Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/.claude/skills/browserbase/.env"
-      ]
-    },
-    "CLOUDFLARE_API_TOKEN": {
-      "digest": "lYcL:951aa6d7",
-      "label": "Cloudflare API Token",
-      "last_updated": "2026-04-30T18:50:52.016Z",
-      "validated": true,
-      "verify_status": 200,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/Projects/site-factory/.env",
-        "/Users/stevestudio2/.claude/skills/cloudflare-manager/.env",
-        "/Users/stevestudio2/.claude/skills/setup-domains/.env",
-        "/Users/stevestudio2/.claude/skills/domain-setup/.env"
-      ]
-    },
-    "ANTHROPIC_API_KEY": {
-      "digest": "7AAA:798d801c",
-      "label": "Anthropic API Key",
-      "last_updated": "2026-04-30T18:52:00.895Z",
-      "validated": true,
-      "verify_status": 400,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/Projects/Letsbegin/.env.local",
-        "/Users/stevestudio2/Projects/dear-bubbe-nextjs/.env"
-      ]
-    },
-    "STRIPE_SECRET_KEY": {
-      "digest": "8LQ0:fe981600",
-      "label": "Stripe Secret Key",
-      "last_updated": "2026-05-01T06:23:30.081Z",
-      "validated": true,
-      "verify_status": 200,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/Projects/site-factory/.env",
-        "/Users/stevestudio2/Projects/site-factory/sites/wholivedthere.com/app/.env.local",
-        "/Users/stevestudio2/Projects/site-factory/sites/bubbesblock.com/app/.env.local",
-        "/Users/stevestudio2/Projects/site-factory/sites/claimmyaddress.com/app/.env.local",
-        "/Users/stevestudio2/Projects/lawyer-directory-builder/.env",
-        "/Users/stevestudio2/Projects/professional-directory/.env"
-      ]
-    },
-    "STRIPE_PUBLISHABLE_KEY": {
-      "digest": "wzmV:944477ab",
-      "label": "Stripe Publishable Key",
-      "last_updated": "2026-05-01T06:23:48.697Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/Projects/site-factory/.env",
-        "/Users/stevestudio2/Projects/site-factory/sites/wholivedthere.com/app/.env.local",
-        "/Users/stevestudio2/Projects/site-factory/sites/bubbesblock.com/app/.env.local",
-        "/Users/stevestudio2/Projects/site-factory/sites/claimmyaddress.com/app/.env.local",
-        "/Users/stevestudio2/Projects/lawyer-directory-builder/.env",
-        "/Users/stevestudio2/Projects/professional-directory/.env"
-      ]
-    },
-    "ELEVENLABS_API_KEY": {
-      "digest": "365a:7f1a7de6",
-      "label": "ElevenLabs Voice Synthesis API Key",
-      "last_updated": "2026-05-06T21:37:52.553Z",
-      "validated": true,
-      "verify_status": 200,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/Projects/dear-bubbe-nextjs/.env.local",
-        "ssh:root@45.61.58.125:/root/Projects/dear-bubbe-nextjs/.env.local"
-      ]
-    },
-    "OPENAI_API_KEY": {
-      "digest": "FYwA:8ad69c60",
-      "label": "OpenAI API Key",
-      "last_updated": "2026-05-01T05:54:19.819Z",
-      "validated": true,
-      "verify_status": 200,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/Projects/dear-bubbe-nextjs/.env.local",
-        "ssh:root@45.61.58.125:/root/Projects/dear-bubbe-nextjs/.env.local"
-      ]
-    },
-    "LAWYER_DIRECTORY_ADMIN_PASSWORD": {
-      "digest": "drfo:4d084bc5",
-      "label": "LAWYER_DIRECTORY_ADMIN_PASSWORD",
-      "last_updated": "2026-05-01T05:55:55.887Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "ADMIN_KEY": {
-      "digest": "ncuo:0ef5973a",
-      "label": "ADMIN_KEY",
-      "last_updated": "2026-05-02T06:23:40.535Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "STRIPE_TIER_WEBHOOK_SECRET": {
-      "digest": "Styd:882d3909",
-      "label": "Stripe Tier-Subscription Webhook Signing Secret (Counsel & Bar Lawyer Pro $29/mo)",
-      "last_updated": "2026-05-02T14:34:01.676Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/Projects/lawyer-directory-builder/.env"
-      ]
-    },
-    "STRIPE_PRICE_LAWYER_PRO_MONTHLY": {
-      "digest": "cn1m:766a0822",
-      "label": "Stripe Price ID (public): Counsel & Bar Lawyer Pro $29/mo recurring",
-      "last_updated": "2026-05-02T15:27:15.670Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/Projects/lawyer-directory-builder/.env"
-      ]
-    },
-    "GEMINI_API_KEY": {
-      "digest": "k720:4295091b",
-      "label": "Google Gemini API Key",
-      "last_updated": "2026-05-02T15:34:58.966Z",
-      "validated": true,
-      "verify_status": 200,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/Projects/Letsbegin/.env.local",
-        "/Users/stevestudio2/Projects/Bertha/kalshi-dash/.env",
-        "/Users/stevestudio2/.claude/skills/ai-analyzer/.env",
-        "/Users/stevestudio2/.claude/skills/enrich-ai-tags/.env"
-      ]
-    },
-    "CLOUDFLARE_ACCOUNT_ID": {
-      "digest": "b1c3:2beb4f25",
-      "label": "CLOUDFLARE_ACCOUNT_ID",
-      "last_updated": "2026-05-02T15:49:51.136Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "MOONSHOT_API_KEY": {
-      "digest": "XiYg:b579d15d",
-      "label": "Moonshot AI / Kimi K2 API Key",
-      "last_updated": "2026-05-03T18:02:00.806Z",
-      "validated": true,
-      "verify_status": 200,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/Projects/claude-codex-meeting/.env",
-        "/Users/stevestudio2/.claude/skills/claude-codex/.env"
-      ]
-    },
-    "SMB_BUILDER_ADMIN_TOKEN": {
-      "digest": "LW2g:83fe2ef1",
-      "label": "SMB_BUILDER_ADMIN_TOKEN",
-      "last_updated": "2026-05-04T06:20:37.081Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "FOURSQUARE_PORTAL_PASSWORD": {
-      "digest": "B8Lw:ef931f63",
-      "label": "FOURSQUARE_PORTAL_PASSWORD",
-      "last_updated": "2026-05-05T02:31:28.289Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "BRAVE_SEARCH_API_KEY": {
-      "digest": "RaPY:700093d6",
-      "label": "Brave Search API (Web)",
-      "last_updated": "2026-05-05T16:35:28.194Z",
-      "validated": true,
-      "verify_status": 200,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/Projects/_ventura-recon/.env"
-      ]
-    },
-    "PURELYMAIL_API_TOKEN": {
-      "digest": "8941:4aad735a",
-      "label": "PurelyMail API Token",
-      "last_updated": "2026-05-05T19:32:32.949Z",
-      "validated": true,
-      "verify_status": 200,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/Projects/site-factory/.env",
-        "/Users/stevestudio2/Projects/ventura-corridor/.env",
-        "/Users/stevestudio2/Projects/purelymail-mcp/.env",
-        "/Users/stevestudio2/.claude.json#mcpServers.purelymail.env.PURELYMAIL_API_TOKEN"
-      ]
-    },
-    "GRANT_APP_DB_PASSWORD": {
-      "digest": "XnAD:4ab19dd0",
-      "label": "GRANT_APP_DB_PASSWORD",
-      "last_updated": "2026-05-06T00:40:58.290Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "FREDDY_APP_DB_PASSWORD": {
-      "digest": "HXFr:1a5bec1b",
-      "label": "FREDDY_APP_DB_PASSWORD",
-      "last_updated": "2026-05-06T01:16:44.236Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "PATTY_APP_DB_PASSWORD": {
-      "digest": "kFg8:5dd746ce",
-      "label": "PATTY_APP_DB_PASSWORD",
-      "last_updated": "2026-05-06T01:18:38.007Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "POPPY_SESSION_SECRET": {
-      "digest": "d5ae:776b130c",
-      "label": "POPPY_SESSION_SECRET",
-      "last_updated": "2026-05-06T02:07:11.092Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "LINKEDIN_CLIENT_ID": {
-      "digest": "brc3:0fc72fb0",
-      "label": "LinkedIn OAuth Client ID — \"For Claude - 5-6-26\" app, bound to Designer Wallcoverings Page",
-      "last_updated": "2026-05-06T16:58:45.348Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/Projects/NationalPaperHangers/.env"
-      ]
-    },
-    "LINKEDIN_CLIENT_SECRET": {
-      "digest": "aA==:b14f96fb",
-      "label": "LinkedIn OAuth Client Secret — \"For Claude - 5-6-26\" app, bound to Designer Wallcoverings Page",
-      "last_updated": "2026-05-06T16:58:45.350Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env",
-        "/Users/stevestudio2/Projects/NationalPaperHangers/.env"
-      ]
-    },
-    "INFO_VENTURACLAW_PASSWORD": {
-      "digest": "gclo:f811f350",
-      "label": "INFO_VENTURACLAW_PASSWORD",
-      "last_updated": "2026-05-06T17:11:24.980Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "INFO_VENTURACLAW_COM_PASSWORD": {
-      "digest": "yClk:b1af4d98",
-      "label": "INFO_VENTURACLAW_COM_PASSWORD",
-      "last_updated": "2026-05-06T18:06:43.875Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "VENTURACLAW_ADMIN_PASSWORD": {
-      "digest": "zJdw:ea12fb20",
-      "label": "VENTURACLAW_ADMIN_PASSWORD",
-      "last_updated": "2026-05-06T19:14:22.955Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "VENTURACLAW_DEMO_PASSWORD": {
-      "digest": "jm9n:d2d935cb",
-      "label": "VENTURACLAW_DEMO_PASSWORD",
-      "last_updated": "2026-05-06T19:14:22.956Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "INFO_NATIONALPAPERHANGERS_COM_PASSWORD": {
-      "digest": "nfo!:3e438ad2",
-      "label": "INFO_NATIONALPAPERHANGERS_COM_PASSWORD",
-      "last_updated": "2026-05-06T20:17:22.985Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "STRIPE_NPH_WEBHOOK_SECRET": {
-      "digest": "xF8E:6c227cc4",
-      "label": "STRIPE_NPH_WEBHOOK_SECRET",
-      "last_updated": "2026-05-06T21:47:14.948Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "STRIPE_PRICE_PRO_MONTH": {
-      "digest": "hDvn:eff9d560",
-      "label": "STRIPE_PRICE_PRO_MONTH",
-      "last_updated": "2026-05-06T21:47:14.981Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "STRIPE_PRICE_PRO_YEAR": {
-      "digest": "D2ll:52ba2714",
-      "label": "STRIPE_PRICE_PRO_YEAR",
-      "last_updated": "2026-05-06T21:47:15.013Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "STRIPE_PRICE_SIGNATURE_MONTH": {
-      "digest": "KWdO:398e0346",
-      "label": "STRIPE_PRICE_SIGNATURE_MONTH",
-      "last_updated": "2026-05-06T21:47:15.046Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "STRIPE_PRICE_SIGNATURE_YEAR": {
-      "digest": "raja:4aeb380d",
-      "label": "STRIPE_PRICE_SIGNATURE_YEAR",
-      "last_updated": "2026-05-06T21:47:15.079Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "STRIPE_PRICE_ENTERPRISE_MONTH": {
-      "digest": "g84X:0b754600",
-      "label": "STRIPE_PRICE_ENTERPRISE_MONTH",
-      "last_updated": "2026-05-06T21:47:15.112Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "VCL_KAMATERA_PG_PASSWORD": {
-      "digest": "f4de:73ff66aa",
-      "label": "VCL_KAMATERA_PG_PASSWORD",
-      "last_updated": "2026-05-06T23:25:09.149Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "STRIPE_VCL_WEBHOOK_SECRET": {
-      "digest": "L8sU:4cfc2f5f",
-      "label": "STRIPE_VCL_WEBHOOK_SECRET",
-      "last_updated": "2026-05-06T23:38:56.170Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "STRIPE_PRICE_VCL_STARTER_MONTH": {
-      "digest": "53YX:d741657a",
-      "label": "STRIPE_PRICE_VCL_STARTER_MONTH",
-      "last_updated": "2026-05-06T23:38:56.203Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "STRIPE_PRICE_VCL_STANDARD_MONTH": {
-      "digest": "BEPC:1c4b822e",
-      "label": "STRIPE_PRICE_VCL_STANDARD_MONTH",
-      "last_updated": "2026-05-06T23:38:56.237Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    },
-    "STRIPE_PRICE_VCL_PREMIER_MONTH": {
-      "digest": "h0Es:7a66ea0d",
-      "label": "STRIPE_PRICE_VCL_PREMIER_MONTH",
-      "last_updated": "2026-05-06T23:38:56.270Z",
-      "validated": false,
-      "verify_status": null,
-      "written_to": [
-        "/Users/stevestudio2/Projects/secrets-manager/.env",
-        "/Users/stevestudio2/Desktop/site-factory.env"
-      ]
-    }
-  }
-}
\ No newline at end of file
diff --git a/routes.json.bak-1779124119 b/routes.json.bak-1779124119
deleted file mode 100644
index 0b64e60..0000000
--- a/routes.json.bak-1779124119
+++ /dev/null
@@ -1,1234 +0,0 @@
-{
-  "_comment": "Per-secret routing table. Each entry: master + extra destinations. Master is implicit at ~/Projects/secrets-manager/.env + ~/Desktop/site-factory.env.",
-  "services": {
-    "GOOGLE_PLACES_API_KEY": {
-      "label": "Google Places API Key",
-      "verify": {
-        "method": "GET",
-        "url": "https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=Tito%27s+Tacos+Culver+City&inputtype=textquery&fields=place_id&key=__VALUE__",
-        "auth": "querystring"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/restaurant-directory/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/professional-directory/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/animals/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/lawyer-directory-builder/.env"
-        }
-      ]
-    },
-    "BRAVE_SEARCH_API_KEY": {
-      "label": "Brave Search API (Web)",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.search.brave.com/res/v1/web/search?q=test&count=1",
-        "auth": "header",
-        "headerName": "X-Subscription-Token"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/_ventura-recon/.env"
-        }
-      ]
-    },
-    "MOONSHOT_API_KEY": {
-      "label": "Moonshot AI / Kimi K2 API Key",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.moonshot.ai/v1/models",
-        "auth": "bearer"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/claude-codex-meeting/.env"
-        },
-        {
-          "type": "skill",
-          "name": "claude-codex"
-        }
-      ]
-    },
-    "CLOUDFLARE_API_TOKEN": {
-      "label": "Cloudflare API Token",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.cloudflare.com/client/v4/user/tokens/verify",
-        "auth": "bearer"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/site-factory/.env"
-        },
-        {
-          "type": "skill",
-          "name": "cloudflare-manager"
-        },
-        {
-          "type": "skill",
-          "name": "setup-domains"
-        },
-        {
-          "type": "skill",
-          "name": "domain-setup"
-        }
-      ]
-    },
-    "STRIPE_SECRET_KEY": {
-      "label": "Stripe Secret Key",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.stripe.com/v1/balance",
-        "auth": "basic-sk"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/site-factory/.env"
-        },
-        {
-          "type": "site_local",
-          "domains": [
-            "wholivedthere.com",
-            "bubbesblock.com",
-            "claimmyaddress.com"
-          ]
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/lawyer-directory-builder/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/professional-directory/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/NationalPaperHangers/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/NationalPaperHangers/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/ventura-claw-leads/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/ventura-claw-leads/.env"
-        }
-      ]
-    },
-    "STRIPE_PUBLISHABLE_KEY": {
-      "label": "Stripe Publishable Key",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/site-factory/.env"
-        },
-        {
-          "type": "site_local",
-          "domains": [
-            "wholivedthere.com",
-            "bubbesblock.com",
-            "claimmyaddress.com"
-          ]
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/lawyer-directory-builder/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/professional-directory/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/NationalPaperHangers/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/NationalPaperHangers/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/ventura-claw-leads/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/ventura-claw-leads/.env"
-        }
-      ]
-    },
-    "STRIPE_WEBHOOK_SECRET": {
-      "label": "Stripe Webhook Signing Secret",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/site-factory/.env"
-        },
-        {
-          "type": "site_local",
-          "domains": [
-            "wholivedthere.com",
-            "bubbesblock.com",
-            "claimmyaddress.com"
-          ]
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/lawyer-directory-builder/.env"
-        }
-      ]
-    },
-    "STRIPE_TIER_WEBHOOK_SECRET": {
-      "label": "Stripe Tier-Subscription Webhook Signing Secret (Counsel & Bar Lawyer Pro $29/mo)",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/lawyer-directory-builder/.env"
-        }
-      ]
-    },
-    "STRIPE_PRICE_LAWYER_PRO_MONTHLY": {
-      "label": "Stripe Price ID (public): Counsel & Bar Lawyer Pro $29/mo recurring",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/lawyer-directory-builder/.env"
-        }
-      ]
-    },
-    "STRIPE_VCL_WEBHOOK_SECRET": {
-      "label": "Stripe webhook signing secret — VCL endpoint we_1TUF1Y63uNmiRsMbNr1kLu52",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/ventura-claw-leads/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/ventura-claw-leads/.env"
-        }
-      ]
-    },
-    "STRIPE_PRICE_VCL_STARTER_MONTH": {
-      "label": "Stripe Price ID — VCL Starter $49/mo",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/ventura-claw-leads/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/ventura-claw-leads/.env"
-        }
-      ]
-    },
-    "STRIPE_PRICE_VCL_STANDARD_MONTH": {
-      "label": "Stripe Price ID — VCL Standard $99/mo",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/ventura-claw-leads/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/ventura-claw-leads/.env"
-        }
-      ]
-    },
-    "STRIPE_PRICE_VCL_PREMIER_MONTH": {
-      "label": "Stripe Price ID — VCL Premier $199/mo",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/ventura-claw-leads/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/ventura-claw-leads/.env"
-        }
-      ]
-    },
-    "HEYGEN_API_KEY": {
-      "label": "HeyGen API key — talking-head avatar video render (used by session-debrief skill)",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.heygen.com/v1/voice.list",
-        "auth": "header",
-        "headerName": "x-api-key"
-      },
-      "destinations": [
-        {
-          "type": "skill",
-          "path": "~/.claude/skills/session-debrief/.env"
-        },
-        {
-          "type": "skill",
-          "path": "~/.claude/skills/reviewed-demo-video/.env"
-        }
-      ]
-    },
-    "INFO_VENTURACLAW_COM_PASSWORD": {
-      "label": "Purelymail mailbox password — info@venturaclaw.com (used by Ventura Claw Leads + the existing ventura-claw app)",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/ventura-claw-leads/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/ventura-claw-leads/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/ventura-claw/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/ventura-claw/.env"
-        }
-      ]
-    },
-    "INFO_NATIONALPAPERHANGERS_COM_PASSWORD": {
-      "label": "Purelymail mailbox password — info@nationalpaperhangers.com",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/NationalPaperHangers/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/NationalPaperHangers/.env"
-        }
-      ]
-    },
-    "STRIPE_NPH_WEBHOOK_SECRET": {
-      "label": "Stripe Webhook Signing Secret — NPH endpoint we_1TUDHV63uNmiRsMbRJea7EqU",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/NationalPaperHangers/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/NationalPaperHangers/.env"
-        }
-      ]
-    },
-    "STRIPE_PRICE_PRO_MONTH": {
-      "label": "Stripe Price ID — NPH Pro $39/mo",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/NationalPaperHangers/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/NationalPaperHangers/.env"
-        }
-      ]
-    },
-    "STRIPE_PRICE_PRO_YEAR": {
-      "label": "Stripe Price ID — NPH Pro $399/yr",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/NationalPaperHangers/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/NationalPaperHangers/.env"
-        }
-      ]
-    },
-    "STRIPE_PRICE_SIGNATURE_MONTH": {
-      "label": "Stripe Price ID — NPH Signature $149/mo",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/NationalPaperHangers/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/NationalPaperHangers/.env"
-        }
-      ]
-    },
-    "STRIPE_PRICE_SIGNATURE_YEAR": {
-      "label": "Stripe Price ID — NPH Signature $1500/yr",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/NationalPaperHangers/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/NationalPaperHangers/.env"
-        }
-      ]
-    },
-    "STRIPE_PRICE_ENTERPRISE_MONTH": {
-      "label": "Stripe Price ID — NPH Enterprise $399/mo",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/NationalPaperHangers/.env"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/NationalPaperHangers/.env"
-        }
-      ]
-    },
-    "VERCEL_TOKEN": {
-      "label": "Vercel API Token",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.vercel.com/v2/user",
-        "auth": "bearer"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/site-factory/.env"
-        }
-      ]
-    },
-    "PURELYMAIL_API_TOKEN": {
-      "label": "PurelyMail API Token",
-      "verify": {
-        "method": "POST",
-        "url": "https://purelymail.com/api/v0/listDomains",
-        "auth": "header",
-        "headerName": "Purelymail-Api-Token",
-        "body": "{}",
-        "bodyMustContain": "^\\s*\\{\\s*\"type\"\\s*:\\s*\"success\"",
-        "bodyMustNotContain": "\"type\"\\s*:\\s*\"error\""
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/site-factory/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/ventura-corridor/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/purelymail-mcp/.env"
-        },
-        {
-          "type": "mcp",
-          "server": "purelymail",
-          "key": "PURELYMAIL_API_TOKEN"
-        }
-      ]
-    },
-    "GODADDY_API_KEY": {
-      "label": "GoDaddy API Key",
-      "destinations": [
-        {
-          "type": "mcp",
-          "server": "domain-suite",
-          "key": "GODADDY_API_KEY"
-        }
-      ]
-    },
-    "GODADDY_API_SECRET": {
-      "label": "GoDaddy API Secret",
-      "destinations": [
-        {
-          "type": "mcp",
-          "server": "domain-suite",
-          "key": "GODADDY_API_SECRET"
-        }
-      ]
-    },
-    "BROWSERBASE_API_KEY": {
-      "label": "Browserbase API Key",
-      "destinations": [
-        {
-          "type": "skill",
-          "name": "browserbase"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/Designer-Wallcoverings/DW-Websites/abrams-report/.env"
-        },
-        {
-          "type": "project",
-          "path": "/Users/stevestudio2/Projects/abrams-report/.env"
-        }
-      ]
-    },
-    "BROWSERBASE_PROJECT_ID": {
-      "label": "Browserbase Project ID",
-      "destinations": [
-        {
-          "type": "skill",
-          "name": "browserbase"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/Designer-Wallcoverings/DW-Websites/abrams-report/.env"
-        },
-        {
-          "type": "project",
-          "path": "/Users/stevestudio2/Projects/abrams-report/.env"
-        }
-      ]
-    },
-    "ANTHROPIC_API_KEY": {
-      "label": "Anthropic API Key",
-      "verify": {
-        "method": "POST",
-        "url": "https://api.anthropic.com/v1/messages",
-        "auth": "x-api-key",
-        "body": "{\"model\":\"claude-haiku-4-5\",\"max_tokens\":1,\"messages\":[{\"role\":\"user\",\"content\":\"hi\"}]}"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/Letsbegin/.env.local"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/dear-bubbe-nextjs/.env"
-        }
-      ]
-    },
-    "OPENAI_API_KEY": {
-      "label": "OpenAI API Key",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.openai.com/v1/models",
-        "auth": "bearer"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/dear-bubbe-nextjs/.env.local"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/dear-bubbe-nextjs/.env.local"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/animals/.env"
-        }
-      ]
-    },
-    "GEMINI_API_KEY": {
-      "label": "Google Gemini API Key",
-      "verify": {
-        "method": "GET",
-        "url": "https://generativelanguage.googleapis.com/v1beta/models?key={value}",
-        "auth": "url"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/Letsbegin/.env.local"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/Bertha/kalshi-dash/.env"
-        },
-        {
-          "type": "skill",
-          "name": "ai-analyzer"
-        },
-        {
-          "type": "skill",
-          "name": "enrich-ai-tags"
-        }
-      ]
-    },
-    "GOOGLE_GENERATIVE_AI_API_KEY": {
-      "label": "Google Generative AI API Key (alias of GEMINI_API_KEY)",
-      "verify": {
-        "method": "GET",
-        "url": "https://generativelanguage.googleapis.com/v1beta/models?key={value}",
-        "auth": "url"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/Letsbegin/.env.local"
-        }
-      ]
-    },
-    "SHOPIFY_ADMIN_TOKEN": {
-      "label": "Shopify Admin API Access Token",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "/Users/stevestudio2/Projects/Designer-Wallcoverings/shopify/.env"
-        },
-        {
-          "type": "project",
-          "path": "/Users/stevestudio2/Projects/Designer-Wallcoverings/.env"
-        },
-        {
-          "type": "project",
-          "path": "/Users/stevestudio2/Projects/Designer-Wallcoverings/DW-Websites/LosAngelesFabrics/.env"
-        }
-      ]
-    },
-    "SHOPIFY_API_KEY": {
-      "label": "Shopify API Key",
-      "destinations": []
-    },
-    "RESEND_API_KEY": {
-      "label": "Resend API Key",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.resend.com/domains",
-        "auth": "bearer"
-      },
-      "destinations": []
-    },
-    "STRIPE_RESTRICTED_KEY": {
-      "label": "Stripe Restricted Key (site-factory)",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.stripe.com/v1/balance",
-        "auth": "basic-sk"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/site-factory/.env"
-        }
-      ]
-    },
-    "DPLA_API_KEY": {
-      "label": "Digital Public Library of America API Key",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.dp.la/v2/items?api_key={value}&q=test&page_size=1",
-        "auth": "url"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/wholivedthere/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/claimmyaddress/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/bubbesblock/.env"
-        },
-        {
-          "type": "skill",
-          "name": "la-research-agent"
-        }
-      ]
-    },
-    "GEMINI_API_KEY_RALPH": {
-      "label": "Google Gemini API Key (dedicated to Letsbegin Ralph runner)",
-      "verify": {
-        "method": "GET",
-        "url": "https://generativelanguage.googleapis.com/v1beta/models?key={value}",
-        "auth": "url"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/Letsbegin/.env.local"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/Letsbegin/.env.local"
-        }
-      ]
-    },
-    "ELEVENLABS_API_KEY": {
-      "label": "ElevenLabs Voice Synthesis API Key",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.elevenlabs.io/v1/user",
-        "auth": "header",
-        "headerName": "xi-api-key"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/dear-bubbe-nextjs/.env.local"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/dear-bubbe-nextjs/.env.local"
-        }
-      ]
-    },
-    "NEXT_PUBLIC_GOOGLE_MAPS_API_KEY": {
-      "label": "Google Maps JavaScript API Key (browser-exposed; needs HTTP-referrer restrictions)",
-      "verify": {
-        "method": "GET",
-        "url": "https://maps.googleapis.com/maps/api/streetview/metadata?location=34.05,-118.25&key={value}",
-        "success": "json.status === \"OK\" || json.status === \"ZERO_RESULTS\"",
-        "note": "Validates by hitting Street View Static API metadata endpoint; OK or ZERO_RESULTS both prove the key is enabled and unexpired."
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/stayclaim/.env.local"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/wholivedthere/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/claimmyaddress/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/bubbesblock/.env"
-        },
-        {
-          "type": "remote",
-          "host": "root@45.61.58.125",
-          "path": "/root/public-projects/pastdoor/.env.local"
-        },
-        {
-          "type": "remote",
-          "host": "root@45.61.58.125",
-          "path": "/root/public-projects/pastdoor/.env.production"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/jill-website/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/ventura-bus-3d/.env",
-          "alias": "GOOGLE_MAPS_API_KEY"
-        }
-      ]
-    },
-    "LINKEDIN_CLIENT_ID": {
-      "label": "LinkedIn OAuth Client ID — \"For Claude - 5-6-26\" app, bound to Designer Wallcoverings Page",
-      "_note": "No verify endpoint — LinkedIn requires the ID+SECRET pair to validate, and the CLI verifies one key at a time. Manual probe via POST /oauth/v2/accessToken with a fake code expects 'invalid_request: authorization code not found' = creds OK.",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/NationalPaperHangers/.env"
-        },
-        {
-          "type": "remote",
-          "host": "root@45.61.58.125",
-          "path": "/root/Projects/NationalPaperHangers/.env"
-        }
-      ]
-    },
-    "LINKEDIN_CLIENT_SECRET": {
-      "label": "LinkedIn OAuth Client Secret — \"For Claude - 5-6-26\" app, bound to Designer Wallcoverings Page",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/NationalPaperHangers/.env"
-        },
-        {
-          "type": "remote",
-          "host": "root@45.61.58.125",
-          "path": "/root/Projects/NationalPaperHangers/.env"
-        }
-      ]
-    },
-    "NPH_GOOGLE_OAUTH_CLIENT_ID": {
-      "label": "Google OAuth Client ID — buyer sign-in on National Paper Hangers",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/NationalPaperHangers/.env"
-        },
-        {
-          "type": "remote",
-          "host": "root@45.61.58.125",
-          "path": "/root/Projects/NationalPaperHangers/.env"
-        }
-      ]
-    },
-    "NPH_GOOGLE_OAUTH_CLIENT_SECRET": {
-      "label": "Google OAuth Client Secret — buyer sign-in on National Paper Hangers",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/NationalPaperHangers/.env"
-        },
-        {
-          "type": "remote",
-          "host": "root@45.61.58.125",
-          "path": "/root/Projects/NationalPaperHangers/.env"
-        }
-      ]
-    },
-    "GEORGE_AUTH": {
-      "label": "George Gmail Basic Auth (DW microsite leads)",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/1800swallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/1890swallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/1900swallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/1920swallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/1930swallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/1940swallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/1950swallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/1960swallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/1970swallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/1980swallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/agedwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/apartmentwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/architecturalwallcoverings/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/blockprintedwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/contractwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/corkwallcovering/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/embroideredwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/fabricwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/glitterwalls/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/greenwallcoverings/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/handcraftedwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/healthcarewallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/hospitalitywallcoverings/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/hospitalitywallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/hotelwallcoverings/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/jutewallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/linenwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/madagascarwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/metallicwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/micawallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/museumwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/mylarwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/naturalwallcoverings/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/pastelwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/raffiawallcoverings/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/raffiawalls/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/recycledwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/restaurantwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/restorationwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/retrowalls/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/saloonwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/screenprintedwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/selfadhesivewallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/silkwallcoverings/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/silkwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/silverleafwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/stringwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/suedewallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/textilewallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/vinylwallpaper/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/wallpapersback/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/wallsandfabrics/.env"
-        }
-      ]
-    }
-  },
-  "leak_patterns": [
-    {
-      "name": "stripe-live-secret",
-      "regex": "sk_live_[A-Za-z0-9]{20,}"
-    },
-    {
-      "name": "purelymail-token",
-      "regex": "PURELYMAIL_API_TOKEN\\s*=\\s*[A-Za-z0-9_-]{20,}"
-    },
-    {
-      "name": "stripe-test-secret",
-      "regex": "sk_test_[A-Za-z0-9]{20,}"
-    },
-    {
-      "name": "stripe-publishable",
-      "regex": "pk_live_[A-Za-z0-9]{20,}"
-    },
-    {
-      "name": "browserbase",
-      "regex": "bb_live_[A-Za-z0-9]+"
-    },
-    {
-      "name": "google-api-key",
-      "regex": "AIza[0-9A-Za-z_-]{35}"
-    },
-    {
-      "name": "google-oauth-access",
-      "regex": "ya29\\.[A-Za-z0-9_-]{20,}"
-    },
-    {
-      "name": "github-pat",
-      "regex": "ghp_[A-Za-z0-9]{36}"
-    },
-    {
-      "name": "github-fine-grained",
-      "regex": "github_pat_[A-Za-z0-9_]{60,}"
-    },
-    {
-      "name": "slack-bot",
-      "regex": "xox[baprs]-[A-Za-z0-9-]{10,}"
-    },
-    {
-      "name": "openai-key",
-      "regex": "sk-[A-Za-z0-9]{40,}"
-    },
-    {
-      "name": "anthropic-key",
-      "regex": "sk-ant-[A-Za-z0-9_-]{50,}"
-    },
-    {
-      "name": "cf-token-40hex",
-      "regex": "(?:cloudflare|cf_token|dns_cloudflare_api_token)[^A-Za-z0-9]+([A-Za-z0-9_-]{40})"
-    }
-  ],
-  "CLOUDFLARE_ACCOUNT_ID": [
-    "/Users/stevestudio2/.claude/skills/domain-check/.env",
-    "/Users/stevestudio2/.claude/skills/domain-dns-setup/.env",
-    "/Users/stevestudio2/.claude/skills/domain-email-setup/.env",
-    "/Users/stevestudio2/.claude/skills/domain-full-setup/.env",
-    "/Users/stevestudio2/.claude/skills/domain-register/.env",
-    "/Users/stevestudio2/.claude/skills/domain-setup/.env",
-    "/Users/stevestudio2/.claude/skills/setup-domains/.env"
-  ],
-  "SMB_BUILDER_ADMIN_TOKEN": {
-    "destinations": [
-      {
-        "type": "env_file",
-        "path": "/Users/stevestudio2/Projects/small-business-builder/.env",
-        "key": "ADMIN_TOKEN"
-      }
-    ]
-  },
-  "SHOPIFY_ORDERS_TOKEN": {
-    "label": "Shopify Admin token (orders+products scope, weekend-report1-1 Partner app)",
-    "destinations": [
-      {
-        "type": "skill",
-        "path": "/Users/stevestudio2/.claude/skills/weekend-csv-products/.env"
-      }
-    ]
-  },
-  "SPOONFLOWER_EMAIL": {
-    "env_files": [
-      "/Users/stevestudio2/Projects/resize-it/.env",
-      "/Users/stevestudio2/Projects/wallco-ai/.env"
-    ]
-  },
-  "SPOONFLOWER_PASSWORD": {
-    "env_files": [
-      "/Users/stevestudio2/Projects/resize-it/.env",
-      "/Users/stevestudio2/Projects/wallco-ai/.env"
-    ]
-  },
-  "GOOGLE_DRIVE_CLIENT_ID": {
-    "description": "Google Drive OAuth Client ID — TSD photo-import-cli desktop app",
-    "destinations": [
-      {
-        "type": "env-file",
-        "path": "/Users/stevestudio2/Projects/thesetdecorator/.env"
-      }
-    ]
-  },
-  "GOOGLE_DRIVE_CLIENT_SECRET": {
-    "description": "Google Drive OAuth Client Secret — TSD photo-import-cli",
-    "destinations": [
-      {
-        "type": "env-file",
-        "path": "/Users/stevestudio2/Projects/thesetdecorator/.env"
-      }
-    ]
-  },
-  "GOOGLE_DRIVE_REFRESH_TOKEN": {
-    "description": "Google Drive OAuth refresh token — read-only scope, owned by steveabramsdesigns@gmail.com",
-    "destinations": [
-      {
-        "type": "env-file",
-        "path": "/Users/stevestudio2/Projects/thesetdecorator/.env"
-      }
-    ]
-  },
-  "OPENAI_API_KEY": {
-    "label": "OPENAI_API_KEY",
-    "destinations": [
-      "/Users/stevestudio2/Projects/holdforme/.env"
-    ]
-  },
-  "ELEVENLABS_API_KEY": {
-    "label": "ELEVENLABS_API_KEY",
-    "destinations": [
-      "/Users/stevestudio2/Projects/holdforme/.env"
-    ]
-  },
-  "TWILIO_ACCOUNT_SID": {
-    "label": "TWILIO_ACCOUNT_SID",
-    "destinations": [
-      "/Users/stevestudio2/Projects/holdforme/.env"
-    ]
-  },
-  "TWILIO_AUTH_TOKEN": {
-    "label": "TWILIO_AUTH_TOKEN",
-    "destinations": [
-      "/Users/stevestudio2/Projects/holdforme/.env"
-    ]
-  },
-  "TWILIO_PHONE_NUMBER": {
-    "label": "TWILIO_PHONE_NUMBER",
-    "destinations": [
-      "/Users/stevestudio2/Projects/holdforme/.env"
-    ]
-  },
-  "TMDB_API_KEY": {
-    "label": "TMDB v3 API key — asseeninmovies Phase B drain (6.46M-stub queue)",
-    "verify": {
-      "method": "GET",
-      "url": "https://api.themoviedb.org/3/authentication?api_key=__VALUE__",
-      "auth": "querystring",
-      "expect": "success"
-    },
-    "destinations": [
-      "/Users/stevestudio2/Projects/asseeninmovies/.env"
-    ]
-  },
-  "TMDB_READ_ACCESS_TOKEN": {
-    "label": "TMDB v4 read-access token (bearer) — alt to v3 api_key",
-    "verify": {
-      "method": "GET",
-      "url": "https://api.themoviedb.org/3/authentication",
-      "auth": "bearer",
-      "expect": "success"
-    },
-    "destinations": [
-      "/Users/stevestudio2/Projects/asseeninmovies/.env"
-    ]
-  },
-  "VAPI_API_KEY": {
-    "label": "VAPI_API_KEY",
-    "destinations": [
-      "/Users/stevestudio2/Projects/holdforme/.env",
-      "remote:kamatera:/root/public-projects/butlr/.env"
-    ]
-  },
-  "VAPI_PUBLIC_KEY": {
-    "label": "VAPI_PUBLIC_KEY",
-    "destinations": [
-      "/Users/stevestudio2/Projects/holdforme/.env",
-      "remote:kamatera:/root/public-projects/butlr/.env"
-    ]
-  }
-}
\ No newline at end of file
diff --git a/routes.json.bak.20260505-fanout b/routes.json.bak.20260505-fanout
deleted file mode 100644
index 568e99d..0000000
--- a/routes.json.bak.20260505-fanout
+++ /dev/null
@@ -1,535 +0,0 @@
-{
-  "_comment": "Per-secret routing table. Each entry: master + extra destinations. Master is implicit at ~/Projects/secrets-manager/.env + ~/Desktop/site-factory.env.",
-  "services": {
-    "BRAVE_SEARCH_API_KEY": {
-      "label": "Brave Search API (Web)",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.search.brave.com/res/v1/web/search?q=test&count=1",
-        "auth": "header",
-        "headerName": "X-Subscription-Token"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/_ventura-recon/.env"
-        }
-      ]
-    },
-    "MOONSHOT_API_KEY": {
-      "label": "Moonshot AI / Kimi K2 API Key",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.moonshot.ai/v1/models",
-        "auth": "bearer"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/claude-codex-meeting/.env"
-        },
-        {
-          "type": "skill",
-          "name": "claude-codex"
-        }
-      ]
-    },
-    "CLOUDFLARE_API_TOKEN": {
-      "label": "Cloudflare API Token",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.cloudflare.com/client/v4/user/tokens/verify",
-        "auth": "bearer"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/site-factory/.env"
-        },
-        {
-          "type": "skill",
-          "name": "cloudflare-manager"
-        },
-        {
-          "type": "skill",
-          "name": "setup-domains"
-        },
-        {
-          "type": "skill",
-          "name": "domain-setup"
-        }
-      ]
-    },
-    "STRIPE_SECRET_KEY": {
-      "label": "Stripe Secret Key",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.stripe.com/v1/balance",
-        "auth": "basic-sk"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/site-factory/.env"
-        },
-        {
-          "type": "site_local",
-          "domains": [
-            "wholivedthere.com",
-            "bubbesblock.com",
-            "claimmyaddress.com"
-          ]
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/lawyer-directory-builder/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/professional-directory/.env"
-        }
-      ]
-    },
-    "STRIPE_PUBLISHABLE_KEY": {
-      "label": "Stripe Publishable Key",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/site-factory/.env"
-        },
-        {
-          "type": "site_local",
-          "domains": [
-            "wholivedthere.com",
-            "bubbesblock.com",
-            "claimmyaddress.com"
-          ]
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/lawyer-directory-builder/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/professional-directory/.env"
-        }
-      ]
-    },
-    "STRIPE_WEBHOOK_SECRET": {
-      "label": "Stripe Webhook Signing Secret",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/site-factory/.env"
-        },
-        {
-          "type": "site_local",
-          "domains": [
-            "wholivedthere.com",
-            "bubbesblock.com",
-            "claimmyaddress.com"
-          ]
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/lawyer-directory-builder/.env"
-        }
-      ]
-    },
-    "STRIPE_TIER_WEBHOOK_SECRET": {
-      "label": "Stripe Tier-Subscription Webhook Signing Secret (Counsel & Bar Lawyer Pro $29/mo)",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/lawyer-directory-builder/.env"
-        }
-      ]
-    },
-    "STRIPE_PRICE_LAWYER_PRO_MONTHLY": {
-      "label": "Stripe Price ID (public): Counsel & Bar Lawyer Pro $29/mo recurring",
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/lawyer-directory-builder/.env"
-        }
-      ]
-    },
-    "VERCEL_TOKEN": {
-      "label": "Vercel API Token",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.vercel.com/v2/user",
-        "auth": "bearer"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/site-factory/.env"
-        }
-      ]
-    },
-    "PURELYMAIL_API_TOKEN": {
-      "label": "PurelyMail API Token",
-      "verify": {
-        "method": "POST",
-        "url": "https://purelymail.com/api/v0/listDomains",
-        "auth": "header",
-        "headerName": "Purelymail-Api-Token",
-        "body": "{}",
-        "bodyMustContain": "^\\s*\\{\\s*\"type\"\\s*:\\s*\"success\"",
-        "bodyMustNotContain": "\"type\"\\s*:\\s*\"error\""
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/site-factory/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/ventura-corridor/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/purelymail-mcp/.env"
-        },
-        {
-          "type": "mcp",
-          "server": "purelymail",
-          "key": "PURELYMAIL_API_TOKEN"
-        }
-      ]
-    },
-    "GODADDY_API_KEY": {
-      "label": "GoDaddy API Key",
-      "destinations": [
-        {
-          "type": "mcp",
-          "server": "domain-suite",
-          "key": "GODADDY_API_KEY"
-        }
-      ]
-    },
-    "GODADDY_API_SECRET": {
-      "label": "GoDaddy API Secret",
-      "destinations": [
-        {
-          "type": "mcp",
-          "server": "domain-suite",
-          "key": "GODADDY_API_SECRET"
-        }
-      ]
-    },
-    "BROWSERBASE_API_KEY": {
-      "label": "Browserbase API Key",
-      "destinations": [
-        {
-          "type": "skill",
-          "name": "browserbase"
-        }
-      ]
-    },
-    "BROWSERBASE_PROJECT_ID": {
-      "label": "Browserbase Project ID",
-      "destinations": [
-        {
-          "type": "skill",
-          "name": "browserbase"
-        }
-      ]
-    },
-    "ANTHROPIC_API_KEY": {
-      "label": "Anthropic API Key",
-      "verify": {
-        "method": "POST",
-        "url": "https://api.anthropic.com/v1/messages",
-        "auth": "x-api-key",
-        "body": "{\"model\":\"claude-haiku-4-5\",\"max_tokens\":1,\"messages\":[{\"role\":\"user\",\"content\":\"hi\"}]}"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/Letsbegin/.env.local"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/dear-bubbe-nextjs/.env"
-        }
-      ]
-    },
-    "OPENAI_API_KEY": {
-      "label": "OpenAI API Key",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.openai.com/v1/models",
-        "auth": "bearer"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/dear-bubbe-nextjs/.env.local"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/dear-bubbe-nextjs/.env.local"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/animals/.env"
-        }
-      ]
-    },
-    "GEMINI_API_KEY": {
-      "label": "Google Gemini API Key",
-      "verify": {
-        "method": "GET",
-        "url": "https://generativelanguage.googleapis.com/v1beta/models?key={value}",
-        "auth": "url"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/Letsbegin/.env.local"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/Bertha/kalshi-dash/.env"
-        },
-        {
-          "type": "skill",
-          "name": "ai-analyzer"
-        },
-        {
-          "type": "skill",
-          "name": "enrich-ai-tags"
-        }
-      ]
-    },
-    "GOOGLE_GENERATIVE_AI_API_KEY": {
-      "label": "Google Generative AI API Key (alias of GEMINI_API_KEY)",
-      "verify": {
-        "method": "GET",
-        "url": "https://generativelanguage.googleapis.com/v1beta/models?key={value}",
-        "auth": "url"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/Letsbegin/.env.local"
-        }
-      ]
-    },
-    "SHOPIFY_ADMIN_TOKEN": {
-      "label": "Shopify Admin API Access Token",
-      "destinations": []
-    },
-    "SHOPIFY_API_KEY": {
-      "label": "Shopify API Key",
-      "destinations": []
-    },
-    "RESEND_API_KEY": {
-      "label": "Resend API Key",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.resend.com/domains",
-        "auth": "bearer"
-      },
-      "destinations": []
-    },
-    "STRIPE_RESTRICTED_KEY": {
-      "label": "Stripe Restricted Key (site-factory)",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.stripe.com/v1/balance",
-        "auth": "basic-sk"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/site-factory/.env"
-        }
-      ]
-    },
-    "DPLA_API_KEY": {
-      "label": "Digital Public Library of America API Key",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.dp.la/v2/items?api_key={value}&q=test&page_size=1",
-        "auth": "url"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/wholivedthere/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/claimmyaddress/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/bubbesblock/.env"
-        },
-        {
-          "type": "skill",
-          "name": "la-research-agent"
-        }
-      ]
-    },
-    "GEMINI_API_KEY_RALPH": {
-      "label": "Google Gemini API Key (dedicated to Letsbegin Ralph runner)",
-      "verify": {
-        "method": "GET",
-        "url": "https://generativelanguage.googleapis.com/v1beta/models?key={value}",
-        "auth": "url"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/Letsbegin/.env.local"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/Letsbegin/.env.local"
-        }
-      ]
-    },
-    "ELEVENLABS_API_KEY": {
-      "label": "ElevenLabs Voice Synthesis API Key",
-      "verify": {
-        "method": "GET",
-        "url": "https://api.elevenlabs.io/v1/user",
-        "auth": "header",
-        "headerName": "xi-api-key"
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/dear-bubbe-nextjs/.env.local"
-        },
-        {
-          "type": "project",
-          "host": "45.61.58.125",
-          "user": "root",
-          "path": "/root/Projects/dear-bubbe-nextjs/.env.local"
-        }
-      ]
-    },
-    "NEXT_PUBLIC_GOOGLE_MAPS_API_KEY": {
-      "label": "Google Maps JavaScript API Key (browser-exposed; needs HTTP-referrer restrictions)",
-      "verify": {
-        "method": "GET",
-        "url": "https://maps.googleapis.com/maps/api/streetview/metadata?location=34.05,-118.25&key={value}",
-        "success": "json.status === \"OK\" || json.status === \"ZERO_RESULTS\"",
-        "note": "Validates by hitting Street View Static API metadata endpoint; OK or ZERO_RESULTS both prove the key is enabled and unexpired."
-      },
-      "destinations": [
-        {
-          "type": "project",
-          "path": "~/Projects/stayclaim/.env.local"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/wholivedthere/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/claimmyaddress/.env"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/bubbesblock/.env"
-        },
-        {
-          "type": "remote",
-          "host": "root@45.61.58.125",
-          "path": "/root/public-projects/pastdoor/.env.local"
-        },
-        {
-          "type": "remote",
-          "host": "root@45.61.58.125",
-          "path": "/root/public-projects/pastdoor/.env.production"
-        },
-        {
-          "type": "project",
-          "path": "~/Projects/jill-website/.env"
-        }
-      ]
-    }
-  },
-  "leak_patterns": [
-    {
-      "name": "stripe-live-secret",
-      "regex": "sk_live_[A-Za-z0-9]{20,}"
-    },
-    {
-      "name": "purelymail-token",
-      "regex": "PURELYMAIL_API_TOKEN\\s*=\\s*[A-Za-z0-9_-]{20,}"
-    },
-    {
-      "name": "stripe-test-secret",
-      "regex": "sk_test_[A-Za-z0-9]{20,}"
-    },
-    {
-      "name": "stripe-publishable",
-      "regex": "pk_live_[A-Za-z0-9]{20,}"
-    },
-    {
-      "name": "browserbase",
-      "regex": "bb_live_[A-Za-z0-9]+"
-    },
-    {
-      "name": "google-api-key",
-      "regex": "AIza[0-9A-Za-z_-]{35}"
-    },
-    {
-      "name": "google-oauth-access",
-      "regex": "ya29\\.[A-Za-z0-9_-]{20,}"
-    },
-    {
-      "name": "github-pat",
-      "regex": "ghp_[A-Za-z0-9]{36}"
-    },
-    {
-      "name": "github-fine-grained",
-      "regex": "github_pat_[A-Za-z0-9_]{60,}"
-    },
-    {
-      "name": "slack-bot",
-      "regex": "xox[baprs]-[A-Za-z0-9-]{10,}"
-    },
-    {
-      "name": "openai-key",
-      "regex": "sk-[A-Za-z0-9]{40,}"
-    },
-    {
-      "name": "anthropic-key",
-      "regex": "sk-ant-[A-Za-z0-9_-]{50,}"
-    },
-    {
-      "name": "cf-token-40hex",
-      "regex": "(?:cloudflare|cf_token|dns_cloudflare_api_token)[^A-Za-z0-9]+([A-Za-z0-9_-]{40})"
-    }
-  ],
-  "CLOUDFLARE_ACCOUNT_ID": [
-    "/Users/stevestudio2/.claude/skills/domain-check/.env",
-    "/Users/stevestudio2/.claude/skills/domain-dns-setup/.env",
-    "/Users/stevestudio2/.claude/skills/domain-email-setup/.env",
-    "/Users/stevestudio2/.claude/skills/domain-full-setup/.env",
-    "/Users/stevestudio2/.claude/skills/domain-register/.env",
-    "/Users/stevestudio2/.claude/skills/domain-setup/.env",
-    "/Users/stevestudio2/.claude/skills/setup-domains/.env"
-  ],
-  "SMB_BUILDER_ADMIN_TOKEN": {
-    "destinations": [
-      {
-        "type": "env_file",
-        "path": "/Users/stevestudio2/Projects/small-business-builder/.env",
-        "key": "ADMIN_TOKEN"
-      }
-    ]
-  }
-}
\ No newline at end of file

← 7fe7f4e Reconcile ROTATION-CHECKLIST against 2026-06-21 read-only ve  ·  back to Secrets Manager  ·  auto-save: 2026-06-21T19:01:26 (1 files) — CF-TOKEN-LEAK-ROT af4923b →