Two weeks ago I built an Android application with voice commands while running around an athletic track in the shadow of the Olympic Stadium in London. So when I decided to try building a web app en route to a big group weekend away, it did not feel as far fetched as it once would have.
The first commit went in from the Eurostar terminal, before I had boarded. I did not have a laptop, and was going to have to do the whole build with just my phone. Recent hackathons, and a few sites of my own, had taught me what works and what does not, and importantly what I could accomplish with just my phone. The build ran on the train until the channel tunnel killed the connection, and I picked it back up on the Métro in Paris. The only real time I needed to stop was to arrange the Cloudflare access the agent needed. Before walking to my hotel I sat down on the Métro platform to run through the online setup, because it was fiddly, and the Métro had been extremely hot the whole way so far. After this I could let it start building reusing methods for setup from previous projects and my existing domain to get a useable subdomain.
every 5s
writes
then deploy
The first night
Moving from a very rough POC, my friend became the unlucky alpha tester. After a few quick tests I put it aside and spent the evening talking to the group, and that conversation shaped the future direction of the app. At the most base level the app was to get people to do dares in some way. The wheel had to know whether you were sitting or moving, since a table dare and a walking dare are not the same. To make it more personal I took some design themes from my conversations during the night. For example, not everyone was into wrestling or Pokémon, but I knew both would land, so the winner would get a belt, also you could get a wrestling nickname instead of your real name for the game, either pregenerated from a list or make your own. Also every dare came up as a Pokémon card. And the card helped me think of an additional feature. I added a share button that gave you an image you could then drop into the group chat.

The dare card turned the result into something that could be dropped straight into the group chat.
Three ways to play
The main purpose was to get everyone involved and so the crucial part was the game was crowd sourced and my generic templates were there to get people thinking but they could add to every part.
Wheel. The main one. Pick the two it’s for, or a random one of us, spin, and it gives them a dare. It asks first whether you are sitting or moving, and only picks dares that work where you are.
Likely. Most likely to lose their phone, cry first, want a nap. Vote for someone, and you only see the results once you have voted, so nobody sways the room.
Predict. Call something one of them will do tonight. If it happens, you score. This was the one you could play without anyone else being on the app, so people who never joined were still in the game.

The wheel narrowed the dare by person and whether they were sitting or moving.
The second day
The following day I put it out to the whole group. This is where it broke, and it stopped working because you cannot find the edge cases yourself. You build the “happy path” and you walk it every time you test, so the places a real person wanders off it are exactly the places you never look.
- A name typed wrong
- Someone joined twice
- Someone back on another phone as a second person
- Someone marking a dare done by mistake and losing it
- When you clicked to vote it didn’t actually work (oops!)
I got my agent to fix it at the table with the people hitting it. Was rather satisfying being able to get an issue raised and then a few minutes later ask them to refresh to see it implemented.
It also moved the centre of gravity for the app. I had built it thinking dares were the point, but a dare is a big ask, and by the afternoon they had gone sporadic while the two vote games were what people actually kept playing. It also lopsided the scoring. Dares were worth nothing in the end, so the whole board ran on votes, which meant whoever voted most simply scored most. The people who won were the most active, not the boldest. It was a good way to see how much game balance actually matters, and it gave me a fresh appreciation for the people who do it for a living.
Built entirely on a phone
36 commits · one weekend- In transit · Eurostar terminal
First commit, before I had boarded. The whole app scaffolded in one go.
- In transit · on the train
Kept building until the Channel Tunnel killed the connection.
- In transit · Métro platform
The one manual step. Sat down to set up Cloudflare API access by hand in the console.
- In transit · walking to the hotel
Reused an existing domain for a working subdomain. It built in my pocket.
- First night
Alpha test with one friend. Found a caching issue where responses carried no cache directives.
- First night · late
Talked to the group. Added the themes and the sitting-or-moving split.
- Second day · morning
Out to the whole group, and it broke: duplicate joins, wrong names, a vote button that did nothing.
- Second day · afternoon
Fixed at the table with the people hitting each problem. The vote games took over from dares.
- Final day · Eurostar terminal
Went through the predictions, verified them in the group chat, sent the winner the final board.
What it was for
One of my favourite aspects of this was that you could drop in and out. Play when you felt like it, ignore it when you didn’t, and neither cost anything. A prescriptive game cannot do that, and neither can a deck of cards, because both need everyone in at once. This was just there, a nice personal thing that fit the weekend. The dares were fun, but so was calling people out when a vote landed, or when a prediction someone made actually came true.
I can see AI making more and more of these personalised experiences possible. Before, it was either a skill barrier or just not worth the time to build something you would throw away. Case in point, I will be deleting all the infrastructure for this later today, and I doubt that would even cross my mind if I had built it the normal way. The other half of it is that it would not be anywhere near as pliable to the group.
I went through the predictions on the last day, waiting in the Eurostar terminal in Paris, checking which predictions had come true and asking the group chat about the ones I could not remember. I sent the winner a screenshot of their belt as the reigning champion. It was a nice way to end the weekend, since I was travelling back on my own.

The Camden Crusher, still reigning when the weekend ended.
We are using it again at the next event, and this time I am going to do a lot more planning.