I’m Cameron,
a software engineer
and startup founder.
I build products
end to end, and
tools that make
my team faster.
Evidence for each claim
My car-rally company made £120k in sales.
Nueral platformI did it all: the design, the code and the editor.
Will Aitchison's portfolioOur pull request checks fell from 13.7 to 4.1 min.
Moving the team's platform
Case studies4
2024–26
Nueral platform
The shop and customer portal for a car-rally company I co-founded. I designed it and was its only engineer.
£120ktotal sales across the venture
2026Employer work
Moving the team's platform
Moved our code, checks and releases off an on-premises Azure DevOps server and onto GitHub. Then I built the pipeline that takes a pull request to a running release, on an office server I set up.
67open PRs moved with their review threads
2026
Will Aitchison's portfolio
A portfolio site for Will Aitchison, a fashion photographer in Newcastle. It's laid out like a contact sheet, with no picture cropped, and built for him to run from his own Sanity Studio.
12.9 → 3.7seconds to the first big picture on a throttled phone, Squarespace to new
2025Employer work
Component library extraction
Extracted and reshaped a React component library that had grown up inside the main app, so three apps can now share it.
115 of 120screens in the main app import the library
How I work6
AI writes a lot of my code now. The decisions are mine.
I run several agents in parallel, so my time goes on the big decisions, not the simple code. I review and test every change before it goes anywhere.
Build the right thing.
Technically excellent code doesn't matter if it isn't useful to the people using the app. Running a company taught me to ask what something is for before how to build it.
No excuse for bad UI.
UI and UX should always be immaculate, and there's no reason for them not to be. An app should look beautiful and be easy to use. I keep working on the details until it does both.
Simple code for hard problems.
Complex code for a complex problem is easy to write. Simple code for the same problem is harder, and it's what I aim for. SOLID and YAGNI aren't original, but they've lasted for a reason.
Code for the next person.
Huge files, inconsistent structure and code doing three jobs at once make life harder for whoever comes next. When I fix a bug, I leave a test so nobody has to fix it twice.
Improvements, not preferences.
People write code differently, and that's fine. I push back only on a real improvement or a broken rule. I read the AI's review before passing it on, otherwise it turns into AI ping pong.
Fundamentals first.
Like in boxing, the fundamentals are everything. Even with AI writing so much code, I'd teach a new frontend developer how JavaScript and React really work. The rest builds on that.
Other work13
2026
The whole app, mapped and seeded by agents
Employer work
The whole app, mapped and seeded by agents
I mapped the whole app, front end and back end, with a large AI workflow: 1,625 screens, routes and endpoints and 54 business processes, checked against the running app. Then agents built a demo dataset on that map for a deployed sandbox of the app, so every section has realistic data to show. An engineer on the team validated it.
- Claude Code
- AI agents
- MongoDB
2026
Schema editor app
Employer work
Schema editor app
The product's forms and grids are generated from JSON type definitions. I built a local-first editor for them on my own, and it opens the files straight from disk. One immutable model sits behind an editable grid, a code view and a form view, and a live preview renders the real library components with generated data. In August I wrote 255 tests for it across 41 files, and they found 3 bugs. Colleagues now build on it, and the old AngularJS editor it replaced has been removed.
- React
- TypeScript
- Immer
- File System Access API
- Vitest
2026
Agentic development at work
Employer work
Agentic development at work
I rebuilt the team's agent guidance, now 17 guidance files and 9 skills, and gave each worktree its own ports and database. I also teach the team to run agents in parallel.
- AI agents
- Git worktrees
- Node.js
- MongoDB
2025–26
Multi-site dev environment
Employer work
Multi-site dev environment
Runs four replication sites on one machine, each with its own database and two backend servers. The frontends are shared, and the port picks the site.
- Docker Compose
- Node.js
- MongoDB
2025
Operations app
Employer work
Operations app
A React app for running the replication system, replacing an AngularJS one. I built the whole app on my own. It works in three languages and was strict TypeScript from the first commit.
- React
- TypeScript
2025
Multi-select combo box
Employer work
Multi-select combo box
A combo box for picking several records or labels in one field, from lists too long to load at once. It searches on the server as you type, loads 250 rows at a time as you scroll, and draws only the rows on screen, on the virtualised list I built for the command palette. Picked values stay picked through new searches and restored ones. It sits behind the label field on most screens and the record fields in the advanced search.
- React
- TypeScript
- Fluent UI
- react-window
2024–25
Technical document editor
Employer work
Technical document editor
A Word-style editor for technical documents, built on Lexical. I wrote all five of its custom node types, including figures, captioned tables and admonitions.
- React
- Lexical
- TypeScript
2024
Command palette
Employer work
Command palette
A keyboard-first launcher for jumping to any screen. I wireframed it in Figma, then built it on a virtualised list I wrote, which the app's dropdowns now use too. It remembers your recent screens and hides the ones you can't open. Its 40 tests include one that holds 1,000 items to rendering in under half a second. Colleagues have built on it since.
- Figma
- React
- TypeScript
- react-window
- Vitest
2024
Toolbar editor
Employer work
Toolbar editor
Each person sets up their own top toolbar on a Kanban-style board: drag menus and items into place, with menus nested inside menus to any depth. Built with dnd-kit.
- React
- TypeScript
- dnd-kit
2024–25
Advanced list search
Employer work
Advanced list search
I rebuilt the app's advanced search in React, from a colleague's older version. One form serves every list in the app: it reads each field's type and offers only the operators that fit, like "contains" for text, "between" for dates and "is empty" for anything. I wrote the query builder behind it and all 85 of its tests. In 2025 I redesigned the form, grouping fields into four categories so a long form is quick to scan.
- React
- TypeScript
- Fluent UI
- Vitest
2023–26
Dashboard builder
Employer work
Dashboard builder
Dashboards that admins build for each role: drag and drop charts on a grid with Gridstack, nine kinds of chart drawn in visx. In 2026 I moved the charts onto Fluent UI's own, to keep the app in one design system, and sent Microsoft a fix (opens in a new tab) for a bug I found in them, now approved by two of their maintainers.
- React
- TypeScript
- Gridstack
- visx
- Fluent UI
2023–26
Frontend testing
Employer work
Frontend testing
There were two unit test files when I joined. I wrote many of the first tests as we brought in Jest, moved us to Vitest in 2024, and in 2026 wrote many more.
- Vitest
- React Testing Library
- TypeScript
2023–24
AngularJS to React
Employer work
AngularJS to React
My first job on the team was moving about 30 screens from AngularJS to React, with tests for each one.
- React
- TypeScript
- Fluent UI
- AG Grid
- Vitest
About
I didn't plan on software. I studied chemical engineering because it followed from my subjects at school, and by the end of second year I knew it wasn't for the rest of my life. The part I was best at was MATLAB, my first taste of code.
During uni and just after, I tried business. Vintworx sold vintage clothes but didn't pay the bills. A logistics company with a friend did, but it wasn't me. I needed a real skill, and I picked software. You can build anything from nothing but time, and you get to watch it take shape.
Now most of my work is React and TypeScript, with Node behind it. At Isherwoods I build the next version of their maintenance-management software, and UI work tends to land on me, which suits me fine.
Starting a business is hard on your money, your head and your social life, and some days the only option is to keep going. It made me a generalist. Beyond the code, I've done design, product management, DevOps, finance and event planning, and made decisions with nobody to ask. AI lets me do more with all of that than I ever could.
I do my best work in a team that challenges my ideas and keeps me learning, somewhere that uses AI rather than resisting it.
Off the clock
I've boxed since 2021. I train, spar, and I've had two fights. It's the one place you have to be fully present. The rest of the time I'm seeing friends and family, trail running or hiking.
I listen to all sorts of music, but techno is always the constant. Right now that's a lot of Klangkuenstler, Parfait and Amelie Lens.
A lot of the last two years has been road trips. Northern England to Marrakech three times, and the UK to Ukraine with Driving Ukraine. Seeing the impact of the war was an eye-opener, but people still live their lives. I even ended up at a techno night in Kyiv.