Skills & Tools
- Python
- Kotlin & Java
- Flutter
- JavaScript
- HTML & CSS
- SVG
- SQL
- Machine Learning
- NLP & spaCy
- pandas & NumPy
- scikit-learn
- SciPy
- TensorFlow
- FastAPI
- Plotly Dash
- React
- Flask
- Electron
- Streamlit
- Docker
- Git & GitHub
- REST APIs
- Jupyter
- Matplotlib & Seaborn
- Plotly
- Vanilla JS
- HTML5 Canvas
- AWS
- GCP
- Railway
- Render
- Causal AI & NetworkX
- Android Development
- Generative Design
- CSS Blend Modes
- UI / Visual Design
- Digital Product Design
- Anthropic Claude API
- ChatGPT & Gemini
- Photography
- Videography
From raw data
to something useful
I'm a London-based Data Scientist and Python Developer, trained at Imperial College London (96% average). My day-to-day spans the whole data workflow: cleaning messy datasets, building and tuning models, and shipping the result as something people can actually use, not just a notebook that lives on my laptop.
Outside client and product work, I build my own things: Android apps, trading tools, generative art systems, live wallpapers, screensavers, word-cloud typography. Fifty-plus projects so far, spread across the Google Play Store, Gumroad, Envato, and Lemon Squeezy. Running these myself taught me things a job rarely does: how to price something, when to ship versus keep polishing, and what users actually respond to once a product is out in the world.
There's a quieter part of my life too. After major surgery and the birth of my eldest child, I started donating blood regularly, and in 2026 hit my 50th donation, recognised by NHS Blood and Transplant. It's a small, repeatable way of putting something back.
I also write, though not often and not because I'd call myself a writer. Some thoughts just need somewhere to land. A few of those essays are published on Medium, and you can find them in the Writing section below.
Certifications
Projects
Enterprise energy intelligence platform targeting UK and European industrial operations. Provides real-time multi-site energy monitoring, ML anomaly detection using an isolation forest model, causal AI root-cause analysis with quantified causal strength scores, and CSRD-ready ESG reporting covering Scope 2 emissions, GRI 302-1, and carbon intensity. Includes a plain-English AI assistant powered by Claude, JWT authentication with RBAC, and 903 passing tests. Live demo deployed to Render.
View on GitHub Live DemoStructured extraction and deterministic validation for UK commercial energy bills, and the bill-intelligence module of VoltEdge. Accepts PDFs and phone photos (including iPhone HEIC), sends each to Claude for schema-constrained extraction into a fixed Pydantic model, then runs a registry of independent validation checks covering MPAN digit counts, subtotal and VAT reconciliation, estimated reads, duplicate charges, contract-renewal windows, and non-energy-bill detection. Ships a FastAPI review app with a drag-and-drop frontend, SQLite persistence, API-key auth, and JSON, Excel, and CSV export, plus a cross-portfolio intelligence layer that surfaces renewals, quantified suspected overcharges, and supplier comparisons. Includes interactive OpenAPI docs, a Render deployment blueprint, and 50 passing golden-file tests anchored on real anonymised supplier bills.
View on GitHubB2B clinical trial site performance intelligence platform targeting mid-market CROs in the UK and EU. Monitors enrolment velocity, risk scoring, and protocol deviation tracking across trial sites, with an AI-assisted insights layer powered by Claude. Features a FastAPI backend, Plotly Dash dashboard, and SQLAlchemy data layer with auto-seeding on startup. Built across five phases with 496 passing tests.
View on GitHubA production-grade UK salary intelligence platform built on ONS open data. Aggregates Annual Survey of Hours and Earnings data, applies CPI inflation adjustment and statistical analysis, and delivers fair salary benchmarks via a REST API and React dashboard. Features include regional breakdowns, gender pay gap trends, occupation distribution profiles, and CAGR analysis — all GDPR-compliant with no personal data collected. Deployable to AWS ECS Fargate or GCP Cloud Run via multi-stage Docker.
View on GitHubBuilt an NLP-driven system to parse and analyse CVs in PDF and DOCX formats using Python. Applied spaCy for tokenisation, entity processing, and skill extraction from unstructured text with automated quality checks.
View on GitHubA real-time interactive dashboard built with Python that tracks and visualises stock market data. It integrates live price updates, key performance metrics, and dynamic charts to help users monitor market movements and make informed investment decisions.
View on GitHubWhat I've Built
A fun, bingo-style maths game for Android. Makes practising maths engaging through familiar bingo mechanics, designed to keep players coming back. Free to download and play.
View on Google PlayAn engaging adventure-based learning app for young learners aged 3 to 11. Combines storytelling and exploration with maths challenges to build foundational skills in a way that feels like play rather than study. Free to download and use.
View on Google PlayA minimal, fullscreen animated live wallpaper for Android that displays the current month. Fully customisable with multiple languages, fonts, and a breathing animation with a live clock. Free to download.
View on Google PlayA minimal, fullscreen animated live wallpaper for Android that displays the current day of the week. Supports multiple languages and fonts with a breathing animation and live clock. Free to download.
View on Google PlayTurn your Android into a living departure board. Inspired by iconic split-flap Solari boards, this app shows live world clocks for multiple cities with authentic flip animations. Supports 300+ world cities and multiple colour themes. Free to download.
View on Google PlayBuild a world from nothing and watch it grow. World Builders is an open sandbox that hands you the tools to shape the land and expand it piece by piece, at your own pace. No timers and no fixed goals, just room to create and experiment. Free to download and play.
View on Google PlayA higher/lower guessing game inspired by higherlowergame.com. Players see two items and guess which gets more monthly Google searches. Features 3,187 questions across 11 categories — Sports, Celebrity, Tech, Gaming, Geography, History, and more — with 3 lives, per-category high scores, subcategory navigation, and smooth card animations. Free to play.
View on Google PlayWhat I've Shipped
A clean, self-hosted economic calendar built for traders. High-impact events highlighted first, smart LIVE detection, automatic local timezone conversion, and zero dependencies. Works fully offline as a single HTML file — no app, no subscription.
Know exactly which markets are open right now. Live open/closed status for 25+ global markets, real-time countdown to open and close, holiday calendar pre-loaded, and drag-to-reorder cards. Installs as a home screen app and works fully offline — no subscription required.
A series of minimal, fullscreen animated wallpapers — one displaying the current month, another the current day of the week. Both are fully customisable with 7 languages, 5 fonts, breathing animation, and a live clock. Single HTML files that work 100% offline with no install required. Compatible with Lively Wallpaper and Plash.
Turn your screen into a living departure board. Inspired by iconic split-flap Solari boards, this fullscreen screensaver shows live world clocks for up to 10 cities with authentic flip animations. Supports 300+ world cities, 5 colour accent themes, acoustic click sounds, and works fully offline on macOS and Windows.
An abstract typographic system and real-time digital clock built from pure geometric SVG — zero dependencies, one file. Each digit (0–9) is a hand-composed geometric artwork using SVG primitives layered with CSS blend modes. Dual themes: Studio Light and Gallery Dark, where the same geometry reads as ink-on-paper or light-on-projector.
View on GitHubDigits 0–9 built entirely from programming and data-science vocabulary. Each digit is a living word cloud — unique on every load. Words are placed using canvas pixel masking, a two-gate collision system, and AABB packing, then clipped by an SVG clipPath. Features breathing animations, shimmer sweep, 3D cursor tilt, and palette cycling.
View on GitHubAn interactive choropleth world map covering 172 countries across 7 data layers — Population Density, GDP per Capita, HDI, CO₂ per Capita, Life Expectancy, Internet Usage, and a default view. Features region and political group filtering (EU, G20, NATO, BRICS+), custom CSV/JSON data import, shareable URLs, iframe embedding with a JavaScript API, full keyboard navigation, dark mode, and zero dependencies — one HTML file.
View on GitHub Live DemoInteractive FIFA World Cup 2026 bracket predictor built as a single HTML file. Features a full 32-team clickable knockout bracket, group stage view, champion card with full journey breakdown, a 188-question trivia quiz across 6 categories, one-click PNG export, social sharing with encodable pick URLs, dark mode, timezone toggle, and full mobile responsiveness. Zero dependencies, hosted on GitHub Pages.
View on GitHub Live DemoAn open-source JavaScript library of ten dot-formation animations: sphere, wave, spikes, network constellation, torus, double helix, spiral galaxy, loader ring, wireframe cube and k-means clusters. Any shape morphs smoothly into any other, and each one has its own silhouette, drawing style and motion. Built for loaders, AI thinking states and small interactive moments. One file, about 5 KB gzipped, no dependencies, with support for reduced motion, keyboard use, and light and dark themes. Try it in the Get in Touch section below: click the orb to change its shape.
View on GitHub Live DemoWhat I've Written
Reflections on becoming, connection, and the things that stay with you.
Get in Touch
Open to freelance, contract, and full-time opportunities — in London or internationally, wherever the work is interesting. If you're building something that matters, bring the problem. I'll bring the code, the models, and the thinking.
Download CV