Inspiration
I came across this "worldmonitor" project and started building my own dashboard on financial market, and the more I build the more I realize that markets never stop generating news: hundreds of feeds, millions of headlines a day, most of them the same story retold. A human analyst burns their attention on collection and deduplication before ever getting to judgment. As the improvement of capability of AI people wanted an agent that collapses that entire pipeline — collect, clean, reason, act — and leaves an audit trail a human can trust.
What it does
- Collect & de-duplicate (Ingest). Nine independent sources are pulled
concurrently, normalized into one schema, then collapsed in two stages: exact URL
drops and cross-publisher near-duplicate merging (0.6 word-overlap threshold,
cross-feed only). Every collapsed twin is logged with both publishers as evidence.
Live counts:/showcase, section 01. - Summarize & judge (Reason). One batched Gemini 3.5 Flash call receives every
instrument's market snapshot and computed indicators (RSI, MACD, momentum,
mean-reversion) and returns a board-level summary plus a strict, JSON-constrained
verdict per asset: signal, confidence, one-line rationale, timeframe. - Recommend → act (Act). Actionable BUY/SELL verdicts are persisted to Firestore
with their full evidence trail. A background scanner repeats the workflow
unattended; verdicts are cached with timestamps so quota exhaustion degrades to
"last known state" instead of failure. A companion Chrome MV3 extension reuses the
same Gemini actions on any page a human is reading.
How I built it
- Gemini 3.5 Flash via the Gemini Developer API (AI Studio key)
- Google ADK (
agent.py) for the interactive tool-using agent; Google GenAI
SDK (runner.py) for the batched autonomous scanner - Cloud Run hosts the service and the background scanner in one container;
Firestore stores every opportunity/alert (local JSONL fallback for dev) - FastAPI dashboard + single-file judge-facing showcase page (
/showcase) with an
autoplay mode that walks judges through Ingest → Reason → Act - Keyless, region-independent market-data endpoints so the whole pipeline runs
end-to-end
Challenges I ran into
- Free-tier quota vs. autonomy. One batched call per scan (5 symbols, one request)
and timestamped verdict caching keep the agent alive through 429s. - Duplicate stories across publishers. Wire-service syndication means three feeds
often carry the same story with different wording; we measure the collapse live and
keep the twin as evidence rather than silently dropping it. - Single-source failures. Any one feed or quote endpoint can die without blanking
the board — each symbol degrades independently.
Accomplishments I am proud of
- The de-duplication funnel is measured, not claimed: raw items, duplicates collapsed,
unique survivors and collision evidence are on screen, live. - One container is simultaneously the running agent, the dashboard and the audit log.
What I learned
Structured JSON-constrained outputs turn an LLM from a chatbot into a decision
component; and the resilience story (cached verdicts, isolated feed failures) matters
as much to judges as the happy path.
What's next for GENing
- Backtest the verdict stream against next-day returns (the Firestore log is already
the dataset) - Let the agent draft a morning briefing and push it via the Chrome extension
- Multi-asset expansion (commodities, FX) behind the same pipeline
Built With
- chrome
- cloud-run
- fastapi
- firestore
- gemini-3.5-flash
- google-adk
- google-genai-sdk
Log in or sign up for Devpost to join the conversation.