Hi.
My name's Will.
I'm a front-end software engineer with a focus on TypeScript and JavaScript tooling. I enjoy creating efficient developer experiences to help deliver great customer experiences.
Welcome to my digital space.
Blog
My thoughts, tips, and what not.
Projects
My side projects.
2n8Minimal TypeScript state boilerplate. Primarily for use with React.
Helston Flora DayAn annual springtime festival in Cornwall, England, featuring traditional dances and celebrations. I designed and maintain the website.- Commits With CharacterA simple convention for conveying semantic versioning to both humans and automated systems via commit messages.
- WAIT! AnimateGiven a wait time, W!A calculates updated CSS keyframe percentages, allowing you to insert a delay between each animation iteration using pure CSS, without JavaScript.
Plastic ThemeA simple syntax and UI theme. Designed to be language-agnostic, with a small colour palette to avoid visual overload.
TingsA collection of small JavaScript utilities.- 5DiceTerminal based game of luck and strategy.
Browserosaurus [ARCHIVED]For macOS multi-browser users. Select from any of your installed browsers when clicking a link in a non-browser app. Now archived.
Links
A list of interesting links I've found on my travels. Follow the RSS feed to be notified when I add more links.
2026
- no slop grenade
- Build desktop apps using Deno
- Nub — an all-in-one toolkit for Node.js
- How to schedule deploys with Netlify
- The O(n^2) Bug That Looked Like Clean Code
- How to Communicate
- I'm OK being left behind, thanks!
- aria-label is a code smell
- Create Your Own Web Development Conspiracy
- npmx — a better browser for the npm registry
- 🐹 Deep clean and optimize your Mac
- Stop turning everything into arrays (and do less work instead)
- Master React 19.2 Async Everywhere — Boost Performance
- Intro to Performance of React Server Components
- React Server Components: Do They Really Improve Performance?
- Sonner - An opinionated toast component for React.
- Date is out, Temporal is in
- Lottery Every Second
2025
- Hyper-Typing
- One Year with Next.js App Router — Why We're Moving On
- State-based vs Signal-based rendering
- You Don't Need Animations
- Optical Toys
- `vi.mock` Is a Footgun: Why `vi.spyOn` Should Be Your Default
- The Useless useCallback
- What makes a senior engineer
- Writing Code Was Never The Bottleneck
- I Used Arch, BTW: macOS, Day 1
- It's rude to show AI output to people
- diff-so-fancy
- Andreas Kling's Keynote Presentation on the Ladybird Browser
- Prefer gaps to margins
- UI Fonts - Test and Preview Fonts in Real-Time