Vibe coding at Inkhaven
My crippling Claude Code addiction means I can’t resist seeing the world in terms of things I could vibe code. A lot of my projects have been things I want to use. People say this is a good way to have startup ideas but isn’t that just typical mind fallacy? Like most people do not want the things I want because they are not as insane as me. Anyway.
I considered downgrading my Claude Max subscription for the month, but I knew I would need my fix. While at Inkhaven it seemed like there were a few useful things I could build, both for myself and for the broader community. Here’s a showcase.
Inkhaven Tracker
You have to post a piece of at least 500 words every day. You’re allowed to write things in advance to keep in the bank, and this proved to be good not just to take the pressure off, but also because you’ll often find yourself in the zone and can write three posts in a day.
(To be honest I found that it was pretty rare that I would take a day off – most days I had something I wanted to write, but it was still nice to know I had a bit of a buffer.)
I wanted a way to jot down ideas, remember what posts I had in progress (which might be five or more at once), and which were ready to go in case I needed them. It also felt good to schedule posts to publish in advance, so I could just hit send and have the rest of the day to think about longer, more effortful pieces without Ben Pace dangling the Sword of Damocles over my head.
I made a tracker with a kanban board and a calendar, which lets you keep track of your posts and assign them to a specific day.
Singtube
Evelyn and I put on a karaoke night. She was busy writing her post for the day, so I went to get set up. Speakers and mics all working, check. But her suggestion to use a collaborative YouTube playlist wasn’t working – you could share it so anyone could add songs, but you had to refresh the player for it to pick them up.
It took me a few minutes of fiddling around looking for other apps that could do this. And then I realised I could just do it myself.
The player has a YouTube embedded viewer, and a sidebar showing the track list (with the name of the person that wants to sing!) and a QR code for people to scan on their phones to add songs.
We eventually got kicked out of the room we were in and had to move the party elsewhere. Someone came up to me and wanted his song moved to the end. But there’s no way to reorder songs… I tapped in another request as we walked between buildings, laptop opened in one hand.
By the time we got to the new room, it had one-shotted the feature and restarted the server. Alec got to sing Old Lang Syne as the final song.11. Actually this isn’t quite true - after it had played, the YouTube player moved onto Mr Brightside which is strictly superior as a final song, and prompted all the boys to take their shirts off as is the law when you play it.
StrangerTalk
This study investigated people’s attitudes towards talking to strangers, and found that most people are pretty pessimistic about their own ability to do so and other people’s reactions to them. The study authors asked people to talk to one stranger a day for five days, recording their expectations before and after, and found that people found it way easier and more rewarding to talk to strangers than they expected!
They used an app to track this and provide ‘missions’ to the participants which had them find a particular stranger to go talk to. The app isn’t public, so I coded one up and a few of us went to the UC Berkeley campus to complete our missions.
Let Me Claude That For You
I often find people will send me nonsense facts which are trivially disproven by asking Claude. Claude is free. Don’t insult me by not bothering to consult the oracle before you send me drivel.
As an homage to the excellent Let Me Google That For You, I made Let Me Claude That For You. You can make a link to send to a friend which shows a dummy Claude UI, with a cursor which clicks the input and types in the query that your buddy should have typed. It then redirects to Claude on the web with the query prefilled.
Chatty Cathy
Evelyn and I are running a study on ways in which extraverts and introverts connect, and specifically how connected they feel when doing those things.
To do this, we wanted to do a time sampling study. I set up a Telegram bot which:
confirmed the user wanted to be part of the study,
ran some personality inventories,
asked when they rose and went to bed
The specific personality inventories we ran:
BFI-2 Extraversion subscale (short form)
BFI-2-XS (extra short form): a shortened Big 5 personality test
(We also threw in a couple of unrelated questions so people wouldn’t know precisely what the study was about up front – thanks to Aella for the tip.)
We would then ping them throughout the day to ask what they were doing and if they were with other people, and how connected they felt and how connected they thought the other person felt.
This got coded up in Python, a language a don’t really know, and was basically one-shotted (although there were a few bugs with the onboarding flow which had to be ironed out in manual testing). This is amazing because I’ve made Telegram bots before and it was always a nightmare. (Don’t get me started on Slack bots.)
I couldn’t be bothered to deploy this one anywhere so I served it locally from my laptop, running caffeinate to stop it going to sleep. But it still sleeps if the lid is closed, so I used this low-tech solution to keep it awake:
This was mostly because I’m a cheapskate and didn’t want to run it on Heroku, but actually it’s now easy enough to just point Claude at a Hetzner box and it’ll SSH on, git pull, and use docker to run the thing. Obviously you don’t get a proper pipeline with CI but for my purposes I didn’t need one.
I also coded up a dashboard which watched the database to see how the study was progressing22. PSA: don’t blur out sensitive information in images – it’s surprising how reversible it is with the right tools. Redact it instead.:
We cover the results of our research in two posts:
Weighing animal minds
I wrote an interactive essay to explore the topic of animal welfare, drawing on the extensive research on the topic to make it easier to reason about with interactive widgets. (Still a work in progress.)
I wrote the copy for the essay in markdown, with tags indicating where each widget should go. I build the widgets and the build pipeline using Claude Code, which takes the markdown, builds the JS widgets using vite, and then combines it all together into a single HTML page. This gets pushed and served using GitHub Pages.