Malin d9ece58e12 fix: search race condition + brand detection + contacts + reassess
- loadDomains(): add generation counter so stale auto-advance fetches
  cannot overwrite a newer user-triggered search result; snapshot filter
  state before the first await so URL reflects what was requested; add
  HTTP status check so backend errors surface as toasts rather than
  silent empty results; auto-advance now calls loadDomains() without
  await so the counter increments correctly per page advance

- beauty_ai: word-boundary regex for short brands (≤5 chars) to stop
  'ref' matching 'reference'/'refresh'/'prefer' etc.; merge phones,
  whatsapp and social_links from site_analyzer directly into result
  (more reliable than AI extraction); add contact_whatsapp and
  contact_social fields to AI JSON schema

- db: add requeue_beauty() for re-assessing already-assessed domains

- beauty_main: /api/beauty/reassess/batch endpoint using requeue_beauty

- index.html: Re-assess Selected bulk button, per-row ↺ button in
  Browse and Pipeline, WhatsApp + social links in Pipeline contact panel

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 11:06:58 +02:00

DomGod — Domain Intelligence Dashboard

Dockerized dashboard for filtering, enriching, scoring, and exporting leads from a 72M-domain dataset.

Quick start

docker compose up --build

Open http://localhost:6677

On first boot, the container downloads domains.parquet (~GB) and caches it in ./data/. Subsequent restarts skip the download.

Environment variables (docker-compose.yml)

Variable Default Description
DATA_DIR /data Where parquet + sqlite live
PARQUET_URL GitHub raw URL Source parquet
CONCURRENCY_LIMIT 50 Parallel enrichment workers
SCORE_THRESHOLD 60 "Hot lead" threshold
TARGET_TLDS es,com,net TLDs to prioritise
TARGET_COUNTRIES ES,GB,DE,FR,RO,PT,AD,IT Countries for scoring bonus

Scoring

Signal Points
Domain is live +20
SSL expiry < 30 days +15
No valid SSL +15
Known CMS detected +15
No MX record +10
IP in target country +10
Shared hosting server +10
Local business keywords in title +5

Max score: 100. Hot ≥ 80, Warm 5079, Cold < 50.

API

GET  /api/stats
GET  /api/domains?tld=es&page=1&limit=100&live_only=false
POST /api/enrich/batch      { "domains": ["example.com"] }
GET  /api/enrich/status
POST /api/enrich/pause
POST /api/enrich/resume
POST /api/enrich/retry
GET  /api/enriched?min_score=60&cms=wordpress&country=ES
GET  /api/export?tier=hot   (streams CSV)
POST /api/score/run
Description
No description provided
Readme 794 KiB
Languages
Python 60.6%
HTML 39.3%
Dockerfile 0.1%