Twenty-odd years shipping software solutions across numerous languages - for startups, agencies, and stubborn legacy systems. Now independent, and fluent with the AI tools that make building and problem-solving faster - without letting them ship the bugs.
Design-to-production sites and web apps. Fast, accessible, and written so the next person to touch the code doesn't curse your name.
Inherited a codebase nobody understands? I untangle, document, and modernise it - without the from-scratch rewrite tax wherever I can avoid it.
Core Web Vitals, render paths, the unglamorous fundamentals that quietly move rankings and conversions. Measured, not guessed.
Retainer support for sites I built - or ones I didn't. Updates, monitoring, and the occasional calm fix at an uncalm hour.
JavaScript, TypeScript, Python, PHP, Go, SQL and more - twenty years across the stack means I pick the tool that fits the problem, not the one I happen to like.
I work fluently with modern AI tools to prototype, debug, and untangle problems faster - then apply the experience to know what's actually correct before it ships.
Tables for layout, spacer GIFs, and genuinely proud of it at the time. Everyone starts somewhere embarrassing.
Semantic HTML, real CSS, and the firm belief that markup should mean something. Most of that still holds up.
Threw out the fixed 960 grid for good. Learned to design for the device I didn't own yet.
…and, more usefully, learned what not to build with them. Not everything needs to be a framework.
Performance budgets and a11y stopped being a phase-two ticket and became how the first commit gets written.
Adopted AI tooling for prototyping, debugging, and research. It doubled the speed; the twenty years of judgment is still what decides what's right.
Twenty years of other people's payrolls, now freelance. This page is commit one. Your project could be the next.
No account manager translating your needs into a game of telephone. You talk to the person writing the code. That's the entire org chart.
I'll tell you when something's a bad idea, when a cheaper option exists, and when you don't actually need the thing you asked for.
A clear scope and fixed price where it makes sense, transparent rates where it doesn't. You'll always know what the next bill looks like before it arrives.
Tell me what you're trying to do and where it's stuck. A short, honest reply beats a sales deck - you'll get one.