

Track: 🤑 Agentic Money · Platanus Hack BSAS 2026
Plataforma de ad-tech agentic para streamers en vivo. Agentes de IA autónomos negocian en tiempo real por segundos de publicidad en tu stream y pagan en USDC on-chain en Base.
El streaming live mueve millones, pero el modelo de monetización está roto:
Cada momento del stream se vende como un evento atómico, en lenguaje natural, entre agentes que representan a las marcas y al creador.
Streamer dice "platanus" en el stream
↓
Pipeline transcribe en ~400ms (ElevenLabs Scribe v2)
↓
Brand-agents (Claude Haiku 4.5) leen el contexto
↓
Compiten en una subasta con bids en USDC
↓
Streamer-agent acepta o rechaza desde su /dock
↓
Si acepta → escrow on-chain (Base) lockea fondos
↓
Ad aparece como overlay en OBS (~1s end-to-end)
↓
Al terminar el placement, el escrow libera el pago al creador
Verificable en basescan. Sin middleman. Sin contratos a 30 días.
El streamer transmite su contenido vía RTMP a un servidor de ingesta nginx-rtmp. Un orchestrator en Node levanta varios pipes en paralelo por sesión:
context_chunks (Supabase Postgres) con el audio nuevo desde el chunk anterior. Si el streamer está en silencio, no hay row — la tabla queda limpia.platanus, monster, doritos), el chunkWriter dispara un INSERT instantáneo sin esperar al setInterval — la latencia keyword → toast queda en ~500ms.Un worker standalone corriendo en Fly.io escucha LISTEN/NOTIFY del Postgres y por cada chunk nuevo:
FOR UPDATE SKIP LOCKED.audio_text del chunk + el registry de marcas (YAML), y elige UNA brand cuyo match_keywords calce. Devuelve brand_id, moment_quality, brand_match, bid_usdc.kind='offer' status='pending' en render_events + pg_notify.A diferencia de las soluciones automatic-bidding clásicas, el streamer siempre tiene la última palabra sobre qué ad sale al aire:
/dock?creator_id=<slug> como una card con countdown 8s, brand label, monto en USDC, y dos botones: ✅ aceptar / ❌ rechazar.render_event kind='brand' se inserta y el overlay (/o/<creator_id>) lo muestra en OBS vía SSE en <1s.duration_ms), el escrow libera el pago al wallet del creator.| Componente | Stack | Hosting |
|---|---|---|
| Pipeline ingesta | nginx-rtmp + ffmpeg + Node.js + ElevenLabs Scribe v2 | Docker container |
| Worker agentic | TypeScript standalone + Claude Haiku 4.5 | Fly.io |
| Web app | Next.js 16 (App Router) + Tailwind 4 | Vercel |
| Base de datos | Postgres + LISTEN/NOTIFY | Supabase |
| Smart contracts | Solidity + Foundry + viem | Base Sepolia |
| Wallets | Privy embedded wallets | — |
| Storage | Vercel Blob | — |
| Streaming | OBS → RTMP → Browser Source overlay | OBS Studio |
stream_key, y agrega un Browser Source con https://addie.demo/o/<stream_key> (overlay vacío hasta que apruebe un offer)./dock?creator_id=<stream_key> en su segundo monitor.Las marcas se definen como YAMLs declarativos en worker/brands/*.yaml (worker) y apps/web/src/lib/agents/brands/*.yaml (manager web). Cada YAML tiene:
match_keywords — palabras que disparan el match (con normalización NFD para tolerar acentos).daily_cap_usdc, min_bid_usdc, max_bid_usdc — límites económicos del brand-agent.ad_asset_url + ad_zone + ad_duration_ms — el creative pre-producido y dónde se muestra.prompt — system persona, voice examples, restricciones para la negociación.event_filters, brand_safety, dayparts — gates que el agent honra antes de bidear.placements queryable por la marca.| Persona | GitHub | Track |
|---|---|---|
| Franco | @francowini | A — On-chain (escrow, USDC settlement, Privy) |
| Lucas | @lucas-emartinez | B — Pipeline (ingesta, transcripción, worker) |
| Andy | @arvenz0210 | C — Agents (Claude pickers, brand registry, gates) |
| Jere | @jeremybacher | D — UI (dock, overlay, dashboard) |
v0.1.0