stuff i cooked
startScan() — the main guy
whole scan engine. disables btn, logs progress w live timestamps, awaits each module one by one, renders results at the end. if any API dies it falls back to demo data so UI never crashes. async/await diff fr
tab mode system
5 modes — full / dns / ssl / headers / geoip. one global scanMode var, whole render reads from it. that’s it. simple wins
terminal logger
every step logs w [HH:MM:SS] timestamp. cyan = info, green = ok, red = error. lines fade in one by one like an actual terminal running the vibes on this one are immaculate
real DNS via cloudflare DoH
fired 4 parallel reqs w Promise.all() — A, MX, NS, TXT all at once. hits cloudflare-dns.com/dns-query. faster than sequential calls by like 1.5s ngl
real geoip
grabs the A record IP → hits ipapi.co → gets country, city, ASN, coords, timezone. actual live data no cap
real whois via RDAP
rdap.org returns structured JSON instead of raw whois text. parsed registrar, dates, org, status. so much cleaner than traditional whois
demo data fallback
for stuff u literally cant fetch client side (SSL, ports, threat score etc) — generates realistic fake data seeded from the domain string so each target looks diff. sneaky move tbh
card system
buildCards() + makeCard() dynamically builds the results grid based on scan mode. WHOIS, DNS, SSL, GeoIP, Headers, Tech Stack, Threat Intel, Subdomains — each has its own template. cards stagger in w css animation delays
threat score UI
circle badge goes green/yellow/red. animated bars for malware, phishing, spam. looks clean as