WatchPhish
A phishing intelligence and simulation platform that aggregates live threat feeds, scores and enriches indicators, maps threats geographically, and delivers interactive phishing awareness training.
React 19TypeScriptViteNode.jsExpressPostgreSQLDrizzle ORMTailwind CSSd3-geoVirusTotal API
Problem
Security teams and awareness trainers need a unified view of live phishing threats alongside hands-on simulation tools. Manually aggregating data from disparate threat feeds—while also running awareness exercises—is fragmented and slow.
Approach
WatchPhish combines a live threat intelligence dashboard with an attack simulation library in a single full-stack application. It:
- Ingests phishing URLs from OpenPhish, URLhaus, PhishTank, and ThreatFox in real time.
- Generates a composite risk score (0–100) for every indicator with a transparent breakdown of the contributing factors.
- Enriches each indicator with VirusTotal detection scores, urlscan.io analysis, and RDAP domain-age lookups to surface newly registered phishing domains.
- Geolocates hosts to countries and ASNs and plots them on an interactive world map, with sector-based filtering across Finance, Tech, Government, and Healthcare and a 7-day volume trend.
- Runs a Brand Monitor that scans Certificate Transparency logs (crt.sh) for typosquatting and lookalike domains—with a watchlist for up to 10 brands and match scoring.
- Catalogs attack techniques in an Attack Library (descriptions, red flags, real-world examples) and tracks novel Emerging Threats discovered within the last 30 days.
- Provides eight interactive phishing simulation scenarios (Microsoft Login Phish, PayPal Email, Browser-in-the-Browser, SMS/smishing, QR-code phishing, and more) for security awareness training.
Stack
- Frontend: React 19, Vite 7, TypeScript, Tailwind CSS v4
- UI & Visualization: Radix UI, Framer Motion, Recharts, d3-geo
- Backend: Express 5, Node.js, TypeScript
- Database: PostgreSQL + Drizzle ORM
- Structure: npm-workspaces monorepo splitting frontend, API server, database schema, and API specs into modular packages
What I Learned
- Multi-feed aggregation: Normalising inconsistent schemas across four threat intelligence APIs into a single unified model.
- Risk scoring & enrichment pipeline: Combining VirusTotal detection ratios, urlscan.io analysis, and RDAP registration dates into a transparent composite risk score—with every enricher degrading gracefully when credentials are absent.
- Geospatial threat mapping: Geolocating hosts to countries and ASNs and rendering them on a d3-geo world map alongside real-time distribution and trend charts.
- CT log monitoring: Leveraging certificate transparency feeds to catch brand impersonation before domains go live in threat feeds.
- Simulation UX: Building convincing but safe phishing replicas that teach recognition cues without real risk.