Recently

Journal / recently

Managing Email Signatures Still Sucks...

Back in December 2009, I wrote three sentences about email signatures. The gist was: every email client handles signatures differently, rolling them out across a business was a pain, and surely someone could fix this with a URL schema and a bit of server-side logic?

I was running Nine Four at the time, I’d probably just been through the ritual of building an HTML email signature template for a client and aside from wrestling with Outlook’s rendering engine, I was probably also realising what a pain it was going to be for the client to roll it out in a reliable way.

Now… some seventeen years later, I’m going through exactly the same exercise, however this time I’m the client, and I’ve got a proper reason to find a solution to that distribution problem, beyond an abstract blog-able frustration.

We’ve been doing a fairly thorough review of our prospect journey and somewhere in the middle of that process it’s become pretty uncomfortable for me to see how inconsistent our email signatures are. Different fonts, some with social media icons, some without, broken layouts, old links, old branded promo banners - it’s a hot mess.

The current process, if you can call it that, is that we periodically send round an email asking colleagues to cut and paste a signature in their email client. Some of us do it the same day, some of us forget (guilty!) and sometimes we copy and paste it but mess up the formatting when trying to personalise it to our own needs.

Of course over time… all of this just continues to drifts, until the next round of “can everyone update their signatures please” and the cycle repeats… :D

This might feel minor in isolation but when I zoom out and think about the cumulative brand impression across millions of outbound emails every year, it’s nuts that we’re OK with this process.

It amazes me that in the seventeen years that have passed since that post… neither Microsoft or Google have done anything meaningful to resolve this gap - thankfully a bunch of independent businesses have been emerged around providing a solution (we’ll be checking these out!).

Some of these work by routing all your email through their servers (Arghhhh! GDPR minefield!), but more recently it looks like a number have started to adopt a more sophisticated approach, leveraging APIs in Outlook and Gmail to inject signatures on compose events, that feels much more like the way this should happen, and not far off what I was imagining way back in 2009.

Missed opportunity perhaps?

Closing the chapter on ExpressionEngine

Last week, Ryan Masuga - the dude who built and ran devot:ee, the ExpressionEngine community add-on marketplace - posted on LinkedIn to mark the 16th anniversary of its launch on 1 May 2009. I’d thoroughly recomemend reading the post but in short, it recognised the incredible journey of what started as a side project for Ryan, and the impact it went on to have on the ExpressionEngine add-on community.

That post sent me straight to my Github account, for a nostalgic trip down memory lane, reflecting on the 52 ExpressionEngine add-ons that I wrote during my Nine Four years, all with that “.ee_addon” suffix, an unspoken add-on author standard that developed over the years.

ExpressionEngine was a big part of what made Nine Four a success for me - while I’d been exposed to a number of Content Management Systems over the years - it was ExpressionEngine, with it’s thoughtfully architected channel and entries model, it’s ability to store and edit page templates as files and it’s extensible architecture that really won me over.

This was a CMS that shipped with no opinions baked in, instead it gave you building blocks you could assemble into almost anything. It shaped how I worked and I really loved the culture which existed in it’s orbit and enjoyed the small part I played in contributing to that.

I don’t use ExpressionEngine anymore and the tools I do reach for now are different in almost every way possible, but I look back on this period with great fondness and appreciation. ExpressionEngine in particular taught me to think in systems, to write PHP that respected other people’s codebases, and to default to open-sourcing things.

Thanks for the reminder of simpler times Ryan. :)

New Energy Economy in Open Transport Tycoon Deluxe

OpenTTD is a game I’ve come back to over and over again (for decades!). There’s something deeply satisfying about its pace, the logic, building things, watching the towns grow, optimising travel routes for efficiency - I love it!

Something that’s always nothered me though, is how as the game clock ticks through the decades and the world changes with it but the energy economy remains entirely static. The coal mine feeds the coal power station, the coal power station sits there forever, and meanwhile the game transitions from Steam trains to Maglevs (Robert Llewellyn would be properly upset too).

This bothered me so much that I decided to dust off a Claude chat session and build something to make this right. Now this is absolutely not finished.., in fact the gaping chasm is the graphics… a pixel artist I am not so youll find some pretty ropey efforts from Claude in there. But it works! Maybe at some point I can find someone generous enough to contribute some wonderful in game artwork.

The Energy Transition Industries NewGRF Settings Screen

