Skip to content

Available for 25-30 hrs a week

An experienced developer who understands design.

Freelance Next.js developer for design-led studios.

I'm Rhys. I take build work off studios who've won more than they can staff, and ship it the way your designers drew it: to the pixel, to the millisecond, measured.

Lighthouse 100 / 100 / 100 / 100 / 100 desktop, lowest of fiveCLS 0.0000 on all 5 routesaxe-core 0 violations at 1280 & 360works with JavaScript off24 tab stops, 0 without a focus ringquality gate last run clean 26 Aug 2026

Selected work

My GitHub, in website form. Three builds, every number measured on the live site.

Meridian's staff schedule for Tuesday 25 August: four confirmed appointments across two practitioners, with day navigation and a practitioner filter.

Booking platform

Meridian

A booking system for a three-practitioner clinic: a multi-step flow with URL-addressable state, a real availability engine, and a staff-side week grid.

All nine routes render with Postgres stopped

  • Next.js
  • React
  • Postgres
  • Drizzle
  • Tailwind
Fieldnote's homepage: a serif masthead, a one-line description of the quarterly, and the lead article, The Tideline Moves Twice a Day and Nobody Told the Map Makers.

Editorial site + headless CMS

Fieldnote

A magazine site on Sanity: a content model an editor can use without a manual, side-by-side draft preview on the real site, and revalidation driven by a publish webhook rather than a timer.

Lighthouse 97 / 100 / 100 / 100 / 100, mobile

  • Next.js
  • Sanity
  • Portable Text
  • Tailwind
  • Vercel
Ledger's overview: monthly recurring revenue of £3,439,147, 2,931 active customers, and a 24-month revenue chart with a bar chart of net movement beneath it.

Analytics dashboard

Ledger

A dense SaaS dashboard over 4,000 seeded customers: server-side filtering and paging, cohort grid, and charts that stay readable at 360px and in greyscale. Tested by listening to it with a screen reader.

20 NVDA scenes, transcripts checked into the repo

  • Next.js
  • React
  • Postgres
  • Drizzle
  • Tailwind

These are my own builds, made to show how I work. They are not client projects, and not written for a brief anyone paid for. Every number on this site is measured against the deployed build, and the method is in each repo.

How the numbers were arrived at

Lighthouse, desktop, every category
100×5
CLS, worst of five runs, all routes
0.0000
axe-core violations at 1280 & 360
0
Routes prerendered, JS-off content
10/10

Measured, not asserted

Every number on this site was run against the deployed build after the last commit. Lighthouse figures are the lowest of five runs, not the median. Where a score went up between measurements without a change that could explain it, the README says so instead of banking it.

Checks that can fail

A green check that cannot go red is worse than no check. Every probe in these builds was run against a page carrying the defect it looks for. One audit found four of a sweep's own checks quietly passing, including a sideways-scroll test behind which both chart axes had been invisible at 360px for months.

The cost is written down

Each build has decisions in it that cost something: a slower request after publish, ten SEO points on one route, no loading skeleton. They are in the READMEs with the price attached. A studio inherits those trades, so it should be able to read them before it inherits them.

What I take on

Marketing & editorial sites

Next.js front ends on Sanity, Storyblok or Contentful. Structured content models editors understand without a manual, preview that actually previews, and pages that stay fast after the client adds four hero videos.

Web applications

Auth, dashboards, booking flows, multi-step forms, integrations. Server components where they help, client state where it is needed, and tests around the parts that would embarrass us both.

Performance & accessibility

Core Web Vitals as a delivery requirement rather than a nice-to-have, and WCAG 2.2 AA as the baseline. If you sell accessibility to your clients, I will not be the reason the audit fails.

How I work with studios

Engagement
Day rate, or a fixed fee on a defined scope. Your call.
Availability
25-30 hours a week, ongoing. Not a one-off.
First job
Happy to start with a small paid piece before anything client-facing.
White-label
Standard, and taken seriously: NDA and non-solicitation signed up front, no trace of me in the code or the deliverables. Your name on the work, and your client relationship stays yours.
Your process
Your PM tools, your repo, your review flow. Mid-project pickups are fine. I read the code before I judge it.
Handover
A README that explains the decisions, not just the commands. Commit history you can read.
After launch
A bug-fix window on every delivery, agreed in writing before the work starts.
Business
Sole trader, invoicing under my own name. Professional indemnity and public liability in place before the first engagement.