Overview
XAUUSD Event Radar is a headless event-processing system for monitoring public information that may affect Gold (XAU/USD). It does not predict price direction, provide trade instructions, or automate trading. Its job is to turn noisy, fragmented public information into structured, auditable events.
The system collects public signals from multiple information channels, stores raw records, applies rules-first preprocessing, uses AI-assisted relevance and claim extraction, produces normalized events, and routes those events to private alerts, public publishing queues, and public-safe website payloads.
This is a self-directed system that I planned, designed, implemented, deployed, and maintain. news.thetickbase.com is one downstream public channel generated from this system; the Event Radar itself is the headless pipeline behind that channel.
Product Architecture
- Headless service monorepo - The project is organized as independent Python services plus a React operator dashboard. Each service has its own
settings.py,db.py, models, Dockerfile, tests, and deployment boundary. - PostgreSQL as source of truth - The system uses PostgreSQL for raw records, processing state, normalized events, claims, route decisions, alert queues, public outbox rows, model usage records, source health, and public sync state. There is no message broker in the V1 architecture.
- Reliable work queue pattern -
normalizer-classifierclaims work fromraw_item_processingwith row locking and retry metadata. This keeps task state visible, recoverable, and easy to debug during HomeLab operation. - Collector layer -
telegram-collector,rss-collector, and specialized consumers ingest public information streams, normalize source metadata, deduplicate records, update source health, and enqueue processing rows without judging event value. - Rules-first semantic layer -
normalizer-classifierperforms cleanup, language handling, keyword and source-priority prefiltering, near-duplicate handling, summary generation, relevance scoring, event creation, and simplified claim extraction. - AI with cost guards - Model calls are split by responsibility: low-risk translation and summary work is separated from classification and reasoning. Runtime budget caps prevent accidental high-volume paid model usage during backfills or resets.
- Centralized routing -
event-routeris the only service that decides which exits an event should enter. It writes private alert queues, public outbox rows, and per-route audit records, while delivery workers only handle how to send. - Multi-channel delivery -
alert-dispatcherhandles private Telegram and Pushover delivery.telegram-channel-publisher,x-publisher, andpublic-syncerconsume public outbox rows for public channels and website sync. - Public/private boundary -
public-syncerpushes only approved public-safe payloads from the private HomeLab system to a VPSpublic-apiover outbound HTTPS. The public stack has its own database and does not store raw collector metadata, prompts, private notification settings, credentials, or internal debug data. - Operator dashboard -
dashboard-apianddashboard-webprovide a private internal view for timeline, events, sources, processing state, alerts, taxonomy, AI usage, and public outbox review.
Key Features
- Event-centered monitoring - Convert fragmented public information into event records with severity, relevance, confirmation state, tags, source attribution, and public summaries.
- Source-aware processing - Treat source group, authority level, stance, reliability, and confirmation requirements as part of the event pipeline rather than plain text metadata.
- Auditable routing - Every route can record why an event was queued or skipped, which makes delivery policy reviewable instead of hidden inside publisher code.
- Private and public exits - The same normalized event can become a private alert, a Telegram channel post, a future X post, or a public website payload depending on route policy.
- Strict public-safe contract - Public website payloads are intentionally narrower than the internal event schema, protecting raw text, internal metadata, prompts, model outputs, credentials, and private delivery state.
- HomeLab-first deployment - Production deployment is Docker Compose based, with images pushed to GHCR, database migrations handled by a one-shot job, and public publishing disabled by default until explicitly enabled.


