Omen
in plain words
Omen saves prediction-market prices and weather data every minute, around the clock. That kind of data can't be collected after the fact, so if it isn't captured as it happens, it's gone.
under the hood
How it works
- APScheduler runs capture jobs every minute; PostgreSQL advisory locks stop two schedulers running the same job.
- Everything lands in an append-only PostgreSQL 16 ledger, with database triggers enforcing append-only.
- All outbound traffic goes through one transport: GET requests to an allowlist of hosts. There is no trading code.
- FastAPI serves an internal API to a read-only SvelteKit console.
- Runs on my homelab under Docker Compose; Uptime Kuma watches a 60-second heartbeat.
Stack
- Python
- Minute-by-minute capture of Kalshi order books and NWS, NOAA NBM and IEM METAR weather data
- APScheduler
- Job scheduling guarded by PostgreSQL advisory locks
- PostgreSQL
- PostgreSQL 16 append-only ledger enforced by database triggers
- Alembic
- In-place schema migrations across live releases
- FastAPI
- Internal API for the read-only console
- SvelteKit
- Read-only web console
- Docker Compose
- Deployment of the full stack on the homelab
The longer version
Omen is a Python and SvelteKit system that continuously captures Kalshi prediction-market order books and weather data from NWS, NOAA NBM and IEM METAR sources. It collects data that can’t be backfilled every minute and stores it in an append-only PostgreSQL ledger enforced by database triggers.
It runs on my homelab via Docker Compose with PostgreSQL 16, Alembic migrations, APScheduler protected by PostgreSQL advisory locking, a FastAPI internal API and a read-only SvelteKit web console. Operational tooling includes omenctl, automated health checks, stale-data and disk monitoring, structured runbooks, log rotation and in-place schema migrations.
All outbound traffic goes through one transport restricted to GET requests against explicitly allowlisted hosts. Trading execution is intentionally absent, credentials are excluded from source control, and secrets live only in permission-restricted environment files.
Omen was deployed on October 11, 2026 and has shown 10 days of unattended operation, successful recovery from a power cycle, dead-man’s-switch alerting, and in-place releases since.