Everything below I built and shipped by myself. I have put the failures next to the descriptions rather than at the bottom, because in the first two cases the failure is the more useful half — and it is the reason the later work looks nothing like it.
Aa3 — Someone Today
Everyone has a moment when they need to talk to someone who is not a therapist and not a best friend. Someone Today is a free, anonymous place for exactly that: one person, one conversation, no account, no profile, and no history kept once you close the tab. There is a second half called Letters — you write something at three in the morning, and later somebody you will never identify writes back.
It runs on Node.js. I designed it, built it, launched it and support it alone.
Figure The launch post drew 52 reactions, 25 comments and 8 reposts.
What went wrong Real-time pairing needs two people online in the same moment, and early on there usually weren't two. Someone would arrive, wait in an empty room, and leave. Nothing was broken — the matching worked exactly as specified — and it still failed every single person who stood in it. Letters, which is asynchronous and does not care whether anyone else is awake, was the part that kept working.
Hpe — Out
I was bored, nobody was around, and I built the thing that would have fixed it. One tap says you are free. You then see other people within three miles who are also free right now. A first name and whether you want coffee, a walk or food is the entire profile — no photos, no algorithm, no account, no app store. Location is fuzzed, and your presence deletes itself after three hours.
What went wrong The same wall as Someone Today, wearing a more obvious costume. A proximity app with nobody nearby is an empty map, and one campus never reached the density where it felt alive. The three-hour expiry was the privacy feature I was proudest of, and it was also the thing that guaranteed the map was empty whenever anyone opened it. I knew about the cold-start problem before I started. I built it anyway, and I would rather write that down than quietly leave it off this page.
What changed after those two
Both products assumed the network was the easy part and the software was the hard part. It is the other way round. So the rule for everything below was that it has to work for one person on day one — and the one person is me. None of it needs an audience to function, which is exactly what the first two got wrong.
Aa4 — The summer bench
A device a week, on an ESP32 and whatever screen was cheapest. Week three was Snake — a 128×64 OLED, one button, written from scratch, because it was the game I played to death on a Nokia as a kid. The week after that was an LED matrix that scrolls a different encouraging line every minute; I built that one for myself for the bad days and posted it in case it was useful to anyone else.
Then a lyric display. The track is run through beat detection first, so the animation lands on an actual drum hit rather than on a timer, and certain words trigger their own graphics — the word Texas pulls up a flag. Every graphic is drawn in code. No image files are loaded at all, because there is no room for them.
Figure About $6 in parts for the lyric display, screen included. The Snake post is the most-read thing I have published — 784 impressions, 27 reactions, 10 comments.
What went wrong TODO: the honest failure from the bench — what fought back
Aa5 — A pixel version of my grandpa
He died in December 2024. He backed everything I tried, including the stupid things, and he did it without needing to understand any of it first.
So he is a sprite now. He walks along the bottom edge of my screen while I work, and he is there every time I open the laptop. The walk cycle took far longer than the rest of it put together — I kept starting it over because it was close and still not him.
This is the only thing on any of these sheets with an audience of one, and it is deliberate. It is also the clearest example of the rule: it needed nobody else to show up for it to work.
Figure One user. 352 impressions on the post, 8 reactions, 5 comments — none of which was the point.