Skip to content

Repository files navigation

WebScan

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.

Features

  • 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.

Tech stack

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

Getting started

npm install
npm run dev

Open http://localhost:3000.

For a production build:

npm run build
npm run start

Environment variables

All 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

Architecture

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.

Deploying to Vercel

  1. Push the repository to GitHub and import it at vercel.com/new. The framework should be detected automatically as Next.js.
  2. Optionally add the environment variables above under Project → Settings → Environment Variables.
  3. Deploy.

Notes on the Vercel Hobby tier

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.

About

Website security, DNS, TLS & SEO scanner with 25 automated checks and actionable reports.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages