Oban cron worker runs every 4 hours, finds QSOs without weather data, discovers nearby ASOS/sounding stations, and enqueues WeatherFetchWorker jobs. Migrations run automatically on app start in production.
- Radio context with QSO schema and CSV import script (58K contacts) - Solar index schema, GFZ client, and daily Oban cron worker - LiveView dashboard with QSO table and weather correlation views - Parallelize weather import script using Task.async_stream (10 concurrent workers) - Replace sequential rate_limit sleeps with concurrency-based backpressure - Atomic progress counter for interleave-safe reporting