A trading terminal that streams live market data, simulates portfolio trading, and puts an LLM assistant beside your positions — one that can analyze holdings and execute trades from natural language.
Built entirely by coding agents as the capstone for an agentic AI coding course. Agents
coordinate through shared docs in planning/.
Early — market data is the only component built. There's no frontend and no Dockerfile yet, so the app doesn't run end to end.
| Component | Status |
|---|---|
| Market data — simulator, Massive client, price cache, SSE | ✅ 73 tests, 84% coverage |
| Portfolio, trades, watchlist, chat API | ⬜ |
| Database, frontend, Docker, E2E tests | ⬜ |
Requires uv and Python 3.12+. No API key needed.
cd backend
uv sync --dev
uv run market_data_demo.py # live terminal dashboard, 10 tickers, ~60s
uv run pytest # test suiteTarget design is one Docker container on port 8000: a Next.js static export served by FastAPI, backed by SQLite, with LiteLLM → OpenRouter (Cerebras) for chat and Server-Sent Events for price streaming. Single origin, so no CORS.
Market data has two interchangeable sources behind one interface — a GBM simulator
(default) and a Massive/Polygon.io poller (when MASSIVE_API_KEY is set) — both writing
to a thread-safe PriceCache that SSE, portfolio valuation, and trade pricing read from.
See planning/MARKET_DATA_SUMMARY.md.
Read from a gitignored .env in the project root.
| Variable | Description |
|---|---|
OPENROUTER_API_KEY |
LLM assistant. Everything except chat works without it. |
MASSIVE_API_KEY |
Optional — real market data. Omit to use the simulator. |
LLM_MOCK |
Optional — true for deterministic mock responses in tests. |
planning/PLAN.md— full spec, and the contract between agentsbackend/README.md— backend development and testing
See LICENSE.