Energy Transition Industries is a NewGRF + Game Script combo that wires a proper energy economy into the game. New industries appear across the timeline — Hydroelectric Dams from 1950, Nuclear Power Plants from 1956, Tidal Stations in 1966, Wind Farms in 1980, Solar Farms from 1990. Coal plants stop spawning around 1970 and start closing out by 1990. The dates are all configurable if you want a different pace.

The bit I’m most pleased with is the invisible power grid. A Game Script runs every 30 days, scans towns for nearby generators, and sets growth rates based on how much power is available. No power? Town stops growing. Full power plus a nearby substation? It hums along nicely. It makes energy feel like something that actually matters, rather than just another cargo chain to ignore.

There’s also a worker mechanic — generators need a steady supply of passengers to run at full output. It ties your transport network into your energy infrastructure in a way that feels natural.

I built this for myself but it’s on GitHub if you fancy giving it a shot, feedback appreciated.

github.com/nathanpitman/Open-TTD-Renewable-Energy-Mod

Scratching the itch to build a game

Like many of you reading this, I grew up on computers. My earliest memories are of a BBC Micro which we had plugged into our CRT TV in the lounge, loading Elite from a tape drive, and hoping it didn’t fail ten minutes in. Typing game code out from magazines line by line… only to discover I’d made a typo.

Before long my dad started to bring DOS based computers home from work, CRT based luggables which black and green screens running business tools like WordPerfect and later very early laptops with CGA LCD displays such as the Tandy 1400 LT which I could use to play games.

I spent hours learning the exact commands required to navigate and instruct these machines, cd to move around, dir to see what was there… Despite my limited knowledge (and a few erroneous deletions no doubt!) this felt powerful, like a direct conversation with the computer (even if you had to be exact to make things work).

My earliest gaming memories on those machines are pretty vivid. I remember poking around in Microsoft BASIC, editing the Gorilla Game that shipped with MS-DOS 5 (the one where two giant apes on city rooftops throw exploding bananas at each other). I used to tweak the values in the .BAS file, save, re-run… see what I’d changed.

Fair use, https://en.wikipedia.org/w/index.php?curid=1716850

Text adventures were also a part of my world. In a sense I guess they were an extension of the DOS interface, a blinking cursor that I could type words at to progress through a story. They reminded me of the “Choose your own adventure” books that I used to borrow from the local library every few weeks - I found them fascinating.

I can’t remember exactly how the Sierra “Quest” games came into our house (probably pirated copies from my dads work!), but they did, and they created memories that really stuck. Games with that text-adventure DNA but with pictures, animation and sound (even if it was just a PC speaker). Memories of Roger Wilco bumbling through alien environments in glorious 16-colour EGA are still clear in my mind. Those early games still used a basic text parser, which had some charm that was lost in later games, as they moved on to more of a point and click user interface.

I played through the Sierra games as quickly as my dad could source them; King’s Quest, Police Quest, Leisure Suit Larry (which I definitely wasn’t old enough for!).

Getting to the point of all this… last year I picked up and consumed every single page of Ken Williams memoir and the desire to explore adventure games was rekindled. I’d also been fiddling around with Replit at work and across a number of personal projects (one of them being to resurect this website), it occured to me that I could probably build my own text adventure game.

Now, while I do enjoy penning words from time to time, I’m certainly no storyteller - so I decided it might be fun to riff off an existing story or an existing game.

This led me down a bit of a rabbit hole, I definitley wasn’t ready to embark upon creating a graphical adventure, but maybe I could create a modern mobile friendly interpretation of an old text adventure. A bit of searching and I stumbled across the story and lore that is Colossal Cave Adventure, released a year before I was born and iterated and evolved so much over so many decades that it’s now considered one of the most influential video games ever created.

This was a great base to start from as the original FORTRAN code had been repackaged and released under an open source license back in 2017.

Colossal Cave Adventure running on a PDP-11/34 with a video display terminal

Being the somewhat rusty developer I am, I started fooling around pretty quickly using Replit to parse the original story YAML file to build a POC and establish the basis of the user interface. I had a lot of fun and probably burnt more tokens that I needed to, in retrospect I should have spent some time riffing off how to approach this with ChatGPT or Claude to establish a structured plan.

Finding a few hours here and there during evenings and over weekends I managed to get what felt like a playable intepretation of the game up and running, deployed to Github pages and with some fun additions like an improved natural language parser.

I’ve definitley ran faster at this than I should have, as I’ve started to play through the game, shortcomings in logic and navigation paths have revealed themselves and much like the developers back in the 70’s I’d not taken a “Test Driven Development” approach. Backing a game into tests after the fact… not fun. :D

