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