— Projects
Software I build on my own time.
A personal ecosystem — the apps I build and run, and the data pipelines behind them. Photography lives over in the gallery.
— App modules
Ten modules, one hub.
Visit the live hub ↗
Watchin
moduleA personal film log — everything I watch, rated and dated, feeding the hub's shared activity feed.
- Rate and review every film
- Watch history with dates
- Feeds the cross-module activity feed
Eatin
moduleRestaurants worth remembering, logged with ratings and notes so the good ones don't get lost.
- Rated restaurant log
- Notes per visit
- Surfaces favorites over time
Readin
moduleA reading tracker — books finished, rated, and briefly reviewed.
- Book log with ratings
- Short reviews
- Reading history
Explorin
modulePlaces worth the detour — a running list of spots to visit and ones already explored.
- Saved and visited places
- Notes and ratings
- Travel-oriented
Jammin
moduleWhat's on repeat — tracking the music in heavy rotation.
- Current rotation
- Listening history
- Feeds the activity feed
Scoutin
moduleThe analytics heavyweight — machine-learning prop models across four major sports, with closing-line-value tracking and a shadow betting ledger that grades every prediction.
- XGBoost prop models for NBA, MLB, NFL, NHL
- Closing-line-value (CLV) tracking
- Retroactive shadow betting ledger
- Walk-forward probability calibration
Investin
moduleA bidirectional S&P 500 screener scoring every name on a −100/+100 scale, blending hierarchical partial-pooling signals with an options/IV layer and news sentiment.
- −100/+100 bidirectional scoring
- Hierarchical partial-pooling model
- Options + implied-volatility layer
- Per-article news sentiment
Valorantin
moduleMatch analytics for a nine-person squad — pulling every game from the Henrik API and rendering kill/death heatmaps overlaid on each map.
- Squad match ingestion (Henrik API)
- Per-map kill / death heatmaps
- Engagement-timing analysis
- LLM-labeled map callouts
Analyzin
moduleLeague of Legends meta analytics — Oracle's Elixir data feeding a dual regional + meta Elo system with Asia-ahead priors.
- Oracle's Elixir ingestion
- Dual regional + meta Elo
- Player-level Elo
- Regional strength priors
Budgetin
localPersonal finance, run locally — automatic account sync, receipt capture, and reconciliation against bank snapshots. Kept local because it touches real account data.
- SimpleFin account sync
- Fidelity CSV import
- Receipt capture + line-item splitting
- Balance reconciliation
— Data pipelines
Seven engines behind them.
EPA-based Elo for QB/RB/WR/TE and team defense, archetype classification, and projected passing & rushing via stored procs. 2020–2025.
Full ingest from the NHL public API — schedule, skater and goalie box scores — with a suffix-aware name resolver.
Odds and box-score ingestion with vig-stripping, walk-forward Platt recalibration, and CLV assembly in batter_clv.py.
Multi-sport prop grading into retroactive shadow betting, scored on calibration, CLV and sample size. Slate-aware date helper skips off-days.
Oracle’s Elixir ingestion into SQL, feeding a dual regional + meta Elo system with Asia-ahead priors, plus a player-level Elo.
Henrik API match ingestion for a nine-person group, end-of-batch engagement-timing refresh, and kill-coordinate heatmaps per map.
Bidirectional S&P 500 screener on a −100/+100 scale with hierarchical partial-pooling scoring and an options / IV data layer.