willow.camp: Next
I have spent the past few weeks figuring out the future of willow.camp.
It turns out I love making it, and I love that a handful of people are using it.
I built willow.camp in Rails because I could prototype quickly without having to think about things like auth, logging, or building forms. Rails was great for that.
Now that I have a version of willow.camp I like, I want to be more hands-on with what I’m building, and I find that I’ve spent more time working around the framework and various libraries than I have creating the things I want.
Learning other people’s code isn’t particularly enjoyable.
Aside: Rails and Ruby have also had a public meltdown lately, and I’m tired of feeling like a puny developer watching giants fight and say evil things.
Finding the Next Tech Stack
This was a long journey.
I started with Hanami. It is still Ruby, and the community is much friendlier. Hanami didn’t work for me. It felt like I kept bumping up against the framework, telling me I was doing it wrong. The community is friendly, but the framework is very rigid about “the right way” of doing things.
Then I hopped over to Crystal and tried Lucky, Amber, and Marten. They were all okay to work with, but didn’t strike my fancy.
Lucky was the easiest to get going. I had the data models for willow.camp up and running with a couple of rough-looking views in a few hours.
Marten’s “apps” are nice to work with (think slices in Hanami). But the framework doesn’t natively support subdomain routing, and I didn’t want to fight that design.
Crystal is also very slow to compile. A straightforward Lucky app took over 30 seconds on my M1 to compile! Who has that kind of time when you need to compile multiple times an hour?
Finally, the community. The Lucky devs are really active, which is nice. But Crystal itself seems to have a fragmented community. When I interacted with people, I didn’t really see someone like me in any of the channels.
What I Want in A Language and Framework
- An active, welcoming community that builds trust.
- Helpful error messages from the language.
- Good documentation.
That’s about it. I don’t need huge framework features. I need a language with a helpful design and friendly people.
The Next willow.camp Tech Stack
Once I realized that I valued community and friendly docs more than I valued framework features, I found Gleam.
- Backend:
- Gleam with the Wisp Framework on a Postgres database.
- Frontend:
- So far, I plan to use Nakai for server-side rendered HTML and HTMX or a similar library for interactive components.
Oh, and I’ve already written a Gleam package! willow.camp needs an accurate domain name parser, so I wrote psl to parse domains using the Public Suffix List.
The Next willow.camp Features
I have a long list of features I want to build for willow.camp, and it’s these features that inspired me to change the language and framework.
- A WYSYIG editor that supports markdown. This is the best of both worlds and opens willow.camp up to non-technical writers.
- An image library via openverse with an image editor UI.
- Email newsletters! I’m excited about this one. You will be able to collect a list of subscribers and send blog posts to your distribution list.
- ATProto and ActivityPub support.
- An RSS reader so you can follow blogs without a social profile.
- Private bookmarks with notes and highlights.