
Guitar
An interactive guitar-scale finder and fretboard practice tool — visualise any scale or mode across the neck.
React, TypeScript, Zustand, Tailwind, Radix UI, Web Audio, Vite
Full-stack development that actually ships. Backend, frontend and the AI in between, from one developer who owns the whole slice.
I've been building software professionally for over a decade, across backend systems, full-stack products and, increasingly, AI-powered interfaces. I'm comfortable owning a full slice of the stack: from data schema and API design to UI animation and design tokens.
I reach for whatever fits the problem. React or Vue on the frontend, Node, Bun or Python on the backend, Go or Bash when a CLI is the right tool. What stays constant is starting from the problem, not the technology.
Things I've built on my own time. Several are live, and the source for all of them is on GitHub.

An interactive guitar-scale finder and fretboard practice tool — visualise any scale or mode across the neck.
React, TypeScript, Zustand, Tailwind, Radix UI, Web Audio, Vite

A real-time group chat supporting over 100 AI models — swap between them mid-conversation and let them talk to each other.
React, TypeScript, Socket.io, Bun, Redis, Express, OpenAI, Anthropic, MCP, ChromaDB, Zod, React Router, Framer Motion, Tailwind, Vite, Turbo, Docker

A personal code snippet manager with syntax highlighting, fast search, and a polished Glass-UI built from scratch.
React, TypeScript, Glass Design System, Tailwind, Zod, PostgreSQL, Node, Fastify, Vite, GSAP, Drizzle, Docker, React Router, React Query, CodeMirror, OAuth

An interactive 3D globe of average monthly temperature — scrub through the year and watch the seasons move across the planet.
TypeScript, Three.js, WebGL, TopoJSON, Tailwind, Vite

A pedalboard for media files — patch effect pedals together with cables, turn the knobs, and render audio, images or video in a single ffmpeg pass.
React, TypeScript, Jotai, Vite, Node, Fastify, BullMQ, Redis, Zod, FFmpeg, Docker

A server's live network traffic on a spinning globe — a Go collector sniffs packet headers, places each remote host on the map, and streams the arcs to the browser.
Go, gopacket, Server-Sent Events, TypeScript, Three.js, WebGL, TopoJSON, Vite, Docker

Millions of glowing particles you steer through 3D space with the mouse — simulated and drawn entirely on the GPU with WebGPU compute shaders.
TypeScript, WebGPU, WGSL, Tweakpane, Vite

A self-hosted link saver — paste a URL and it's filed under the page's own title, in a category of your choosing, with Google sign-in and instant search.
React, TypeScript, Zod, Drizzle, PostgreSQL, OAuth, Express, Vite, React Router, React Query, Framer Motion, Tailwind, Bun, Docker

The design system powering this site — glassmorphic components, animated backgrounds, and design tokens for dark-first UIs.
React, TypeScript, CSS, Tailwind, React Router, Vite

A clock that tells true solar time at your exact longitude — up to half an hour off the one on your wall, with a map of the timezones to show why.
JavaScript, Leaflet, OpenStreetMap

A serene, real-time visualisation of the night sky rendered directly in the browser — no libraries, just maths and a canvas.
JavaScript, Canvas, Vite

Markdown notes with fuzzy search that forgives typos, a shortcut for every action, and an AI remix that rewrites a note in another voice.
Node, Express, SQLite, TypeScript, Sequelize, React, React Router, Zod, Tailwind, Vite, OpenAI, React Query, Framer Motion, Docker
Keep count of your habits, good and bad — tap + each time, and it works out your streaks, a year at a glance, and the hours and weekdays you tend to do it.
Vue, Pinia, Vue Router, VueUse, TypeScript, Tailwind, Vite, Node, Express, Prisma, SQLite, Zod, Docker

Describe what you're naming and get AI name ideas, each checked for a free domain while you watch — straight from the registries' own RDAP servers.
React, TypeScript, Hono, Node, OpenAI, RDAP, Zod, Vite, Docker

Upload a song and get a tab to play along with — the bass or guitar is separated from the mix, transcribed, fretted onto the neck, and scrolled in sync with the recording.
Python, FastAPI, PyTorch, Demucs, Basic Pitch, librosa, alphaTab, TypeScript, Vite, Docker

A gallery of GLSL shaders, one technique at a time — turn the controls, scrub through time, edit the code live, and read the maths behind each one.
TypeScript, WebGL, GLSL, Tweakpane, CodeMirror, KaTeX, Vite

A glass cube with a glowing S at its heart — drag to spin it, hold to charge it, and let go to send a pulse through the light lines behind it. It's the hero of this site too.
JavaScript, Three.js, WebGL, GLSL, Vite

A desktop in the browser, first built for a university course — frosted-glass windows you can push around with several fingers at once, with a memory game, notes and themes inside.
JavaScript, Web Components, CSS, Vite

67 core AWS services laid out like a real architecture — pick one to see what it does and how it connects, or follow a guided tour through a common setup.
TypeScript, SVG, Vite

This site — prerendered at build time and hydrated in the browser, with SpinCube in the hero, and every screenshot on it taken by a Playwright script.
React, TypeScript, Glass Design System, Tailwind, Three.js, Playwright, Vite
Everything used across the projects above. Bigger means more projects use it.
Pick a technology to see which projects use it.
Have an interesting project, a tricky problem, or just want to connect? Send me a message and I'll get back to you.