Deeman
4fbe53d7ca
merge: JSONL streaming landing format + regional overpass_tennis splitting
...
Converts extractors from large JSON blobs to streaming JSONL (.jsonl.gz),
eliminating in-memory accumulation, maximum_object_size workarounds, and
the playtomic availability consolidation step.
- compress_jsonl_atomic(): 1MB-chunk streaming compression, atomic rename
- playtomic_tenants → tenants.jsonl.gz (one tenant per line after dedup)
- playtomic_availability → availability_{date}.jsonl.gz (working file IS the output)
- geonames → cities_global.jsonl.gz (eliminates 30MB blob)
- overpass_tennis → 10 regional bbox queries + courts.jsonl.gz with crash recovery
- All modified staging SQL uses UNION ALL (JSONL + blob) for smooth transition
- init_landing_seeds.py: bootstrap seeds for both formats in 1970/01
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
# Conflicts:
# CHANGELOG.md
2026-02-25 12:34:03 +01:00
Deeman
683ca3fc24
docs: update CHANGELOG and PROJECT.md for JSONL landing format
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-02-25 12:28:43 +01:00
Deeman
578a409893
feat(email-templates): tests, docs, and fix quote_verification sample data (subtask 8)
...
- Add 50 tests in test_email_templates.py:
- TestRenderEmailTemplate: all 11 registry templates render in EN + DE
without error; checks DOCTYPE, wordmark, font, CTA color, template-
specific content (heat badges, brief rows, weekly digest loop, etc.)
and registry structure
- TestEmailGalleryRoutes: access control, gallery list (all labels
present, preview links), preview pages (EN/DE/nonexistent/invalid-lang),
compose preview endpoint (plain + wrapped + empty body)
- Fix _quote_verification_sample: add missing recap_parts key — StrictUndefined
raised on the {% if recap_parts %} check when the variable was absent
- Update CHANGELOG.md: document email template system (renderer, base,
macros, 11 templates, registry, gallery, compose preview, removed helpers)
- Update PROJECT.md: add email template system + gallery to Done section
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-25 12:24:52 +01:00
Deeman
5ba4cabcd8
docs: update CHANGELOG and PROJECT.md for marketplace + lead forward tracking
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-02-25 09:37:26 +01:00
Deeman
a9b14b8f73
docs: update CHANGELOG + PROJECT.md for pSEO Engine
...
Records all Phase 1 deliverables: content gaps, data freshness,
health checks, generation job monitoring, 45 tests, bug fixes.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-02-24 20:51:29 +01:00
Deeman
405efcfd19
docs: update docs and PROJECT.md for dual score pipeline
...
Task 8: documentation updates for the dual market score feature.
- CHANGELOG.md: comprehensive [Unreleased] entries for all additions
(Marktpotenzial-Score, tennis courts, dim_locations, GeoNames expansion,
DuckDB spatial, SOPS secrets, methodology page updates)
- docs/data-sources-inventory.md: add tennis courts Overpass row, update
GeoNames entry (cities1000, username=padelnomics, higher score)
- transform/sqlmesh_padelnomics/CLAUDE.md: add dim_locations to conformed
dimensions table, update source integration map with new pipeline branch,
document ST_Distance_Sphere bounding-box pattern
- PROJECT.md: add dual score to In Progress, add Gemeinde pSEO + top-50
ranking page to Next Up, add data backlog items (sports_centre, NUTS-3,
opportunity map), add Decisions Log entry
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-02-24 17:12:22 +01:00
Deeman
abc8be12c3
docs: update CHANGELOG and PROJECT.md with Market Score page
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-24 10:16:15 +01:00
Deeman
c574fe7e62
docs: update CHANGELOG and PROJECT.md for pSEO template improvements
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-24 02:14:14 +01:00
Deeman
a555331729
docs: update CHANGELOG and PROJECT.md for CMS admin improvement
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-24 01:20:37 +01:00
Deeman
b5de3e0681
feat: integrate ntfy.sh push notifications for supervisor
...
- Add NTFY_TOKEN support to send_alert() — sends Authorization header
when token is set, backwards-compatible with plain webhook URLs
- Set ALERT_WEBHOOK_URL and NTFY_TOKEN in .env.prod.sops
- Add NTFY_TOKEN= placeholder in .env.dev.sops
- Topic: gWMeiHxj8ZqLbbqT (hard-to-guess, token-gated)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-23 22:02:57 +01:00
Deeman
4006d47a79
docs: update CHANGELOG and PROJECT.md for visual test overhaul
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-23 21:11:34 +01:00
Deeman
4ff0a0cce8
docs: update CHANGELOG and PROJECT.md for SOPS secrets migration
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-23 17:19:09 +01:00
Deeman
84229e50f7
Merge branch 'worktree-supervisor-flags'
...
Python supervisor + DB-backed feature flags
- supervisor.py replaces supervisor.sh (topological wave scheduling, croniter)
- workflows.toml workflow registry (5 extractors, cron presets, depends_on)
- proxy.py round-robin + sticky proxy rotation via PROXY_URLS
- Feature flags: migration 0019, is_flag_enabled(), feature_gate() decorator
- Admin /admin/flags UI with toggle (admin-only)
- lead_unlock gate on unlock_lead route
- 59 new tests (test_supervisor.py + test_feature_flags.py)
- Fix is_flag_enabled bug (fetch_one instead of execute_fetchone)
# Conflicts:
# CHANGELOG.md
# web/pyproject.toml
2026-02-23 15:29:43 +01:00
Deeman
8b7d474ede
docs: update CHANGELOG and PROJECT.md for supervisor + feature flags
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-23 15:27:23 +01:00
Deeman
024feeaac4
feat: SEO/GEO admin hub — GSC, Bing, Umami sync + search/funnel/scorecard views
...
# Conflicts:
# CHANGELOG.md
# uv.lock
# web/src/padelnomics/admin/templates/admin/base_admin.html
# web/src/padelnomics/core.py
2026-02-23 15:23:03 +01:00
Deeman
36b90eb4df
docs: update CHANGELOG and PROJECT.md for SEO/GEO hub
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-23 15:09:25 +01:00
Deeman
454b362c88
feat: admin email hub — sent log, inbox, compose, audiences, delivery tracking
...
Add full email management at /admin/emails with:
- email_log table tracking all outgoing emails with resend_id + delivery events
- inbound_emails table for Resend webhook-received messages
- Resend webhook handler (/webhooks/resend) updating delivery status in real-time
- send_email() returns resend_id (str|None) instead of bool; all 9 worker
handlers pass email_type= for per-type filtering
- Admin UI: sent log with HTMX filters, email detail with API-enriched HTML
preview, inbox with unread badges + reply, compose with branded wrapping,
audience management with contact list/remove
- Sidebar Email section with unread badge via blueprint context processor
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-23 13:00:23 +01:00
Deeman
cac3b3b324
docs: reorganize research docs + add project tracker and marketing strategy
...
Move historical docs from docs/ and .claude/ to research/. Add superseded
notice to research/PLAN.md. Add CHANGELOG entries for previous fixes.
New: PROJECT.md (task tracker), docs/MARKETING.md (marketing strategy).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-22 21:27:23 +01:00