Product Engineering
Full-stack Next.js / React applications — architecture, data, and UX as one system.
Building software that works beautifully beneath the surface — across desktop applications, web platforms, AI systems, computer vision, and the layers that connect them.

I enjoy working across layers because the most interesting problems rarely stay in one place. A slow screen might be a query issue. A clumsy workflow might start in the UI but end in application logic. A product that feels simple usually depends on careful decisions underneath it.
That is the part of software I like most: understanding the whole system. UI, application logic, databases, APIs, AI workflows, computer vision, and desktop software all become more useful when designed to work together instead of being bolted together.
Based in Cambridge, UK, I build products that aim to be technically serious and pleasant to use. Not just functional. Not just visually polished. Both.
A portfolio should show systems, not just screens. I design the grid, tune the typography, wire the API, write the tests, and ship the whole thing — so the parts that are supposed to feel invisible actually stay invisible.
Specialty spans editorial front-ends, creative motion, and pragmatic backend architecture. Motion is always a reward for the user — never a tax on load time or battery.
Full-stack Next.js / React applications — architecture, data, and UX as one system.
Motion-first interfaces with framer-motion, GSAP, and WebGL where it actually matters.
REST + Edge runtimes, Postgres schemas, queues, and reliable async flows.
Typography systems, editorial grids, and restrained palettes that hold up over time.
LLM orchestration, RAG pipelines, streaming UX, and tools that feel natural instead of bolted on.
Strongest work first. FoodFinder leads because it is a single coherent system combining computer vision, desktop engineering, data, product thinking, and AI. The supporting projects show different constraints — delivery, infrastructure, packaging, and pure tooling.
FoodFinder is a Java Swing + SQLite desktop app that combines OpenCV webcam barcode scanning, local pantry storage, nutrition lookup, AI recipe suggestions, and offline-first data storage.
Product barcode capture via webcam using OpenCV + JavaCV.
Structured nutrition lookup with local SQLite persistence.
Gemini AI-assisted recipes tied to what you actually have.
Recipe Roulette, dietary filtering, meal plans, grocery lists.
Desktop-first offline architecture — no cloud lock-in.
This website you're looking at. Fast, modular, content-driven, built with Next.js + TypeScript + Tailwind.
Windows desktop app + edge platform for graphics pack installation, GPU tuning, signed NSIS installer, Cloudflare licensing.
Fast scientific calculator with typing, variables, history, 2D plotting, and unit conversion.
Lightweight DoH CLI for Netlify custom-domain DNS diagnosis. Triple-resolver consensus, exact fix steps.
Java Swing + JavaCV desktop suite for face detection, feature extraction, and live camera preview pipelines.
The portfolio is arranged like the work itself — flagship product first, then a tighter set of supporting projects with different engineering constraints. It is meant to read like evidence, not a gallery of equal-weight cards.
Typed, modular, boring-by-default code that explains itself under pressure. Engineered from interface to data, not just the visible layer.
Turning ambitious design into real, responsive, maintainable interfaces without dumbing down the visuals or killing performance.
Fast static sites, edge-rendered pages, reusable UI systems, and deployment pipelines that actually keep working after launch.
Using AI and computer vision where they add real value: barcode pipelines, nutrition lookup, recipe reasoning, vision features. No buzzwords.
Thoughtful flows, keyboard-first navigation, editorial typography, and interfaces that feel deliberately composed instead of improvised.
Relational schemas, local offline-first stores, edge object storage, and data boundaries that keep systems understandable long-term.
Switch systems, inspect a layer, and see the responsibility, rationale, and data flow behind the product.
Nutrition assistant · Java · SQLite · Gemini · OpenCV
Java 21 · Swing · FlatLaf · JXMapKit · ZXing
Render the UI, accept barcode and manual input, present nutrition, recipes, and assistant replies without blocking the event-dispatch thread.
Java Swing gives FoodFinder a fast, native-feeling desktop application with zero Electron bloat while still supporting the full barcode + map + AI feature set.
Split every window into a Presenter + Swing View pair so the UI is thin, testable, and never mixes business logic with component listeners.
Barcode scan → SwingWorker off EDT → Presenter emits immutable state → View re-renders from state only.
The homepage stays focused. The playful and exploratory work lives here instead.
A heavier interactive constellation experience moved out of the homepage and into the lab where it belongs.
A lightweight interactive page that makes the portfolio feel more alive without overwhelming the main experience.
A browser tool for focus sessions and habit rhythm, designed to be useful instead of decorative.
An in-browser strength and entropy checker that stays practical and privacy-friendly.
Netlify DNS diagnosis CLI with structured resolver checks and remediation output.
Desktop calculator product with plotting, unit conversion, packaging, and release workflow.
The portfolio itself: content architecture, design system, static export, and interaction design.
The part of the portfolio that keeps it alive.
AI applications that feel grounded in actual product use
Computer vision workflows that solve practical problems
Modern desktop software with better delivery and better UX
Edge infrastructure and interactive web experiences
A space for writing once there is enough to say. Posts only appear when the underlying work justifies the words — nothing is fabricated for the sake of density.
Shipping-focused posts about the work currently in progress.
Notes on new technologies, patterns, and engineering lessons.
Small throwaway experiments from the Lab that went somewhere.
Longer writing about craft, product, and engineering taste.
Content is only published when the underlying work is real. If a section reads empty, it is because I have nothing worth saying there yet.
Product work, engineering hires, collaborative problems, or technically ambitious things that need someone comfortable from the interface down to the data layer. Send a note — replies are human, fast, and direct.