Python and AI engineer based in London. I build data platforms that take messy, real-world input and turn it into something deployed, tested and usable: LLM-powered document extraction, ML anomaly detection, and analytics dashboards on FastAPI and Plotly Dash.
Trained through Imperial College London's Data Science Bootcamp (96% average). Looking for ML/AI engineering and data roles in London or remote.
Portfolio · LinkedIn · DEV · Medium · Reddit · shaz.moghaddam@gmail.com
My commercial products, LedgerLet, VoltScope, VoltEdge, ClinIQ and SalaryAxis, are published under Moghaddam Labs.
LedgerLet: Making Tax Digital for UK landlords
Making Tax Digital for Income Tax means many UK landlords now have to keep digital records and send HMRC an update every quarter. LedgerLet keeps their property records and files those cumulative quarterly updates straight to HMRC. Landlords add income and expenses by hand or import a bank statement CSV through a two-step preview that blocks duplicate rows. Every figure is stored as integer pence and mapped to HMRC's property headings, with joint ownership shares and mortgage interest handled the way HMRC requires.
It connects to HMRC over OAuth with encrypted tokens, sends validated fraud prevention headers, checks obligations and deadlines, and keeps an append-only audit trail of every submission. It's a modular monolith with a React and TypeScript frontend whose types are generated from the API, and a CI gate of 600+ automated tests, including browser tests with accessibility checks at phone, tablet and laptop sizes. I also open-sourced its UX documentation approach as ux-boards.
600+ tests · Auth0 sign-in (UK region) · Live demo, running end to end on HMRC's sandbox
Python FastAPI PostgreSQL SQLAlchemy Alembic React TypeScript Vite Auth0 HMRC MTD API Playwright GitHub Actions Docker
VoltScope: LLM extraction and validation for UK energy bills
Commercial energy bills arrive as PDFs and phone photos in every layout you can imagine. VoltScope sends each one to Claude for schema-constrained extraction into a fixed Pydantic model, then runs deterministic checks the LLM shouldn't be trusted with: MPAN digit counts, subtotal and VAT reconciliation, duplicate charges, estimated reads and contract renewal windows.
The design principle is simple: the LLM does the reading, plain Python does the checking. 50 golden-file tests on real anonymised supplier bills keep the extraction honest.
Python FastAPI Claude API Pydantic SQLite Docker
VoltEdge: energy intelligence platform
Multi-site energy monitoring with per-site isolation forest anomaly detection, causal root-cause analysis using the PC algorithm, Scope 2 emissions reporting, and a Claude assistant that answers questions like "what caused the spike at the London factory last Thursday?" Runs on 90 days of simulated data across four site types.
903 tests · JWT auth with role-based access · Live demo (free tier, give it up to a minute to wake up)
Python FastAPI Plotly Dash scikit-learn NetworkX Claude API Docker
ClinIQ: clinical trial site performance
Tracks enrolment velocity, site risk scores and protocol deviations for mid-sized CROs, with an AI insights layer on top. Built in five phases with 496 tests.
Python FastAPI Plotly Dash SQLAlchemy scikit-learn spaCy Claude API
SalaryAxis: UK salary benchmarks from ONS data
Takes ONS Annual Survey of Hours and Earnings data, adjusts it for CPI inflation, and serves salary benchmarks by region and occupation through a REST API and React dashboard, including gender pay gap trends over time.
Python Flask pandas SciPy React Docker
CVLens: NLP CV analyser
Parses PDF and Word CVs, detects sections, extracts skills with spaCy and generates readable quality feedback.
Python spaCy PyMuPDF python-docx
Lending Club: loan default prediction
Logistic regression model predicting loan default risk on Lending Club data. With balanced class weights it catches 59% of defaults across 451,786 held-out loans, at 21% precision, so it works as a first-pass risk flag rather than an approval decision.
Python pandas scikit-learn
Bezel Charts: charts that look finished the moment you add them. Ten chart tiles drawn in pure SVG (bars, grouped bars, lines, donuts, rings, gauges, sparklines, a scatter plot with a trend line and Pearson's r, and an activity heatmap), each one HTML tag. Build a chart in the Studio from a CSV, Excel or JSON file, paste one line into any site, or export it as a static SVG for a README or slide. Light and dark themes, any locale, accessible to screen readers, about 12 kB gzipped with no dependencies. Live Studio · How I built it
JavaScript Web Components SVG
Bezel: open-source clock, calendar and weather tiles, inspired by Apple's StandBy widgets. Five zero-dependency web components drawn in vectors, so they look the same at 120 px or across a 4K screen, with a Studio to design a tile and share it as a link, automatic dark mode, live weather from Open-Meteo and .ics calendar feeds. About 25 KB gzipped. Live Studio · How I built it
JavaScript Web Components SVG Container Queries
World Map: an interactive choropleth map of 172 countries across seven data layers, including GDP per capita, HDI, CO₂ per capita, life expectancy and internet use. Filter by region or political group (EU, G20, NATO, BRICS+), import your own CSV or JSON, share a view as a link or embed it with a JavaScript API. One HTML file, no dependencies, full keyboard navigation and dark mode. Live demo
JavaScript SVG HTML5
ux-boards: turn one YAML file into UX documentation boards (information architecture, navigation by screen size, wireframes and a visual system with WCAG contrast checks), exported as HTML, PDF and PNG. Live examples
Python Jinja2 Playwright GitHub Actions
Orbs: ten morphing dot-formation animations for the web, from a Fibonacci sphere to a rolling torus, and any shape can morph into any other. One file, about 5 KB gzipped, no dependencies, themed with plain CSS. Live demo · How I built it
JavaScript Canvas
Strata Symbol Kit: 183 layered-line symbols, letters and numbers for designers. Adjust the line count, angle and colour in the browser, then export clean SVG, PNG or a full sprite. Live editor
JavaScript Python SVG
House Prices & the Economy: a free monthly UK data challenge on how house prices rise and fall with jobs, pay, interest rates and the cost of living. Each month brings one plain-English question, free government data and three levels from beginner to expert. Anyone can take part by opening a pull request. November 2026: booms and busts.
Python pandas matplotlib UK House Price Index ONS
Top 50 Universities 2027: the world's top 50 universities from the THE World University Rankings 2027, with each one's location, score and what it's best known for. One Python script turns a CSV into a designed PDF carousel for LinkedIn and 1080×1350 slides for Instagram, and a check script confirms every figure in the PDF matches the data.
Python Playwright SVG GitHub Actions
Technical, on DEV
- Charts that look finished the moment you add them: Bezel Charts
- Apple took a bite out of theirs, so I made the whole apple: Bezel, open-source clock, calendar and weather web components
- How I built morphing dot animations with plain canvas, no libraries (5 KB)
Personal essays, on Medium
Reflections on becoming, connection, and the things that stay with you.
- Co-Evolving: on AI, socialising, and the quiet search for connection
- The Weight of Enough: on consumption, pace, and what it means to have enough
- One Ear, Two Kids, and Fifty Pints of Gratitude: on hearing loss, fatherhood, and counting what counts
- The Road Is Always Calling: on riding, growing up, and the things we pass on
- Building Resilience in the Face of Change: continuing forward when life doesn't go to plan
- The Art of Unlearning: letting go of what no longer fits
- The Art of Becoming: growth, identity, and the person you're still becoming
Python pandas NumPy Jupyter scikit-learn spaCy SQL PostgreSQL SQLite SQLAlchemy Alembic FastAPI Flask Plotly Dash Streamlit Pydantic JavaScript TypeScript React Kotlin Flutter Docker Git pytest GitHub Actions Playwright Claude API Render Railway
Seven apps published on Google Play, all free:
| App | What it does |
|---|---|
| SearchWars | Higher-or-lower game: which gets more Google searches? 3,187 questions across 11 categories. Built in Flutter |
| World Builders | Open sandbox for shaping and growing a world at your own pace |
| Math Adventure | Story-led maths challenges for children aged 3 to 11 |
| Bingo Maths | Maths practice with bingo mechanics |
| Split Flap World Clock | A split-flap departure board of live world clocks, 300+ cities |
| Animated Month Wallpaper | Minimal live wallpaper showing the month, with a live clock |
| Animated Weekday Wallpaper | Minimal live wallpaper showing the day of the week, with a live clock |
Kotlin Java Flutter Android
A set of small developer tools, each with a live demo: Regex Decoder, Cron Decoder, Python Exceptions, HTTP Status Codes, HTTP Headers and Tech Acronyms.
I also design and sell digital products, including generative artwork like KNOK Matrix and Typography Digits, on Gumroad, Envato and Lemon Squeezy: 25 digital products and 50+ projects in all. Everything is on my website.
Open to full-time, contract and freelance work. If you're building something with data or LLMs, I'd like to hear about it.
Shaz Moghaddam · London · shazmoghaddam.github.io




