Products, models, and data systems.
Selected work across sports analytics, machine learning, data engineering, and product development.
Selected work
Active products where the data pipeline, analysis, and interface work together.
A specialist UK job board powered by a reusable multi-source collector, normalized job data, AI classification, alerts, and paid subscriptions.
Next.jsTypeScriptPostgreSQLLLM enrichmentukaijobs.co.uk

A focused job board for UK data roles, helping analysts, analytics engineers, data scientists, and other data professionals find relevant opportunities.
Next.jsTypeScriptJob boardukdatajobs.com
An NFL analytics platform covering EPA, CPOE, win probability, player value, power rankings, and situational splits across play-by-play data.
PythonPolarsDuckDBFastAPINext.jsView source
fplanaly.st and its mobile companion share an automated Python, dbt, and FastAPI pipeline plus an xPoints model. Together they power player research, squad analysis, fixture planning, price tracking, and transfer recommendations.
Next.jsReact NativePythondbtFastAPIxPointsfplanaly.st
A lineup and player impact platform backed by an automated NBA data pipeline, advanced metrics, RAPM, and static data publishing.
PythonNext.jsnba_apiRAPMData pipelinesnbalineup.vercel.app
A live football market terminal comparing Polymarket and Kalshi prices, tracking market history, signals, arbitrage, and closing-line performance.
Next.jsFastAPIPythonPostgreSQLWebSocketsOpen app
Earlier work
Focused experiments that shaped the larger products above.
Models expected interceptions from NFL play-by-play data and compares quarterback performance using Brier scores.
Pythonscikit-learnXGBoostView source
Estimates expected rushing yards from play context to identify running backs who created more than their blocking and situation allowed.
PythonXGBoostnflfastRView source
Measures field-goal difficulty and kicker performance with a random forest model trained on NFL play-by-play data.
PythonRandom ForestnflfastRView source
Match reports and original football graphics built from data collected from WhoScored, FotMob, and SofaScore.
PythonRWeb scrapingmplsoccerView on X
A prediction game for Premier League player outcomes with user accounts, picks, and season-long scoring.
Next.jsPrismaAuth.jsSQLiteView source
A scheduled Telegram bot that publishes daily Fantasy Premier League player price changes.
PythonTelegram APIRailwayOpen Telegram
Collects, combines, and cleans data from FBRef's top five leagues on a scheduled pipeline.
PythonAirflowPostgreSQLView source
Compares a personal portfolio with the S&P 500 through risk, return, drawdown, and allocation analysis.
PythonStreamlitView source
