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

  1. 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.
  2. 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.
  3. 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
Share this project:

Updates

Submission history