co-built · my parts labeled
ChainWatch
Role: Data & platform engineerPython · Gemini · Streamlit
A real-time early-warning system for supply-chain disruptions: monitor global signals, map them to a supplier network, score risk with an LLM, and surface actionable briefs.
PythonGeminiStreamlitSQLAlchemyPublic data APIs
Context
A 5-day capstone, then extended: a multi-agent pipeline that watches the world for supply-chain-relevant events (port strikes, floods, earthquakes, tariffs), scores how each threatens a company's suppliers, and writes procurement briefs.
What I owned
- Data ingestion — 7 live sources. Resilient fetchers for GDELT, NewsAPI, NOAA, USGS, Open-Meteo, and FRED/Yahoo, each with graceful degradation (fail-open to empty, explicit demo fallbacks) so no single API outage takes the pipeline down.
- LLM cost control. A keyword pre-filter that drops irrelevant events before they ever reach the model, plus batching multiple suppliers into a single scoring call — the difference between a demo and a system you can afford to run.
- The forecaster and the 10-tab Streamlit dashboard — risk map, alerts, timeline, forecasts, signals, and more, backed by a SQLAlchemy schema.
Honest attribution: this was co-built. My collaborator authored the LangGraph orchestration, the RAG stack, and the guardrails/eval layer. I owned the ingestion, cost controls, forecaster, and dashboard above — that's the part I speak to.
Results
- A functional end-to-end pipeline (signal → risk score → brief → alert) running on real public data feeds; the project's full 66-test suite passes (across both my modules and my collaborator's).
- Cost-aware by design — the keyword filter and batching cut LLM calls substantially before scoring.
- Learned: integrating many messy real-world APIs teaches you that resilience (timeouts, fallbacks, honest "demo" flags) matters more than the happy path. Some delivery integrations (Slack/Gmail alerts) are coded but were never run live end-to-end.