Both zoomToNode() (pan/zoom, THE-79) and the search/badge additions from
master (THE-66, THE-73) are preserved. No logic changes to either side.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- Apply d3.zoom() to SVG container for mouse wheel zoom and drag-to-pan
- Implement zoomToNode() that auto-centers viewport on clicked/expanded node
- Store svgEl reference separately from vis group for zoom target
- Add grab/grabbing cursor CSS on SVG to communicate interactivity
- Preserve compatibility with dark mode, viewBox/responsive SVG, null-child safety
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Adds overpass-turbo.eu as a geolocation resource. This is a clean
cherry-pick of the valid data change from PR#535 — the CSS changes
from that PR were dropped as obsolete (superseded by THE-32/THE-72).
The duplicate Twitter > Location / Mapping entry was also excluded
per board direction.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Reduce #header font-size from 40px to 16px at max-width 768px to
prevent overlap with the D3 tree on narrow screens. Switch .legend
from absolute/fixed-width to relative/auto so it no longer overflows
viewports narrower than 400px.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Parse (T)/(D)/(R)/(M) suffixes from tool names and render them as
colored tspan elements in the SVG tree. Add matching badge pill styles
to the HTML legend so it visually matches the tree indicators.
- T (tool) → blue #4a9eda
- D (dork) → orange #e8944a
- R (registration) → amber #c8a030
- M (manual URL) → purple #9a7eda
Badge colors are theme-invariant; they work on both dark and light
backgrounds without separate light-mode overrides.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
feat(data): expand Terrorism category with 9 new vetted resources
Adds subcategories and resources from legitimate government, academic,
NGO, and think tank sources identified in THE-41 research:
- Academic Research: GTD (existing), START Consortium Portal
- Sanctions & Watchlists: OFAC, UN SC Consolidated List, OpenSanctions
- Research Centers: ISD, CSIS Terrorism Program, RAND
- Terrorist Financing: U.S. Treasury TFTP
All resources verified live and from authoritative institutions.
Adds a debounced text search input above the D3 tree that filters all
~1,000+ tool nodes by name and description. Results appear as a flat
list with breadcrumb paths; clearing the input hides the panel.
- No build step required: vanilla JS, no new dependencies
- Sanitizes HTML output (escapeHtml/escapeAttr) and validates URLs (http/https only)
- Dark and light mode compatible via existing CSS variables
- Results capped at 50 to keep rendering fast
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Board feedback: dark mode looked blue rather than properly dark.
Changed backgrounds from navy (#1a1a2e, #16213e) to neutral darks
(#1a1a1a, #2d2d2d), node fills to gray (#3a3a3a), and node stroke
to steelblue to match light mode styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Paperclip <noreply@paperclip.ing>
#767676 on white = 4.54:1, just above the 4.5:1 AA threshold.
#999 (previous value) was 2.85:1, which failed.
Closes THE-37.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Closes THE-34, THE-35, THE-36.
- Replaces all hardcoded colors in arf.css with CSS custom properties
- Dark palette defined on :root (default); light palette on body.light-mode
- Removes old .dark-Mode class; D3 inline styles now read CSS vars at render time
- goDark() toggles light-mode class and persists preference to localStorage
- Flash-prevention inline script in body applies stored theme before first paint
- Toggle button label reflects current theme state
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Adds subcategories and resources from legitimate government, academic,
NGO, and think tank sources identified in THE-41 research:
- Academic Research: GTD (existing), START Consortium Portal
- Sanctions & Watchlists: OFAC, UN SC Consolidated List, OpenSanctions
- Research Centers: ISD, CSIS Terrorism Program, RAND
- Terrorist Financing: U.S. Treasury TFTP
All resources verified live and from authoritative institutions.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Cloudflare deploy fails with "Missing entry-point to Worker script or
to assets directory" because there is no wrangler config telling it
where the static files live. This points it at ./public.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
d3.hierarchy() in D3 v7 does not tolerate null entries in children
arrays (v3 was lenient). A null element at Username.children[1] caused
the entire tree to fail silently.
- Remove the null entry from arf.json
- Add a defensive children filter in d3.hierarchy() call so future
null entries degrade gracefully instead of breaking the tree
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace d3.layout.tree() with d3.tree()
- Replace d3.svg.diagonal() with d3.linkHorizontal() (x/y accessors swap coords)
- Replace d3.json(url, cb) with d3.json(url).then(cb)
- Replace d3.hierarchy() for root node; use .descendants() and .links()
- Strip svg: namespace prefixes from append/insert calls
- Update xlink:href to href on anchor elements
- Update data accessors to use d.data.name, d.data.url, etc.
- Fix .style("fill") call (was malformed in v3 code)
- Update event handler signature to (event, d) for D3 v7
- Use node.merge(nodeEnter) and link.merge(linkEnter) for v5+ update pattern
- Add public/js/d3.min.js (v7.9.0) copied from node_modules
- Update index.html to load d3.min.js instead of d3.v3.min.js
- Update CI smoke test to check for d3.min.js
- Keep d3.v3.min.js in place until visual parity confirmed
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- Remove That's Them VIN Search (thatsthem.com/vin-search) - reported
dead in GH #490; the VIN search feature was removed by the site owner
- Remove empty Base64 folder (children: []) - caused the folder to
appear clickable but do nothing, reported in GH #489
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- #518: wayparam (URL parameter security tool) added to Search Tools
- #508: Surfface Face & People Search Engine added to Image Search
PR #542 (FootprintIQ) rejected — confirmed dead link by board and browser check.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- #496: Add OpenCelliD and beaconDB to Geolocation/Mobile Coverage
- #515: Add CertKit CT Log Search to Certificate Search (near crt.sh)
- #516: Add Global Fishing Watch to Marine Records (near Vessel Finder)
- #540: Add Epstein Exposed to Court/Criminal Records
- #544: Add WDES - Web Data Exposure Scanner to Domain Name/Vulnerabilities/Scanners
- #545: Add Lullar to Username Search Engines
All URLs verified alive during Phase 1 review. Applied as direct
arf.json edits (PR branches had large divergence from current master).
Co-Authored-By: Paperclip <noreply@paperclip.ing>
All 9 entries cherry-picked in 059a8b4 are already present in the remote
version (they were independently merged via PR #546). Resolving by accepting
theirs for arf.json, keeping staged CSS/HTML changes from local branch.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Rebased cleanly onto current master (resolving conflicts from
community PRs #240-#471 merged while this branch was in flight).
Changes:
- Add GitHub Actions CI workflow (JSON lint, link check, smoke tests)
- Remove 176 confirmed dead links from arf.json
- Normalize 393 URLs from http:// to https://
- Fix invalid JSON (missing commas/braces from old format)
- Remove Bower dependency; lock D3 to npm
- Add link audit tooling (tools/)
- Cherry-pick alive tools from community PR #391:
FaceCheckID, Cisco Talos, VerifyEmail, YouTube Geofind, Whitepages,
Hiya, Berla Vehicle Lookup, OpenAIP, Valkyrie File Analysis
- Fix OpenInfrastructureMap URL (missing https://)
Community PR #359 (Risk Toolbox / fraudfightersalliance.com):
DNS does not resolve — all 27 proposed additions are dead, not merged.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Ran comprehensive link audit across all 1,113 URLs in arf.json.
Removed nodes where the URL has definitively failed (DNS resolution
failure, connection refused, or HTTP 404). Left in place: .onion
Tor hidden services, 403 bot-blocked sites (site still exists),
5xx server errors (transient), and timeouts.
Audit summary:
- Total URLs checked: 1,113
- OK: 829
- Dead (removed): 113 (DNS failure: 61, connection refused: 8, HTTP 404: 49, minus 5 already deduplicated)
- Redirected (kept, flagged in report): 374
- Slow >10s (kept): 1
Also adds tooling:
- tools/link_checker.py -- async URL checker, writes JSON report
- tools/remove_dead_links.py -- removes confirmed dead nodes from arf.json
- tools/link_audit_report.json -- full audit results
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- JSON lint: validates arf.json is well-formed on every PR/push
- Smoke test: verifies index.html local asset references exist
- Link check: weekly scheduled + master push lychee scan of all 1147 URLs in arf.json
Co-Authored-By: Paperclip <noreply@paperclip.ing>