Projects

A few things I’ve built, and what they taught me.

Still building

These two are in active development on Bits to Live By, which started in 2021 as a small blog of simple bits on getting stuff done and has grown into my engineering publication and lab. That’s where each one gets the full story: docs, design decisions, and the evidence for and against it. Here’s the short version.

FeatureKit

Keep the speed. Lose the mess.

FeatureKit came out of a problem I kept running into: coding agents that write fast and leave a mess behind, usually because nobody properly worked out what we wanted before they started.

It’s a set of plain-Markdown skills for Claude Code, Codex and OpenCode. The agent agrees a written plan before it writes any code, builds in thin slices that each work end to end, and records evidence for every acceptance criterion before it calls the work done. No CLI, no server, no runtime.

It’s also an experiment, and it’s been wrong plenty of times. My favourite: a clever routing optimiser that, in calibration, picked exactly the level the caller had already asked for, eleven times out of eleven. A beautifully elaborate way of agreeing with myself. Release 0.11 deleted it.

Baseline, Tokens, Layouts, Behaviors

From vibe to system.

Products drift out of step with their design systems. This is my answer to that: CSS in four cascade layers, with a few strict rules for writing against them. Semantic HTML is styled before it has a class, components use tokens that name a meaning rather than a value, space comes from named layout patterns, and state lives in attributes. A design change then lands in one place and flows through.

It ships on npm as @btlb/css, works with any framework, and Bits to Live By is built with it. Any friction I hit there goes back into the method.


Earlier work

Things I built before Bits to Live By. They’re not what I’m working on now, but a lot of what I know started with them.

FRAMEALOT Online custom framing made easy www.framealot.com

I love building things, and not only in code. I’ve been picture framing for years, and I’ve framed countless artworks, certificates, medals and just about anything else you can imagine.

It didn’t take long to realise software could make the framing easier, starting with working out what a frame would cost. That little price estimator, Qgo Framer, was the start of a passion project that grew into Framealot, an online shop where you design your own frame.

When it came to building the shop, I tried Magento, nopCommerce and Reaction Commerce, and none of them did quite what I had in mind. So I took a deep breath and built my own eCommerce platform from scratch. 😲 It’s been my best teacher on the whole software life cycle, because when it’s your own product, every decision comes back to you.

I picked the tools based on what I’d learnt as a full-stack developer: StencilJS for Web Components that ran in every browser, RxJS for the data flowing through the app, ASP.NET Core and EF Core over MariaDB, Jest and Puppeteer for the tests, and Jenkins delivering continuously to production.


Farm-IT

At Farm-IT I built desktop and web applications for the agricultural sector, and I was lucky enough to choose whatever stack best solved the problem in front of me. That freedom taught me that choosing your own stack is a big responsibility, because it shapes the whole life of a project.

I enjoyed designing interfaces that let people solve complex problems simply. I’m a firm believer that less is more, and in software that usually means less work for the person using it.

From the start I wanted these apps to work as well offline as online, and I was building web apps that way in 2012, before progressive web apps had a name.

GeoLIS

A GIS application silo managers used every day to run their operations. It was one of my first enterprise projects, finished in 2009 while I was still a junior developer, and it was still in daily use more than ten years later. I’m quietly very proud of that one.

A Windows desktop app in WPF with the MVVM pattern and Dapper. It kept its data in SQLite and synchronised with SQL Server, so it carried on working offline, and its reports ran in SQL Server Reporting Services.

GeoFarm

A single-page application for agronomists, managing input budgets against what was actually spent, field by field on the map.

It started on AngularJS and was later upgraded to Angular 4, with NgRx for state and OpenLayers showing vector and raster data from GeoServer. ASP.NET Web API and SQL Server sat behind it, and Jasmine and Karma tested the components.

A few of the GIS problems I wrote up at the time, like getting MapGuide to serve SQL Server 2008 spatial data, filtered per user. They’re in the archive on Bits to Live By, kept as they were written.

There are plenty more stories where these came from. If you’d like to hear one, say hello.