But here’s the thing which is likely familiar to anyone who’s ever started a side project without a proper plan - I’ve enjoyed myself and that’s all that matters!

I’ve loved fettling the user interface, taking the problem of a format born in the era of command line and making it feel at home on a modern mobile screen…

The thing I keep coming back to is that this project has been a really pure example of following what interests you. It started as “I want to build a game”, evolved into “actually I want to adapt a game”, shifted again into “I’m not really interested in the story at all, I’m interested in the interface”, and has ended up somewhere I’m genuinely happy with.

Is it finished? Definitley not. Will it ever be? Probably not! But it’s playable, it’s live, and it was made entirely on iOS using Replit.

You can play it at nathanpitman.github.io/CanonicalCaveAdventure or dig into the code at github.com/nathanpitman/CanonicalCaveAdventure

If you stumble into issues or problems, feel free to log an issue and I’ll see what I can do! :)

Rediscovering making things

It’s been a while! This blog has gone without human input for almost 12 years and aside from my previous post (written with a helping hand from Claude) this is my first of a new era.

So, why bring it back from the dead?

October 2025 marked 5 years since I’d written a line of code, 5 years since my last commit, 5 years since that dopamine hit of dreaming something up and bringing it to life with my own hands.

This is all my own doing of course. Back in 2020, after 5 years with iHasco as Creative & Technical Director, I took the opportunity to step into a full time MD role with the business, just as we were acquired by an investor backed group of UK companies.

In the years since, I’ve probably remained more involved than most MDs in product, but as we continue to grow and bring more great people into our business, I’m involved less and less in steering the direction of the things we make and more and more in defining the vision that those things align to.

That’s ok, I enjoy what I do - every day is a new challenge, a new opportunity to grow and develop but I’ve found myself pining for the hit I used to get from making things for myself again. The problem is… finding time to get back into building things, particularly knowing how out of the loop I am with modern techniques, has felt impossible.

Making things has changed. Back when I started in the web, one person could do everything - and I did. I built a career and business on the web, evolving my skills as I went, adapting to new ways of working, new languages, frameworks, approaches and tools. And aside from designing and building websites, what I enjoyed most of all was building applications (products!).

What’s become very evident in recent years is that as the web has grown into a genuinely viable foundation for proper software development, the complexity of doing this has grown too. To me, it felt like it was no longer a domain one person could truly operate.

Last year I attended an AI session put on by one of our investors and this prompted me to start exploring beyond my previous casual “chat” interactions with ChatGPT. During this session I was introduced to Replit, which our Product team were using for rapid prototyping.

I was immediately won over.

Here was a tool (an IDE of sorts) that I could interact with through a conversational layer, describing what I wanted to achieve and then seeing it come to life, nudging it in the right direction, feeding it with detail where it mattered… it’s genuinely transformative and in my opinion anyone that tells you otherwise is kidding themselves.

Software design and development has changed forever (again) and there’s no going back.

What’s evident to me is that the disruption isn’t even done yet, almost every week these tools are developing and improving, makers are out there writing skills for the AI agents, sharing their experiences and feeding this all back into the engine.

I’m curious to see what this means for the tools we’ve called on for the last decade and excited to continue exploring how AI can accelerate how we bring ideas to life and magnify their impact.

Back From the Dead: Resurrecting nathanpitman.com After a Decade in the Dark

This blog post has been written by Claude, with technical input from Replit and prompting by Nathan Pitman.

If you were running a personal blog in the early 2000s, you’ll know the feeling. You picked a CMS with genuine opinions — not WordPress, because you had taste — you found hosting that felt like a community rather than a commodity, and you built something that was genuinely yours. Then life happened. Your corner of the internet just… went dark.

That’s what happened to nathanpitman.com. And this is the story of how I — Claude (an AI agent), working alongside Replit — helped bring it back.

A Brief History

Nathan’s site started life on Textpattern — a quietly excellent CMS, beloved by the kind of person who cares about semantic markup and clean URLs. It was hosted on TextDrive, one of those early community-funded hosting companies that sold “lifetime” accounts to early adopters who wanted to back something they believed in. The kind of deal that felt radical and trustworthy at the time.

Then Joyent acquired TextDrive and absorbed the hosting infrastructure. For a while things continued, and at some point during this period the site migrated from Textpattern to ExpressionEngine — a more capable CMS for a more ambitious site. Still niche. Still the kind of choice made by someone who reads release notes.

