Mixed host, split into three areas below: production (live customer traffic), staging (real customer data, no live traffic) and development (disposable). Separated at the docker-network level, not just by convention.
🔒 LoginAggregate host metrics, refreshed every 60 s.
Isolated on the prod_edge docker network. No development container can resolve or reach anything here. Change deliberately.
directory.n3-marketing.com
Own A record, Let's Encrypt cert, customer share-links. /2027events/ on this hostname is the development copy — separate container and data, listed below.events.n3-marketing.com
Printed QR codes resolve through this. Pure nginx return 302 — no container, no upstream, so nothing on this box can take it down. Live: DNS resolves here and the Let's Encrypt cert renews from cron (verified 2026-09-15). Its redirect table is deliberately not served on the dev hostname — test with curl --resolve events.n3-marketing.com:443:127.0.0.1.None. Neither production site uses a database — showdir is file-backed, the QR redirector is config only. There is no production database on this host.
Serves no customers, but holds a full copy of production data. Treat the data as production even though the site is not.
dev.surveyswithgames.com
All 76 marketing pages rebuilt as static HTML. No WordPress./app/
CodeIgniter, own login. Existing passwords work unchanged./v2/
Rebuild in progress, side by side with /app/. Own container n3_swg_web_v2, same swg_app database./api/Serves the three Play Store apps. Same paths as production, so installed apps need no republish if the domain moves here.github.com/n3-will privaten3_swg_db, network swg_netswg_appreal customer data — 89 accounts, 1.5M survey rows. What /app/ and the Android endpoints read.swg_manifestreal customer data — 2.3 GB manifest/chart data. Not the swg_manifest in n3_mysql; different database, same name. That collision is why this instance exists.swg_dbreal customer data — the old WordPress database. Nothing reads it any more; kept so PMPro history stays inspectable.Shared n3_edge network, no production traffic. nginx resolves each of these per request, so one being down can no longer stop the proxy starting — which is how a crash-looping dev container took production down on 2026-08-24.
/app/dashboard//n8n/ basic auth/n3-marketing//brief-preview//intel/ basic auth/booking-verify/ public booking form; /admin/ behind basic auth — live GHL tokens/2027events/ container n3_showdir_dev — separate data from the production directory above/testpro/ container n3testpro_web on swg_testpro/backups/ basic auth — on-demand dumpsn3_preship_test (published on host port 8080) and timclaw_web (internal only), both on n3_data./audit.html basic auth/private/repos.html basic auth — all GitHub repos, generated hourly/private/environments.html basic auth — the rules, and how to add a site to the right area/private/costs.html basic auth — month-to-date spend and per-resource breakdown from the DO API, refreshed every 6 hn3_mysql, network n3_dataswg_manifestdev — the working development database. Absorbs new production data nightly.swg_mirrorreal customer data — read-only mirror of production, wiped and reloaded nightly from the verified prod dump.swg_testproderived from real — stand-in production for app testing, seeded from the mirror.n3_ghl_appdev — GHL app data.swg_preship_testderived from real — pre-ship test copy behind n3_preship_test.swg_tim_clawderived from real — working copy behind timclaw_web.n3_events, surveys_with_gamesdev — empty schemas, still dumped nightly.Browse either instance from phpMyAdmin (server dropdown) or Adminer. Credentials on the credentials page.
/api/Dead on traveler too — nothing listens on :5000 there. Returns 503 to match./crm/Dead on traveler too — nothing listens on :3333 there. Returns 503 to match./n3/Blocked on the domain question: the blueprint says n3marketing.com, production answers on n3-marketing.com. directnic DNS is manual only, so the cutover cannot be scripted. When it lands it belongs in the Production area above — prod_edge, reservations, its own conf file.Adding something? Put it in the right area. Production goes on prod_edge with a memory reservation and its own nginx conf file; development goes on n3_edge. Never use a literal proxy_pass. Full rules: environment split. Verify with /srv/scripts/check-env-split.sh.