Scan any website and get a graded advisory report — 25 independent health, security, DNS, TLS, and SEO checks run in parallel, each with a copy-paste fix.
Enter a domain on the home page and WebScan opens a shareable report at
/check/{domain}. Each check runs independently, so one slow or broken check
doesn't block the rest.
- 25 checks across HTTP, security headers, cookies, TLS, DNS, DNSSEC, mail (SPF/DMARC/DKIM), redirects, robots/sitemap, WAF, open ports, blocklists, subdomains, RDAP/WHOIS, reverse DNS, geolocation, Wayback, popularity rank, tech stack, social tags, security.txt, Safe Browsing, PageSpeed, and screenshots.
- Graded advisory summary grouping findings into Issues / Warnings / Info / Passes. Each finding can be expanded to show a suggested fix.
- Independent checks — every check has its own timeout and can fail without stopping the rest of the report.
- Optional integrations — checks that need an API key are marked as "skipped" when the key isn't configured.
| Framework | Next.js 16 (App Router) + TypeScript |
| UI | React 19, custom dark theme, PT Mono + Bangers fonts (via next/font) |
| Runtime | Node.js route handlers (node:dns, node:tls, node:net) |
| Deploy target | Vercel serverless |
npm install
npm run devOpen http://localhost:3000.
For a production build:
npm run build
npm run startAll of these are optional. If an integration key is missing, the related check is shown as "skipped".
Copy .env.example to .env.local and add the keys you have:
| Variable | Enables |
|---|---|
GOOGLE_SAFE_BROWSING_KEY |
Safe Browsing threat lookups |
GOOGLE_PAGESPEED_KEY |
PageSpeed / Lighthouse score |
SCREENSHOT_API_KEY |
Page screenshot via a server-side proxy |
IPINFO_TOKEN |
Server geolocation and hosting organization |
NEXT_PUBLIC_SITE_URL |
Absolute URL used in robots.txt / sitemap |
app/
page.tsx # Home — URL input + hero
check/[domain]/page.tsx # Shareable scan report
api/check/[id]/route.ts # Runs a single check by id
api/screenshot/route.ts # Screenshot proxy (keeps the API key server-side)
components/ # HomePage, ScanReport, AdvisorySummary, CheckGrid, CheckCard
lib/
types.ts # Check / Advisory / CheckResult contracts
registry.ts # Server-side id -> Check map
manifest.ts # Client-safe id + title list
checks/ # One file per check
Each check follows the same basic pattern:
run(url, signal)gathers the data.advise(data)turns that data into advisories.
The client reads the manifest and fires one request per check in parallel.
The route dispatches each request through the server-side registry, applies a
~9 second backstop, and returns a CheckResult.
- Push the repository to GitHub and import it at vercel.com/new. The framework should be detected automatically as Next.js.
- Optionally add the environment variables above under Project → Settings → Environment Variables.
- Deploy.
The Hobby tier caps functions at ~10 seconds. WebScan keeps each check behind a 9-second backstop, but a few checks depend on slower or restricted third parties:
- Page quality (PageSpeed/Lighthouse) can exceed 10 seconds and may time out.
- Open ports relies on outbound TCP, which may be filtered.
- Subdomains (crt.sh) and Wayback are subject to third-party rate limits.
These checks report "unavailable" or "timed out" rather than breaking the report.