0.03FF0001 / LAT 36.1684 / LON −86.7816
BUILD 8f755b6 / 2026-08-04 / NASHVILLE, TN
visualfinesse
email github linkedin
§ Writing

The complicated side of a simple app

cartoon-zoowebsocketsarchitecture

On the surface, Cartoon Zoo looks like a very simple app. I set out to do something not so simple, which is typical of me. I like a challenge, I like to set myself apart, and when an idea gets stuck in my head I tend to stay there until I figure it out. Sometimes that feels like a superpower. Often it's to my own detriment.

Here's the idea. If there are a hundred people commenting on the same image, I wanted those comments populating for every one of them in real time. Liking each other's captions, and those likes updating live. Notifications arriving the moment somebody likes yours. Without refreshing your browser. A sense of community and engagement, all at once.

And I knew it was possible, because if I want to collaborate with a buddy, we both open the same Google Doc and write on the same page at the same time. I've seen that pattern all over the place. Just not really here.

The underlying technology is WebSockets, and I'm not going to teach that right now. What we did is divide each image into its own server room. Every image already has a unique ID, so we just reused it. Connect to the image, you connect to the room. That partitions the app so each image gets its own slice, because that's where the participation really matters. In theory, it holds 10,000 people at once. Trust me, that hasn't been tested.

Now, granted, most people are going to be on the latest image. That's where the bulk of the users are. So past 10,000, we partition again, and I haven't decided how.

Random is the easy answer and I don't love it. Two people sitting side by side on a couch, testing the app together, could land in different rooms, not see each other's comments, and conclude the whole thing is riddled with bots.

Geographic is where I'm leaning (East Coast, West Coast, Central to start) at the expense of some privacy. But it gets you neighbors competing with each other. Competing and encouraging, I should say, because the interface is mostly built around encouragement, and even if somebody is rude enough to write a mean comment on your caption, it just helps you win. The only real recourse is flagging, and if the submission doesn't violate community guidelines, it stays. Area code off the phone number is the other option. The couch problem could still happen, but those two are probably in the same area code anyway.

I do want people to filter captions by their friends eventually. I don't think I'm going to intermangle those two things, though, even if at first glint they look related.

Unlike most authors, I'm open to suggestions. If you have an idea, reach out and let me know. We're all in this together.