Quantitative & systems developer. I build trading infrastructure, storage engines and research hardware designs in Python, Rust and TypeScript — and I publish the tests that prove they work.
everything that can be shown is linked — and a backtest you haven't tried to break is a rumour.Test counts are enforced by GitHub Actions on every push, not asserted.
Broker-agnostic trade execution layer: signal validation chain, pre-trade risk gateway with registerable checks, order/fill/position lifecycle, a seeded simulated broker, and a three-state outcome-level circuit breaker with drawdown-scaled position sizing. Contains no strategy by construction — signals arrive as injected objects.
LLM provider failover: same model, same history, next provider when one fails. Per-gateway circuit breakers with exponential cooldown, an error taxonomy separating gateway-level from model-level failures, SSE stream-restart semantics, and an OpenAI-compatible proxy. Adding a provider is one YAML entry.
Hot/warm/cold object store with per-payload codec selection and a FastAPI control plane. Benchmarked with the causes written up — including a 288× store/retrieve asymmetry traced to triple compression in auto mode. The Rust core ships as source, documented as never compiled; no claim is made for it.
A Tkinter desktop app and a dependency-free offline-first PWA writing one dataset with no server between them. Devices converge through per-item last-write-wins merging and deletion tombstones; the merge is order-independent and idempotent, and the tests prove it.
Dependency-free AST-based cyclomatic complexity analyser: per-function scoring, risk banding, JSON/Markdown reports, and trend tracking so complexity drift is visible across runs. Documents exactly where it deviates from strict McCabe — and ships an analysis of its own source as the worked example.
Data standardization plus a four-tier graceful-degradation ladder — retry, fallback calculation, simplified operation, emergency fallback — with domain-specific fallbacks per operation type, quality scoring, and an IQR outlier budget that rejects bad data rather than silently repairing it.
Range-based volatility estimators — Parkinson, Garman-Klass, Rogers-Satchell, Yang-Zhang — side by side so the numbers can disagree visibly, plus adaptive Bollinger/ATR/Keltner analysis and diagnostics for when GARCH-family models are, and are not, appropriate. A 215-method suite.
Advanced statistics for noisy series: L-moments, robust statistics, bootstrap analysis, extreme-value analysis, nonparametric tests, and a Bayesian block — conjugate posteriors, change-point detection, Bayes-factor model comparison, and posterior predictive checks.
An autonomous mathematics research engine: seven pluggable research modules — Collatz, Goldbach, prime distribution, graph theory, symbolic regression, cellular automata, dynamical systems — under expected-value task scheduling with psutil-enforced compute budgets, and an independent verification engine that re-derives findings rather than trusting the module that produced them. Ran unattended for 3 days / 107 research cycles.
A binary-lattice physics laboratory: measured emergent inverse-square attraction (exponent 2.09), mass proportionality r = 0.891, FFT-accelerated long-range solves, a ring-decomposed retarded potential (causality at one cell per tick, static-grid equivalence to 1e-14), and a THEORY_CONFLICTS.md recording where the results contradict the theory.
From-scratch two-state Gaussian HMM, a strictly walk-forward regime gate with bit-exact no-lookahead tests, and a Politis–Romano stationary bootstrap for Sharpe confidence intervals. Ships the negative result it was built to find: every gated variant underperformed the ungated strategy (+0.33 vs +0.21/+0.20/+0.24).
Stdlib-only structured logging with correlation-ID propagation, plus a severity-ranked alert manager with acknowledgment, rate limiting and injectable delivery senders (no network I/O by default). Publishing it fixed an inherited bug the suite caught: severity comparison by enum string meant "error" < "info", silently dropping ERROR alerts.
The public record doubles as process evidence: uif-physics' retarded potential was implemented to a pre-existing failing test specification; regime-lab publishes the negative result it was built to find; both CI failures to date (a NumPy 2.0 incompatibility, a pytest collection fault) were diagnosed and fixed the same day; and repairs made during extraction — including an inherited severity-comparison bug — are documented in commit messages rather than hidden.
Sole developer on production systems for an FCA-regulated wealth-management firm.
Day-to-day operations for short-let (Airbnb-style) serviced apartments.
Earlier: The White Swan — bartender (2024–25) · Jesters — front of house (2025–26). Since 2022: freelance construction & renovation, and a self-funded independent clothing brand run end-to-end.
Private code — methods and results discussed freely in interview.
Harvests auction sitemaps (~150k lots), extracts metal, purity and weight from lot titles and condition reports, and prices against live spot with FX conversion. Backtested over 40 closed auctions covering 24,291 lots: 4 verified wins, £1,635 deployed, +£820 realised (~50% blended return on deployed capital).
The number I'm prouder of is the one before it: the first backtest reported 62 wins and £18k of profit — all phantom. I traced 16 root causes, encoded each as a domain rule, and locked them behind 36 regression tests.
An analogue "artificial subconscious": neuromodulator circuit models (dopamine, serotonin, noradrenaline, acetylcholine), Kuramoto oscillator banks, and physical-substrate simulation — ionic diffusion validated against Fick's law, surface-acoustic-wave propagation, and phase-shifting interferometry with tomographic 3D reconstruction. ~43k LOC, 325 tests, 15 LTSpice schematics, embedded C++ firmware, and a costed BOM with production part numbers (STM32F407, Artix-7, ADS1256). UKIPO patent application GB2603303.5 filed Feb 2026.
After two years I audited my own timescale assumptions from first principles, found order-of-magnitude errors — the ionic chamber responds in hours, not milliseconds — froze v1, and restarted behind a falsify-first gate: the cheapest disproving experiment runs before any build spend.
→ Interactive proposal site — in-browser substrate simulations + 3D hardware viewer
Strategies feed a central executor through a pre-trade risk gateway and circuit breaker, over a ~25k-LOC, 19-module indicator library — a 215-method volatility suite (Parkinson, Garman-Klass, Rogers-Satchell, Yang-Zhang), Bayesian change-point detection, microstructure and order-flow analytics — backed by 500+ unit tests. Forward-test plumbing verified against an Interactive Brokers paper account (full order-lifecycle round-trip; 59,650 bars archived). A walk-forward HMM regime gate was rejected on its own evidence — 239 trades over 19 years failed to clear the bootstrap confidence bar, so it does not ship. Paper-trading only by construction. The volatility, statistics and regime-gating layers are published above as ohlc-volatility, quant-stat-lab and regime-lab; the strategy layer stays private.
A six-level stacked vision architecture for noisy visual input — an L1 reflex layer producing gradient fields, salience maps and per-region uncertainty, up through higher-level structural nets — with a dedicated uncertainty module (noise models, evidence accumulation, attention-energy allocation) and entropy-based filtering in the mid levels. ~24k LOC; the self-supervised L1 trained to 0.061 validation loss. Built to read rendered web pages as images, where classical parsing fails.
A congressional-disclosure system over public insider-trade filings, including four answered Office of Government Ethics FOIA requests, a 28-table research database, and primary-source contradiction analysis between filed disclosures and agency responses. Separately: on-chain analysis that scored 2,000 prediction markets on eight heuristics and traced a 14-wallet coordinated betting cluster through Gnosis Safe multisigs to a single funding origin across a 631-node wallet graph.
A-Levels: Mathematics, Economics, Business Studies — 2026
12 GCSEs, average grade 7.5 — 2024