

noindex,nofollow and /check/ in robots.txt Disallow so audits stay private to whoever has the link/ws endpoint on the server so the tool can audit itself honestly without skipping the WebSocket check
.replit.app / .replit.dev hostnames and walked the CNAME chain. Worked for most cases. Then I audited a custom-domain Replit app I host, and the tool flagged it as "not a Replit deployment."dig CNAME returned nothing. dig A returned a Google Cloud Load Balancer IP. curl -I showed a GCP-fronted server signature. Every external signal pointed at GCP, not Replit. Then dig TXT returned a replit-verify= record on the domain — the missing piece. Replit's custom-domain flow doesn't always issue a CNAME; for some configurations it issues a TXT verification record at the domain or apex, with the A record pointing at Replit's GCP-fronted edge.replit-verify= TXT on the subdomain → same TXT on the apex → HTTP header fallback. All DNS lookups run in parallel under a 6-second shared timeout. The previously misdetected app now hits the TXT layer and is correctly identified./ws endpoint to the Express server that accepts WebSocket upgrades and echoes a greeting. Chose Reserved VM specifically because of this requirement — that decision is platform-aware architecture, not a generic deployment-type pick.Strict-Transport-Security at the application layer. On Replit, doing this naively can produce duplicate HSTS headers, because Replit's edge layer adds its own. If the application's max-age is lower than the edge's, the headers create a confusing downgrade signal.src-server/index.ts) that intercepts every response (assets, SPA fallback, 404s) and applies a unified header policy. Hashed Vite assets get Cache-Control: public, max-age=31536000, immutable; HTML gets no-cache, must-revalidate. CSP is strict (script-src 'self', no unsafe-inline), with the production HTML containing zero inline scripts to make that possible.Promise.all — sequential blocking would have made the tool unusable.status: 'running' in the database forever, and users polling would see a spinner that never resolves.UPDATE checks SET status = 'error', error = 'Audit interrupted by server restart' WHERE status = 'running' AND created_at < NOW() - INTERVAL '2 minutes' and logs the row count. Any check interrupted by a deployment surfaces as an error within two seconds of the next boot.dig TXT output showing the replit-verify= record, not a vague "it's not detecting custom domains".
Posted May 14, 2026
A free, no-signup tool that audits a deployed web app against 10 production-readiness signals and returns a 0–10 score. Built and deployed end-to-end on Replit.