← back to Dw Fleet Registry

README.md

59 lines

# dw-fleet-registry

**Single source-of-truth for every Designer Wallcoverings web property.**

Born from the DTD verdict (2026-06-01, Claude + Codex → **A**): consolidate the
two DW fleets into one canonical registry — *control plane only*. Serving methods
stay pluggable; this does **not** migrate any site.

## The two fleets it reconciles

| Fleet | Source | Serving | Count |
|-------|--------|---------|-------|
| **Local microsites** | `~/Projects/<slug>/` (own repo + `server.js` + `public/index.html` + `site.config.json`) | `standalone-node` | 76 |
| **Domain-fleet manifest** | `~/Projects/dw-domain-fleet/sites/<slug>.json` | `shared-multitenant` | 44 |

→ **120 unique domains** total. 0 exact-domain collisions, but **6 near-duplicate
clusters** (the real consolidation candidates).

## Usage

```bash
node build-registry.mjs        # re-scan both fleets, rewrite dw-fleet-registry.json
```

Read-only scan; re-runnable. Same inputs → same registry (plus a fresh timestamp).

## Output: `dw-fleet-registry.json`

```jsonc
{
  "summary": { "totalDomains", "localMicrosites", "manifestDomains",
               "overlappingDomains", "nearDuplicateClusters" },
  "overlaps": [ /* domains in BOTH fleets — canonicalOwner: UNRESOLVED */ ],
  "nearDuplicates": { "silk": ["silkwallcoverings.com","silkwallpaper.com"], ... },
  "sites": [ {
     "domain", "slug", "siteName",
     "fleets": ["local-microsite"|"domain-fleet-manifest"],
     "overlap": false,
     "servingModes": ["standalone-node"|"shared-multitenant"],
     "canonicalOwner": "local-microsite" | "domain-fleet-manifest" | "UNRESOLVED",
     "local":    { repoPath, hasGit, hasPublicIndex, hasServer, port, domainInferred },
     "manifest": { configPath, port, siteEmail, hasLocalDir }
  } ]
}
```

## Near-duplicate clusters (as of last run)

`carmel` · `flocked` · `hollywood` · `hospitality` · `raffia` · `silk` —
each is the same concept served under two domains across the two fleets. These are
the rows to decide a single canonical owner for.

## Not yet wired (next steps, Steve-gated)

- Live HTTP/pm2/launchd status probe per domain (`--probe`).
- Cross-reference against the 301-domain registrar list (CNCP `domains[]`) to flag
  registered-but-unbuilt and built-but-unregistered.
- A `canonicalOwner` resolution pass for the 6 near-dup clusters.