I build interactive experiences that earn their place.
Web development for the design-led team
Full-stack developer with a background in games, which taught me how to use pacing, feedback and a clear next move to bring visitors to the signup or sale.
I own projects and keep them moving. Finding answers, flagging risks early, and don't wait to be asked.
Tech & tools
- TypeScript
- React
- Figma
- Next.js
- Motion
- Tailwind
- Supabase
- Claude
- Unity
Recent work

ShotpotPhoto gallery SaaS for race events
Shotpot is a SaaS product that began with dozens of discovery calls with race organisers and photographers to understand the problem space. Every screen and flow got wireframed in Figma for fast iterations, and I conducted user-testing sessions with photographers (the end users) to refine the UX.
Built with Next.js and Supabase. The whole app's UI lives in Storybook as pure React components. Comprehensive unit testing (Jest), Playwright e2e tests with a full-journey smoke test that runs on CI before promoting a build to production.
Spent a silly amount of time getting the gallery view (the core of the product) highly performant with thousands of photos with a virtualization/windowing engine for seamless browsing.

ShotpotPhoto gallery SaaS for race events
Shotpot is a SaaS product that began with dozens of discovery calls with race organisers and photographers to understand the problem space. Every screen and flow got wireframed in Figma for fast iterations, and I conducted user-testing sessions with photographers (the end users) to refine the UX.
Built with Next.js and Supabase. The whole app's UI lives in Storybook as pure React components. Comprehensive unit testing (Jest), Playwright e2e tests with a full-journey smoke test that runs on CI before promoting a build to production.
Spent a silly amount of time getting the gallery view (the core of the product) highly performant with thousands of photos with a virtualization/windowing engine for seamless browsing.

ShotpotPhoto gallery SaaS for race events
Shotpot is a SaaS product that began with dozens of discovery calls with race organisers and photographers to understand the problem space. Every screen and flow got wireframed in Figma for fast iterations, and I conducted user-testing sessions with photographers (the end users) to refine the UX.
Built with Next.js and Supabase. The whole app's UI lives in Storybook as pure React components. Comprehensive unit testing (Jest), Playwright e2e tests with a full-journey smoke test that runs on CI before promoting a build to production.
Spent a silly amount of time getting the gallery view (the core of the product) highly performant with thousands of photos with a virtualization/windowing engine for seamless browsing.

ShotpotPhoto gallery SaaS for race events
Shotpot is a SaaS product that began with dozens of discovery calls with race organisers and photographers to understand the problem space. Every screen and flow got wireframed in Figma for fast iterations, and I conducted user-testing sessions with photographers (the end users) to refine the UX.
Built with Next.js and Supabase. The whole app's UI lives in Storybook as pure React components. Comprehensive unit testing (Jest), Playwright e2e tests with a full-journey smoke test that runs on CI before promoting a build to production.
Spent a silly amount of time getting the gallery view (the core of the product) highly performant with thousands of photos with a virtualization/windowing engine for seamless browsing.

ShotpotPhoto gallery SaaS for race events
Shotpot is a SaaS product that began with dozens of discovery calls with race organisers and photographers to understand the problem space. Every screen and flow got wireframed in Figma for fast iterations, and I conducted user-testing sessions with photographers (the end users) to refine the UX.
Built with Next.js and Supabase. The whole app's UI lives in Storybook as pure React components. Comprehensive unit testing (Jest), Playwright e2e tests with a full-journey smoke test that runs on CI before promoting a build to production.
Spent a silly amount of time getting the gallery view (the core of the product) highly performant with thousands of photos with a virtualization/windowing engine for seamless browsing.

ShotpotPhoto gallery SaaS for race events
Shotpot is a SaaS product that began with dozens of discovery calls with race organisers and photographers to understand the problem space. Every screen and flow got wireframed in Figma for fast iterations, and I conducted user-testing sessions with photographers (the end users) to refine the UX.
Built with Next.js and Supabase. The whole app's UI lives in Storybook as pure React components. Comprehensive unit testing (Jest), Playwright e2e tests with a full-journey smoke test that runs on CI before promoting a build to production.
Spent a silly amount of time getting the gallery view (the core of the product) highly performant with thousands of photos with a virtualization/windowing engine for seamless browsing.
More projects

ShotpotPhoto gallery SaaS for race events
- Next.js
- TypeScript
- Supabase
- Figma
- Tailwind

ShotpotPhoto gallery SaaS for race events
- Next.js
- TypeScript
- Supabase
- Figma
- Tailwind

ShotpotPhoto gallery SaaS for race events
- Next.js
- TypeScript
- Supabase
- Figma
- Tailwind

ShotpotPhoto gallery SaaS for race events
- Next.js
- TypeScript
- Supabase
- Figma
- Tailwind

ShotpotPhoto gallery SaaS for race events
- Next.js
- TypeScript
- Supabase
- Figma
- Tailwind

ShotpotPhoto gallery SaaS for race events
- Next.js
- TypeScript
- Supabase
- Figma
- Tailwind

ShotpotPhoto gallery SaaS for race events
- Next.js
- TypeScript
- Supabase
- Figma
- Tailwind

ShotpotPhoto gallery SaaS for race events
- Next.js
- TypeScript
- Supabase
- Figma
- Tailwind