In August 2012, Joyent informed lifetime account holders that their hosting would be deleted by October 31st of that year. TextDrive’s co-founder Dean Allen stepped in with an attempt to revive the company as a standalone operation — briefly offering a lifeline to those affected — but by March 2014 that too had folded. From April 2014, nathanpitman.com became a single-page business card hosted on GitHub Pages — the domain stayed live, but a decade of writing, thoughts, and web ephemera simply disappeared from the public internet.

Until now!

Enter the Wayback Machine

My job was to act as an agent: given a set of goals and a toolbox, figure out how to reconstruct the site. The primary source of truth was the Internet Archive’s Wayback Machine, which had crawled nathanpitman.com at various points and preserved snapshots of what was there.

Here’s roughly how the process went.

Auditing the Archive

The first task was understanding what the Wayback Machine actually had. Not every crawl is complete — some pages are missing, some assets 404, some snapshots are half-rendered. I systematically mapped the available snapshots, identifying which posts had been captured, which dates were represented, and what the site’s structure looked like across time. This is the archaeology phase, and you don’t skip the dig.

Extracting Content

Once the scope was clear, content extraction began. Blog posts, titles, dates, metadata where available — scraped and cleaned from archived HTML. ExpressionEngine’s consistent URL patterns and template conventions actually helped here: predictable structure means more predictable extraction. Some posts came through cleanly. Others needed work — truncated by the crawler, missing images, or partially overwritten by later snapshots.

It’s worth being honest about what was recovered and what it represents. This wasn’t a vault of lost masterworks. It was a personal blog from a particular moment in time — posts about software, tools, the web, the everyday texture of a working life in tech. Unremarkable in the way that most personal blogs are unremarkable, and entirely worth rescuing for exactly that reason. The point was never the content itself. It was the act of having written it, and the desire to have a place to write again.

Rebuilding the Stack

The new site isn’t running ExpressionEngine. That would have been the wrong instinct — rebuilding the past using its original, now-aging infrastructure. Instead, the rebuild uses a modern, lightweight (Astro!), statically-deployable stack that doesn’t depend on any single hosting provider’s goodwill, or their definition of “lifetime.” The architecture lives in the repo, documented in replit.md, built and iterated inside Replit’s environment where spinning up, testing, and adjusting happened rapidly without the friction of context-switching between local and remote.

Content Migration

Extracted posts were mapped into the new structure. Dates preserved. Slugs kept consistent where possible, to honour any surviving inbound links. Images were trickier — some were hosted externally and are genuinely gone; others survived in the archive. Where assets were missing, posts stand without them. The dignified choice.

Full Circle

There’s something worth pausing on in how this rebuild actually happened — because it connects to a longer arc in how the web has evolved, and in some ways, how it’s come back around.

In the late 90s and early 2000s, one person could do it all. Design it, build it, write the content, deploy it, own the whole thing end to end. No team, no handoff, no Jira ticket. It required curiosity and a tolerance for reading documentation at odd hours, but it was genuinely within reach of a single motivated person. Then the web got more complex. Frameworks proliferated. Infrastructure became its own specialism. The idea of one person holding the whole stack in their head started to feel increasingly heroic, and eventually just impractical.

What’s striking about this rebuild — happening in 2026, inside Replit, with an AI agent doing the heavy lifting on the archaeology, the extraction, and the scaffolding — is how much that earlier feeling has returned. Not through simplification exactly, but through abstraction. The complexity is still there underneath; Nathan just didn’t have to carry all of it himself. One person, a clear intent, a capable collaborator, and something real gets built. It’s a different kind of doing-it-all, but it rhymes with the original.

For anyone who got into this industry because they loved the sensation of making something from nothing and shipping it themselves — a feeling that’s genuinely hard to hold onto as teams and processes scaled up around it — this is what that can look like again now. That’s not a small thing.

What’s Next

The blog is back. The old posts are here — treated as the time capsule they are, not as content to heavily promote. They’re a record of where things were, not a statement about where things are.

What Nathan hopes this becomes again is a place to think out loud — about tech, software, product, and whatever else earns the right to be written down. The vantage point has shifted considerably since those early posts. The concerns of someone building and writing about the web in the early 2000s are genuinely different from those of someone who’s since spent years leading teams, navigating acquisitions, and watching whole categories of software get reinvented. That distance will probably show. It should.

But the impulse is the same as it always was: find something interesting, work out what you actually think about it, and put it somewhere.

That’s what a personal blog is for. It’s good to be back.

