The site works, but it still thinks it is running on someone's laptop: canonical to
, sitemap on
,
NEXT_PUBLIC_API_URL=http://localhost:3001
, a test-mode payment key, a
route. This skill hunts those leftovers.
-
Shipped-output sweep (run against a production build, not dev):
bash
node scripts/scan-secrets.mjs --root . # DEV_URL_IN_SHIPPED_OUTPUT, SOURCEMAP_EXPOSED, DEBUG_ROUTE_PRESENT, secrets
node scripts/inspect-metadata.mjs --url <site> --render # localhost/staging in canonical, OG, sitemap, robots, JSON-LD
node scripts/check-links.mjs --url <site> --render # LINK_DEV_HOST, placeholder targets, form actions
Paths are relative to this skill's folder.
-
Search config and source for:
,
,
,
,
,
,
/
(ok only if intended),
,
,
/
/
in user-visible strings,
/
with sensitive data,
if (process.env.NODE_ENV !== "production")
guards that fail open, feature flags defaulting to "on" for admin/debug,
/
URLs pointing at dev services.
-
Environment parity: which env vars the code needs (
, config reads) vs. which are set in the deployment (owner confirms; you cannot read production values). Missing values silently falling back to dev defaults (
process.env.API_URL ?? "http://localhost:3001"
) are launch bugs.
-
Test vs live modes: payment provider keys (
/
vs live), OAuth redirect URIs, webhook endpoints, email provider sandbox mode, analytics property IDs (dev vs prod), captcha test keys (
style always-pass keys), map/API key restrictions (HTTP-referrer or origin restricted?).
-
Test data and accounts: seed users, default admin passwords, demo content, "test" products/orders, fake reviews, sample emails; sitemap/robots/noindex states appropriate for launch (a
left on production, or removed on a site meant to stay private).
-
Build hygiene: production build succeeds without warnings that indicate misconfiguration; source maps excluded or access-restricted; no
/
cache directories committed; drafts and preview routes not shipped;
correct for production.
-
Ops basics (ask, do not assume): error monitoring installed and pointing at the right project; analytics environment separation; uptime check; backup for the database; domain/HTTPS/redirect policy set (
); rollback path known.
-
Domain-move checklist when switching hosts: canonical/sitemap/OG/host absolutes updated; redirects from old hosts; OAuth/webhook URLs updated.
Label each claim OBSERVED, SOURCE-INDICATED, DECLARED, INFERRED, UNKNOWN, or REVIEW REQUIRED. UNKNOWN is never a pass and never a failure.
Replace dev/staging URLs with the confirmed production origin (via env-driven config, not hardcoding); remove dev fallbacks that fail open (fail loudly instead); remove or gate debug routes and console noise; exclude source maps from production; delete test data from seeds shipped to production; fix
/robots for the intended state; add
entries; update docs listing required production env vars. Do not change deployment settings, DNS, or environment values on the platform.
"Production-ready", "clean", or "no dev artifacts" beyond what the sweep covered. Say which builds and paths were scanned.
Rebuild and re-run the three commands; grep the rebuilt output for
/
; confirm debug routes 404 in production mode; confirm behavior with only production env values present (missing var now errors clearly).
Test-mode keys in production or live keys exposed (owner action needed); real user data in test fixtures; anything requiring platform access; missing backups or monitoring for a launch with real users.
The sweeps are clean and the owner confirms production env parity. Do not remove intentional staging banners on a staging site.