Quantitative & systems developer. I build trading infrastructure, storage engines and research hardware designs in Python, Rust and TypeScript. 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, so the engine can be tested without one.
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 degradation ladder: retry, then a fallback calculation, then a simplified operation, then an emergency default. Fallbacks are domain code registered per operation type. Includes quality scoring and an IQR outlier budget that rejects bad data rather than silently repairing it.
Runs the range-based volatility estimators (Parkinson, Garman-Klass, Rogers-Satchell, Yang-Zhang) side by side so the numbers can disagree visibly. Adds adaptive Bollinger, ATR and 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 modules (Collatz, Goldbach, prime distribution, graph theory, symbolic regression, cellular automata, dynamical systems) run under expected-value task scheduling with psutil-enforced compute budgets. An independent verification engine 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 of it 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 and found order-of-magnitude errors; the ionic chamber responds in hours, not milliseconds. I 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 and a 3D hardware viewer
Strategies feed a central executor through a pre-trade risk gateway and circuit breaker, over a 19-module, ~25k-LOC indicator library backed by 500+ unit tests: a 215-method volatility suite (Parkinson, Garman-Klass, Rogers-Satchell, Yang-Zhang), Bayesian change-point detection, and microstructure and order-flow analytics. 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, from an L1 reflex layer (gradient fields, salience maps, per-region uncertainty) up through higher-level structural nets. A dedicated uncertainty module handles noise models, evidence accumulation and attention-energy allocation, with 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