Popsicle Boat

Projects
Elixir

If you’ve looked at the front page of this site lately, you may have noticed a little card pointing at popsicleboat.com. I’ve been building Popsicle Boat and have never actually written about it here. Time to fix that.

What it is #

Popsicle Boat is a small social web project. The short version I keep coming back to: low-friction posting, real conversation, and keeping personal spaces on the internet playful.

Instead of one giant feed, Popsicle Boat is organized around spaces, each a shared place where people can post work, ask questions, share notes, and keep up with what others are making. A few things I care about in how those spaces behave:

  • Spaces are open to browse, so you can get a feel for a place before joining in.
  • Following a space keeps it close at hand and makes it easy to return to active discussions.
  • Anyone can propose a new space, or just follow the ones that fit what they care about.

Around that core there are the things you’d hope for from a small social site: profiles, replies and likes, private messages, friend discovery, and invitations for bringing people onboard.

Why bother building a social network in this day and age #

The big platforms optimize for scale, and scale has a way of making everything feel the same. I wanted something closer to the small-forum internet I grew up with, where a space could have its own personality and posting something didn’t feel like a performance. I also wanted it to feel modern, so there’s (to my eye) a smooth design, with both light and dark modes, text and video chat, and a lot more.

How it’s built #

Under the hood it’s a DIY special.

  • Elixir and Phoenix, with LiveView for the interactive surfaces (feeds, replies, likes, uploads) and plain controller-rendered pages for everything that doesn’t need to be clever.
  • Postgres underneath.
  • Fly.io for hosting, with deploys gated behind an embarrassingly large pile of predeploy checks and browser smoke tests.
  • Internationalization from early on.

512KB Club Orange Team member