feat: BeautyLeads B2B cosmetics frontend on port 7788

New service (app/beauty_main.py) sharing the same /data volume:
- Separate FastAPI app running on port 7788
- beauty_ai.py: brand universe scan (~650 brands), portfolio match
  detection against OUR_BRANDS, Gemini B2B assessment prompt in Spanish
  returning quality/categories/dist_matches/outreach_email
- beauty_queue table + beauty_lead_quality/beauty_assessment columns
  in enriched_domains (with migrations)
- Endpoints: /api/beauty/assess/batch, /api/beauty/leads,
  /api/beauty/status, /api/beauty/export, /api/beauty/reset
- Static frontend: Browse (beauty/ecommerce pre-filtered, no CMS/SSL/KD
  columns), Validator, B2B Pipeline (brand chips, expandable outreach),
  Pre-screen, Export CSV
- docker-compose: second 'beauty' service with shared data volume
- Dockerfile: expose 7788 alongside 6677

Also: add 'error' prescreen_status handling + UI (orange stat box,
filter option) for 4xx/5xx HTTP responses

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-04 19:31:10 +02:00
parent db95876db2
commit a7dd7927b9
6 changed files with 1459 additions and 9 deletions

View File

@@ -1,4 +1,15 @@
version: "3.9"
x-common-env: &common-env
DATA_DIR: /data
PARQUET_URL: https://github.com/digitalcortex/72m-domains-dataset/raw/refs/heads/master/domains.parquet
CONCURRENCY_LIMIT: 50
SCORE_THRESHOLD: 60
TARGET_TLDS: es,com,net
TARGET_COUNTRIES: ES,GB,DE,FR,RO,PT,AD,IT
REPLICATE_API_TOKEN: r8_7I7Feai78f9PzMOs20y5GVFKiLkgUWP463vZO
AI_CONCURRENCY: 3
services:
dashboard:
build: .
@@ -7,12 +18,18 @@ services:
volumes:
- ./data:/data
environment:
- DATA_DIR=/data
- PARQUET_URL=https://github.com/digitalcortex/72m-domains-dataset/raw/refs/heads/master/domains.parquet
- CONCURRENCY_LIMIT=50
- SCORE_THRESHOLD=60
- TARGET_TLDS=es,com,net
- TARGET_COUNTRIES=ES,GB,DE,FR,RO,PT,AD,IT
- REPLICATE_API_TOKEN=r8_7I7Feai78f9PzMOs20y5GVFKiLkgUWP463vZO
- AI_CONCURRENCY=3
<<: *common-env
restart: unless-stopped
beauty:
build: .
command: python -m app.beauty_main
ports:
- "7788:7788"
volumes:
- ./data:/data # shares the same DB / parquet / duckdb
environment:
<<: *common-env
depends_on:
- dashboard # dashboard handles parquet download & index build first
restart: unless-stopped