Calibrated Ideas
← All posts

A Live Bus Board, Built by Fable

The train board's live feed stumped me for a year, until my host began running Node.js and the real departures finally arrived. Then I handed the bus board to Fable, one of Anthropic's Claude models, to see how it would cope. It coped well.

The Calibrated Ideas bus departure board for the Cambridge Road and Cockle Dicks Lane stop in Southport, in amber dot-matrix style, showing buses to Formby Station, Southport Duke Street and Liverpool Queen Square with a mix of live and scheduled times

Last year I built a departure board for Meols Cop, my nearest railway station. I wrote about it at the time: the look came together quickly, but the live feed did not. The board sat for months showing sample departures, convincing and completely untrue, while the one part that mattered stayed out of reach.

Where the board had to run

The problem was not really the code. It was where the code had to live. A live board needs a small server process running quietly in the background, polling the data feed and holding the latest departures ready to serve. My web hosting was shared space for static files; it would serve HTML all day, but it would not run a Node process. So the feed had nowhere to sit.

That changed when my host began offering Node.js hosting on the same account. Nothing clever on my part; the constraint simply lifted. I moved the server across, pointed it at the National Rail Enquiries data through the Rail Data Marketplace, and the Meols Cop board finally showed real trains. You can see it at travel.calibratedideas.com/trains. A year late, but honest at last.

Handing it to Fable

With the plumbing solved, a second board suggested itself: my local bus stop, at Cambridge Road and Cockle Dicks Lane. I could have built it myself. I gave the whole task to Fable, one of Anthropic’s Claude models, and watched how it went.

The brief was ordinary enough. Read live times for my stop from the UK’s Bus Open Data, by way of bustimes.org; render them in the same amber dot-matrix style as the train board; keep it small, readable and honest about which times are tracked live and which are only scheduled. Then I stood back.

It did the job, and did it well. The live-data work that had taken me a year to get past on the trains, the polling, the parsing, the small decisions about what to show when a bus is not being tracked, it handled without fuss. Here is the result, live:

What that does and doesn’t mean

I want to be careful about what that means, and what it doesn’t. It does not mean the thinking was handed over with the task. I still had to know what a good board looks like, which feed to trust, and when the output in front of me was wrong. But the part I had found genuinely hard, the unglamorous business of getting live data to flow reliably, was no longer the wall it had been.

There is a familiar shape to this in my own field. A specification looks accurate until you meet the real conditions it has to survive, and the gap between the two is where the honest work lives. Here it ran the other way. What looked like the hard, expert part turned out, this time, to be the part a capable tool could carry, which left the judgement, the taste and the responsibility where they belong.

The train board took a year and a change of circumstance to come right. The bus board came together far more quickly, with a good tool doing the part I had found hard. Both now show real times to the same quiet corner of Southport, and I still stop to read them.