I'm a self-taught, project-driven builder working toward becoming an AI & Machine Learning engineer β learning by shipping real, working tools rather than following a fixed curriculum. Currently a student, building outside of that on my own track.
I like applying ML and coding skills to finance, trading and quant concepts β creating tools that genuinely help investors and traders.
I like taking an idea from "does anyone actually need this" through to a live, tested product β not just a prototype.
I build tools that solve one real problem well and are honest about their own limits β usually with an AI-assisted workflow (Claude Code) and a bias toward getting things correct before getting them polished.
Work is grouped below by the problem it belongs to. A category appears here once something is shipped in it.
Long-running systems built to production standards rather than demo standards β the ones worth reading the source of.
martex-quant β quantitative research platform for crypto Β
125 pre-registered trials across 120 hypotheses, walk-forward backtesting with realistic fees, deflated-Sharpe validation, Monte Carlo against prop-firm rule sets, paper trading, and an operations dashboard. It says plainly on the tin that it is not a profitable trading bot β the permanent ledger of every hypothesis that failed is the product, and the tooling exists to produce more of it.
Python Β· Polars Β· ccxt Β· pydantic β 184 commits Β· MIT Β· CI green
Market structure, options pricing, and the calendar of things that actually move prices.
| Project | What it does | Stack |
|---|---|---|
| factor-exposure | Regresses a portfolio's monthly excess returns on the five Fama-French factors plus momentum, to answer whether performance is alpha or just cheaply-bought beta. Every loading carries its standard error, t-statistic and 95% interval β a tilt that can't be told apart from zero is drawn hatched rather than reported as a small one, and a low RΒ² is presented as a finding rather than hidden | Python Β· FastAPI Β· statsmodels Β· React |
| implied-move Β· live β | Options-implied expected move before earnings. Separates the mean absolute move from a true 1Ο, which most calculators quietly conflate β a ~20% understatement of the real band | Next.js Β· TypeScript |
| market-calendar Β· live β | Day-by-day calendar of everything that could move US stocks β FRED macro releases and S&P 500 / Nasdaq-100 earnings, merged into one list ranked by impact | Next.js Β· TypeScript Β· Turso |
Making models fail honestly in testing instead of expensively in production. These five compose: find leaks statically, catch what static analysis can't at runtime, split correctly, see the split, then trust what comes out.
| Project | What it does | Stack |
|---|---|---|
timeleak β pip install timeleak |
Static linter for data leakage in time-series ML code: scalers fitted before the split, centred windows, backward fill, shuffled splits. Seven rules, zero dependencies, runs as a pre-commit hook | Python Β· ast |
| leakguard | The runtime half β raises at fit() when a transformer was fitted on rows outside the current fold, a leak class no static analysis can see. Its demo scores 0.731 on 2000 columns of pure noise where the honest answer is 0.500 |
Python Β· scikit-learn Β· pandas |
| purged-cv | Sklearn-compatible purged k-fold with an embargo, for labels whose outcome windows overlap. Shows that not shuffling is not enough: contiguous folds still score 0.781 on noise, purging brings it to 0.503 | Python Β· scikit-learn Β· NumPy |
| cv-visualizer | Renders train / test / purge / embargo boundaries as a diagram for any sklearn splitter β so leakage is something you can see rather than something a test asserts | Python Β· Matplotlib |
| calibrate | Reliability diagrams, ECE / MCE / Brier, Platt scaling and isotonic regression. Makes you state what a risk band promises rather than inferring one, because an uncalibrated "high" is worse than no score | Python Β· scikit-learn Β· Matplotlib |
Putting an expert-level answer in the hands of someone who shouldn't have to be an expert.
| Project | What it does | Stack |
|---|---|---|
| late-payment-chaser Β· live β | Statutory late-payment interest UK and EU freelancers are legally owed on overdue invoices. Every rate cited to the central bank's own table, all money in integer minor units, and no model anywhere near the arithmetic | Next.js Β· TypeScript |
| ScamLens Β· in development | Scans a message and rates how likely it is to be a scam β reporting the specific signals behind the score rather than handing back a bare verdict | β |
Also: dev-journal β running notes on ML, quant research and engineering practice.
| Principle | In practice |
|---|---|
| π’ Ship a small, honest v1 | Scope is chosen by what's expensive to change later β data model, units, rounding |
| π§ͺ Test what can't be wrong | Money, dates and legal figures get tested harder than layout and copy |
| π Disclose over hide | An assumption stated in the open beats one buried in the code |
| π Learn the domain | Well enough to know where a tool could quietly be wrong |
Stat cards above are generated from live GitHub data by a scheduled workflow in this repo β no third-party image services, so nothing here can break when someone else's server goes down.
AI engineering fundamentals Β· advanced machine learning (neural network architectures, fine-tuning, RAG) Β· applied trading and quant concepts Β· and how to take a tool from "it works on my machine" to "someone I've never met trusts it with their invoice."
π« Find my latest work pinned above, or browse my repos β most are small, scoped, and built to actually be used.


