Inspiration
Streaming platforms sit on oceans of real-time audience data, but the people who could act on it, content programmers, regional leads, dubbing managers, usually see it hours or days later, through static reports. We wanted an agent that watches the stream as it happens and hands a human a decision to make, not a chart to squint at.
What it does
Aurora is a real-time audience intelligence agent built on ClickHouse and Gemini. A simulator streams synthetic viewing events into ClickHouse. Every 45 seconds, an orchestrator pulls signals across 20 tracked titles, checks them against two anomaly detectors (SQL baseline + IsolationForest) and an XGBoost drop-off predictor, and, when something stands out, walks Gemini through a 4-step reasoning trail (anomaly -> regional context -> drop-off prediction -> decision) to produce a recommendation a human can accept or reject. Decisions stream live over WebSocket into a 2D dashboard and a 3D "Screening Room," where each title is a glowing sphere and the agent is an orb that travels to whatever it's analyzing. The core read path (live snapshot + anomaly detection) runs through the official ClickHouse MCP server, per the track's requirement.
How we built it
Node/Express + TypeScript backend, Python/FastAPI ml-service, Vite/React frontend, ClickHouse throughout. The orchestrator's two highest-frequency reads go through mcp-clickhouse (HTTP transport); the rest still use a direct client for now. React Three Fiber + drei power the 3D scene. We split the work: one of us on "Signal" (data/ML), the other on "Verdict" (agent/decisions/3D).
Challenges we ran into
Infra ate more time than expected, we migrated ClickHouse off Railway's free tier onto ClickHouse Cloud mid-hackathon after memory-limit crashes. Our two anomaly detectors used different time windows internally and almost never agreed, silently starving Gemini of anything to react to, a design decision, not a bug, until we noticed it was gating the whole pipeline. Wiring mcp-clickhouse in surfaced its own surprises: the tool's real name/args didn't match the docs, and its response shape needed a translation layer, testing that layer also surfaced an unrelated bug, a silent join ambiguity duplicating every anomaly row.
Accomplishments that we're proud of
The full loop is real end to end and synthetic events flow through ClickHouse, get scored by two ML approaches, and produce Gemini decisions a person can accept or reject , all inside a living 3D scene, not a spreadsheet.
What we learned
Two reasonable anomaly detectors can each be "correct" and still rarely agree, that's a design decision to make deliberately, not a bug to find. And scaling a dataset can break things scale itself never touched.
What's next for Aurora
Three concrete steps chart the path from demo to something a real programming team could rely on. First, replace synthetic events with a real historical dataset (e.g. MovieLens or a public streaming-engagement release) replayed as a live feed, so the anomalies Aurora catches are grounded in real viewing patterns rather than generated noise. Second, move from single-title triage to portfolio-level oversight: a live view across an entire release slate, so a programmer opens Aurora once a day and sees exactly which 2-3 titles, out of hundreds, need a human decision right now, instead of monitoring each one individually. Third, close the loop on trust: track how often accepted recommendations actually held up (did the drop-off prediction match what happened a week later?), surfaced as a running accuracy score per decision type, so a programmer can calibrate exactly how much to lean on Aurora before extending its lowest-risk recommendations, like a small promotional budget shift, to fully autonomous action within pre-approved guardrails.
Built With
- clickhouse
- docker
- drei
- express.js
- fastapi
- gemini
- mcp-clickhouse
- node.js
- python
- react
- typescript
- vite

Log in or sign up for Devpost to join the conversation.