Uses
What I build with
Tools earn their place by staying out of the way. This is the current set.
Editor & terminal
VS Code
Primary editor, with Vim keybindings and a minimal extension set.
JetBrains Mono
Editor and terminal typeface. Also sets the metadata on this site.
Frontend stack
React + TypeScript
The default for anything with more than one screen.
Redux Toolkit & RTK Query
Server state and client state kept separate, with caching handled once rather than per screen.
Tailwind CSS
Token-driven styling. The design system on this site is built on Tailwind 4 theme variables.
TanStack Query
Server state handled as a cache with rules, rather than as a pile of loading booleans in component state.
TanStack Table
Headless tables, so sorting and pagination come for free and the markup stays mine.
Vite
Build tooling for everything new.
Testing & measurement
Vitest
Runs the unit and integration suite. Same transform pipeline as the app, so there is no second build to keep in sync.
React Testing Library
Tests written against what the user can see and reach, which is why refactors rarely break them.
Google Analytics 4
Events named after the behaviour rather than the element, so the reports still make sense after a redesign.
Google Search Console
The only honest source for which pages are actually indexed and what they rank for.
Lighthouse & PageSpeed Insights
Lab numbers for catching regressions, field data for deciding what is worth fixing.
This site
TanStack Start
Full-stack React framework with type-safe routing, server functions and per-route document head control.
TanStack Router
Typed file routes, so a wrong link or a missing param is a build error rather than a 404 someone finds later.
OKLCH colour
The whole palette is defined in OKLCH so lightness steps stay perceptually even across both themes.
Available for work
Have something worth building?
I'm open to frontend roles and freelance work. Tell me what you're working on and I'll tell you honestly whether I'm the right fit.