BullBrief started at LSU as a scrappy scraper for answering one question faster than reading a 10-K: how's this stock actually doing. It was rebuilt from the ground up at NYU into a real two-service platform — a Next.js/TypeScript frontend on Vercel and a Flask API on Render, running behind bullbrief.pro — that fans out to Yahoo Finance, Financial Modeling Prep, SEC filings, Schwab market data, and OpenAI, then normalizes and writes up what comes back.
Other builds & experiments
BullBrief started at LSU as a scrappy scraper for answering one question faster than reading a 10-K: how's this stock actually doing. It was rebuilt from the ground up at NYU into a real two-service platform — a Next.js/TypeScript frontend on Vercel and a Flask API on Render, running behind bullbrief.pro — that fans out to Yahoo Finance, Financial Modeling Prep, SEC filings, Schwab market data, and OpenAI, then normalizes and writes up what comes back.
Apeirion parses source PDFs of executive health reports into a strictly validated structured payload, then persists it into a PostgreSQL schema where identifiers are encrypted at the application layer with Fernet and clinical data references patients only by opaque UUID — the same PII/PHI separation pattern health-tech platforms run in production, built here to actually practice it end to end.
Maintained continuously since LSU, this site has gone through several full rebuilds rather than incremental patches — most recently a ground-up pass onto a two-register type system (Helvetica Neue Bold for structure, Palatino Italic for voice) and, as of this build, a live data pipeline that pulls real commit and language stats from GitHub's GraphQL API on a 30-minute revalidation window instead of hand-typed numbers.
My first real engineering project: a currency-and-powerup game built entirely on top of Java's Swing, with every piece of the engine — collision detection, sprite rendering, and the task scheduler driving spawns and timers — written by hand instead of pulled from a game framework.
Built for NYU's Database Systems final project: a Flask app backed by a genuinely relational MySQL schema — nine tables covering flights, airports, airplanes, customers, staff, and bookings — with staff and customer flows kept separate and every query written by hand rather than through an ORM, so the SQL itself was the thing being graded.
NBA player analytics — career stats from the NBA's own API, awards history from a targeted headless-browser scrape, both served through a two-tier cache.