Craig Hawkes
Lead front‑end engineer · near Glasgow
Design systems, accessibility and payments.
Open to lead and principal front‑end roles, full time or contract, remote or hybrid. I build the system, the product that sits on top of it, and the gates that hold both.
React · Next.js · TypeScript · .NET · Design tokens · WCAG 2.2
Mobile payments up 80%.
That phone is the payment screen I built for an FCA‑regulated debt collection estate, after about six developers had tried moving it before me. Go on, pay. It's a demo and nothing leaves the page.
craig@craighawkes.dev
Seven in ten. One thumb.
Axe finds 0 violations on every screen in here, in both themes. Make the text twice the size, turn the contrast all the way up, and it still works.
- Axe violations0
- Contrast pairings checked360
- Text at 200%fits
Glare: a rough idea of what bright screens do to some dyslexic readers. The words won't sit still.
Read it your way
- For
- Lead and principal front-end roles
- Terms
- Full time or contract
- Where
- Remote or hybrid
It's 9:41 in Hamilton, Scotland. I'll answer today.
Pay attentioncraig@craighawkes.dev
Before · BPO Collections, 2025
It used to take four screens to pay a debt.
Find your account, pick an amount, type your card, confirm it, then a 3D Secure redirect on top. Every one of those screens is where somebody already in arrears puts the phone down and decides it can wait.
Under it sat 299 VB files, 101 Web Forms pages and 131 SQL scripts. About six developers had tried moving it from SagePay to Fiserv, and none of them reached testing.
Six people had tried it. They asked me. I said yes.
After · three months in
Mobile payments up +80%
Mobile payments, in the three months after it went live.
For every ten that used to come in on a phone, eighteen do now, and seven in ten of those go through Apple Pay, because the button is right there on the one screen and it takes a thumb. 3D Secure, Google Pay, Open Banking and Direct Debit all live in the same flow.
Under the button
I wrote the payment library on my own, and not one cutover failed.
It has 8 gateway operations and 20 request and response types, and every request is signed with HMAC‑SHA256. Retries are idempotent: the client request ID means a timeout can't charge somebody twice. That's what you felt when you pressed pay twice up top.
Zero failed cutovers matters more to me than the 80%, because of who is on the other end of it:
when it breaks, somebody already in arrears can't pay, and they'll assume that's on them.
Paul McFadden Wealth · Head of Web, Dec 2022 to Jan 2024
£10m+
of revenue came through the funnels and event pages I answered for.
I ran the web department for a property education group: over 60 websites, four course‑launch platforms I built end to end, and a team of seven I co‑managed, two of them hired by me. Open rates went up 60% and cold outreach replies up 27%.
The funnel breaking was my problem at nine on a Sunday, and every argument about page speed, form length and one more tracking script landed on my desk.
inclusive.io · co‑founder, Feb 2024 to now
117 components. Built twice.
inclusive.io is a design system and the applicant tracking software built on top of it. I built the 117 components, then rebuilt the lot for V2 because I couldn't leave it alone. Axe finds 0 violations in both themes, and 360 contrast pairings are checked on every run. That checking found nine real defects nothing else had caught.
The phone is running a slice of it. Put the text to 200%, turn the contrast all the way up, or switch on glare, the moving text some dyslexic readers live with, and it still works.
inclusive.io · the real app
Have a look through for yourself.
This is inclusive.io, the running app, not a recording of it. Click the window to use it: open the candidates, switch the theme, push the text to 200%, tab through it. The people in it are seed data, the software isn't. If something breaks, I'd rather hear it from you than find out later.

Quoin · open source
Print's had baseline grids since metal type. The web still hasn't got one.
Quoin puts a web page on a baseline grid and measures how far it drifts off one. I pointed it at my old site next to eight design systems and it came last of the nine, at ninety distinct drift values. I published that. Then I got it from ninety down to fourteen, and it now seats this page on the grid when it loads.
fuck ups do happen, we all make mistakes, and trying to pretend we never do is just lying through our teeth.
Hire · open now
Tell me what's on fire.
Open to lead and principal front‑end roles, full time or contract, remote or hybrid, from Hamilton, near Glasgow. I answer email the same day.