Work

2024 — 2025 · Solo build

Live

BullBrief

An equity research tool that reads market data, filings, and earnings, then writes the brief an analyst would have spent an afternoon on.

BullBrief interface

Equity research starts the same way every time: pull the filings, skim the earnings call, check the fundamentals, and write it up. BullBrief does the pulling and the first draft — and it's the project I've kept rebuilding the longest, from an LSU scraper into the platform running at bullbrief.pro today.

The frontend and backend split into their own repos once the original monorepo outgrew it: bullbrief-frontend deploys to Vercel, bullbrief-backend deploys to Render behind a Render healthcheck route and an explicit CORS allowlist scoped to bullbrief.pro and local dev. The API itself is 20+ Flask blueprints; the core of it is routes/analyst.py, a ~38KB market-analyst engine that grades sector peers, blends valuation signals, and produces the analyst-style read the frontend renders.

The hard part wasn't the AI — it was orchestrating high-concurrency financial data streaming and multi-source ingestion across five upstream sources that fail independently, and keeping the LLM output honest by validating it against Pydantic schemas before it ever reaches the page.

What it does


  • Ticker search with autocomplete and validation
  • AI-generated brief covering financials, valuation, risk, SWOT, and peers
  • LLM output validated against Pydantic schemas before it reaches the page
  • Live quotes across major tickers, cached for five minutes via FMP
  • Daily market movers and a peer Compare mode for side-by-side breakdowns
  • Rate-limit and partial-failure handling across five independent upstream sources

What it taught me


  • Designing financial interfaces around speed and legibility
  • Prompting for a domain instead of prompting for a summary
  • Degrading gracefully when one of five upstream sources is down