Four things I have worked on, and what I actually did on each.
TOKENS
Rebuilding and redesigning the site for a global card product
I led the redesign, refactor and rebuild of a marketing site for a global multi-currency card product. The goal was to bring the site closer to the product it represented, and make it relevant to a much wider range of customers.
React · Next.js · Tailwind CSS · Design systems
MOBILE
The mobile app for the same global card product
A separate React Native application for the same product, with its own codebase and its own platform-specific considerations. It shares the same back-end APIs and much of the same design language as the web app, while being designed around the conventions and constraints of iOS and Android.
React Native · Expo · TypeScript · iOS · Android
PROVISION
Apple Pay push provisioning in a card issuing app
I worked on push provisioning in the app, allowing cardholders to add their cards to Apple Wallet in a few taps. I worked with Visa's VDE SDK to handle the provisioning flow into Apple's Wallet APIs, including the eligibility checks, secure card-data handling and the integration back into the app.
Expo · React Native · TypeScript · iOS · Swift · Visa VDE SDK · Apple PassKit
REVIEW
Code review for an outsourced fintech project
I was brought in to review the React and TypeScript work coming from an outsourced team on another fintech product. With a focus on keeping the codebase consistent and maintainable, I reviewed pull requests, suggested changes where needed, and helped explain the reasoning behind them.
Code review · Git · TypeScript · React · Next.js
What I actually reach for, and how often. Pick a name to see where it turns up on this page.
Interface
- Daily. Production components, hooks, composition. Server and client boundaries in App Router.
- Daily. App Router, route handlers, static generation, metadata. This page. Statically generated, one route handler.
- Daily. Strict mode. Types as a design tool rather than a formality. strict, plus noUncheckedIndexedAccess. Zero errors.
- Daily. v4, CSS-first. Tokens in @theme, no arbitrary values in components. Six colour tokens. Grep this repo for a square bracket.
- Daily. The same product, carried in a pocket. Shared logic where it earns its keep, native where it doesn't. See PROVISION.
Craft
- Regular. One system with a governing logic, not a pile of effects. Four verbs on this page: spin up, measure, bin, commit.
- Daily. Keyboard operability, focus management, contrast, reduced motion as a design. Tab through this page. Try it with reduced motion on.
- Regular. Transform and opacity in hot paths, lazy boundaries, honest bundle budgets.
- Regular. Zod schemas shared between client and server. Errors that say what to do. The form below validates against one schema, twice.
Working
- Daily. Deliver small, valuable increments. Optimize for feedback over certainty.
- Daily. Design interfaces that make the right thing obvious. Good design reduces cognitive load.
- Daily. Small commits with reasons in them. Rebase when it helps the reader, merge when it does not.
- Daily. Reading other people's code carefully and saying the useful thing rather than the clever one.
- Regular. Continuously improving and maintaining my own tools and interfaces outside work — because using something well-made is better than using something merely functional.
Reduction pass
The TOKENS refactor, performed rather than described. Scroll.
22/22 arbitrary values remaining
- p-[13px]p-3
- text-[#3a3f5c]text-muted
- gap-[7px]gap-2
- mt-[22px]mt-6
- bg-[#11141d]bg-bench
- rounded-[3px]rounded-xs
- text-[13px]text-micro
- px-[19px]px-5
- leading-[1.62]leading-relaxed
- border-[#232a3c]border-rail
- w-[268px]w-64
- duration-[240ms]duration-quick
- text-[#63d2e8]text-intake
- mb-[42px]mb-10
- tracking-[0.08em]tracking-label
- pt-[57px]pt-14
- shadow-[0_1px_0_#232a3c]shadow-plane
- text-[11px]text-readout
- gap-[13px]gap-3
- bg-[#ffa25c]bg-exhaust
- ease-[cubic-bezier(.16,1,.3,1)]ease-entrance
- max-w-[1200px]max-w-measure
Less guesswork. More consistency.
Freelance work, a role, or a question about something above. All three land in the same inbox.
Or email directly
If you landed on the technical page but what you actually need is someone to build you a fast, tidy site — and you would rather not read about width axes and contrast ratios to find out whether I am pleasant to work with — start over here instead.