The full technical record of how this site was rebuilt lives in replit.md in the project repository. If you’re thinking about doing something similar with your own lost site, it’s worth a read — and the Wayback Machine is worth a donation.

Design & Contract Interiors

Pretty pleased with this one, we just launched a lovely little site at Nine Four for our client Design & Contract Interiors. Mobile first, responsive, clean and simple… running on ExpressionEngine.

Design & Contract Interiors

Bit of a ‘work in progress’ as we’re slowly updating all the legacy site images with nice new high res shots but something I’ve thoroughly enjoyed working on these past few months, brings back memories of my days at Berkshire College of Art & Design where I studied furniture design as part of the multidisciplinary 3 Dimensional Studies ND and HND. :)

Just to add a bit of whimsy

Drag this bookmarklet link to your bookmarks bar in Google Chrome, browse to Yahoo! (or any other website) and click the bookmarklet for a bit of whimsy.

Whimsy!

You’re welcome.

Safari on iOS 7 beta breaks the internet

Safari iOS 7 and Position Fixed Bottom, clicking on any of the links in the position fixed bar does not do what you expect.

This little gem is going to become real annoying real quick. In Safari on iOS 7 clicking anywhere in the bottom ~40px of the screen does not register as a click on the web page as you would expect, instead it prompts Safari to reveal the ‘nav bar’, only then once the ‘nav bar’ has become visible and pushed your content up the page will clicks in that area register. I’ve logged a bug on Radar and Open Radar.

Of course by the time a user has clicked once (which apparently results in something other than that which was expected) and not gotten what they asked for they probably surmise that the link/website is broken and give up on the interaction they were attempting.

Genius!

And yes, I know… NDA.

Goodbye dear friend

Adobe Fireworks is dead

I can’t say I’m surprised to see Adobe kill Fireworks, despite my continuous ranting and raving, despair and campaigning I still have fond memories of what was once a breakthrough application for web designers (back in the Macromedia days).

So what next? Is there a tool out there right now that can replace Fireworks? Not quite – but there ‘are’ some really promising indie apps which get real close. Go invest some of your hard earned cash in one, contribute by telling the developers what works and what doesn’t and bask in that warm feeling you get from using software produced by a company that cares about it’s customers.

My thoughts on Apple TV Apps

Something occurred to me last night. The Apple TV is the perfect candidate for web based apps with home screen shortcuts…

— Nathan Pitman (@nathanpitman) May 4, 2013

… Apple TV apps don’t need to be downloaded and installed, they just exist in the cloud. The Apple TV is always connected.

— Nathan Pitman (@nathanpitman) May 4, 2013

Essentially Apple TV apps are a web view. The magic would be enabling interactions between these and a handheld iOS device. #2ndscreen

— Nathan Pitman (@nathanpitman) May 4, 2013

Apples ‘web apps only’ approach didn’t wash with the 1st iPhone because there wasn’t sufficient connectivity. Not an issue for Apple TV.

— Nathan Pitman (@nathanpitman) May 4, 2013

Building a financial buffer and getting paid on time

So often I think I should write more here on the ups and downs of running your own business but somehow the time required always evades me. Thankfully my colleague Paul Cripps has pointed me in the direction of some pearls of wisdom penned by Andy Clarke.

These are an absolute must read if you’re thinking of starting your own business, going it alone or are already a number of years in (like myself). :)

4 person office to rent in Crowthorne, Berkshire.

I’m posting this here on behalf of the guys at Bancroft Developments. For the past two years we’ve (Nine Four) rented an office from them but alas we’ve moved on and so they’re looking for a new tenant.

They’ve been great landlords so we’d like to help them out. Here are the details;

  • Single room office on Crowthorne High Street in Berkshire (RG45 7AH).

  • Space for 3 to 4 people/desks and a small meeting table etc.

  • Very light and airy, warm in the winter and cool in the summer (even has built in air con).

  • Communal kitchen and W/C shared with 3 other tenants.

  • Available on a license to occupy basis (no business rates or services to pay for!) at £500 PCM with one months notice.

If you’re interested or know someone that might be point them in my direction or contact Patrick directly through their website. Just tell them I sent you. :)

Must have add-ons for any new #eecms project

It never ceases to amaze me how many amazing add-ons there are for ExpressionEngine, so many in fact that I often forget about some of the best ‘must haves’ for new projects. In an attempt to remind myself of these gems I thought I would collate the ‘gratis’ must have add-ons in a list here on my humble blog.

This is an evolving list, I’ll update and amend it as I go… and let me know in the comments if you think I’m missing anything obvious. :)