Introducing Postalgic

Early into 2023 I decided I would make my own blogging CMS (Content Management System) and started thinking about it enough that I came up with a name and even registered a domain name: Postalgic(.app). But then it seems like I got distracted, and it wasn’t until over two years later (about a month ago) that I sat down to build Postalgic for real.

The Inspiration

The main motivation for me to finally finish this app was a pretty negative experience I had with WordPress.com hosting for my resurrected music blog at staires.org. I’ve been using WordPress most of my life, so I figured I would support the company and pay for their managed hosting solution. For this blog (the one you’re reading), I use AWS Lightsail, which is basically just a tiny VPS and I’ve never been super happy with it as I had to rig it up to reboot every night or else my blog goes down, which is weird. So, it felt like it was a good opportunity to try something else out, and even though WordPress.com seemed absurdly expensive to me, I went for it.

All was well was at first, but then one day I started running into an issue where, as I was writing a post, the entire paragraph I was writing would just disappear. I contacted their support about it (I was a paying customer after all) and during diagnostics, it seemed like it may be because of my VPN (which is hosted by AWS, and is frequently blocked by websites for appearing like bot traffic). But, even with the VPN off, it kept happening. Long story short, based on this forum thread of people having the same issue, it seems to be caused by a shortcut added to the editor, Shift+Backspace, which will delete the entire paragraph.

They’ve allegedly reverted the change, but it took five months? Maybe more? And I don’t really believe that explanation, because I type in a very strange manner and I am pretty certain I have never accidentally hit Shift+Backspace at the same time. Additionally, this entire time the bug has never effected this WordPress instance, which is not hosted on WordPress.com. So, the whole thing feels fishy to me and left me with a very bad taste in my mouth, that I was paying so much money for a WordPress instance that couldn’t even use plugins and also getting a buggy and inferior version of the product.

At the same time, I always felt like WordPress’ mobile experience was pretty garbage, the writing experience on mobile feels pretty terrible. WordPress also just isn’t really suitable as a replacement for something like Twitter or Mastodon, either, because of its strong focus on long-form content and CMS-like features. I don’t always want to write a long post, sometimes I just want to toss something off without thinking a lot about it, and doing that in WordPress just always has felt wrong to me.

I started blogging back in 1999 with a service called, you guessed it, Blogger. If you described Blogger today, you’d call it a remotely hosted content management system and static site generator, tailored for journaling or blogging. This was before the idea of “tags” existed on the internet, so it was pretty barebones. You logged in, you picked your blog, and you wrote posts, and then it would generate the HTML for your site, connect to an FTP server of your choice, and upload your site to it. In some ways, it was ahead of its time, being a static site generator before anyone had ever thought of the term ‘static site’.

Fast forward to 2023, there’s a lot of static site generators out there, but they’re all kind of a pain in the ass. I used Gatsby for this blog for several years, but writing posts into Markdown files, having to make decisions myself about post slugs, then hoping that I don’t end up in dependency hell trying to build the site for testing, and having to commit the files to a git repo, which makes updating on-the-fly pretty much impossible… it was not convenient, it was not fun.

I wanted to be able to update my site whenever I wanted, wherever I was, and I didn’t want to deal with any annoyances whatsoever–no poorly designed apps, no being overcharged, no server maintenance, no dependencies, no workflow, no hacking concerns, no social media brouhahas over their egomaniac CEO…

The Build

About the same time I was deciding to work on Postalgic for real, I was turned onto Claude Code by a coworker. After using it for a couple small projects at work, I could feel the way I think about programming shifting a bit. This may be a contentious opinion in some circles (especially with some of the people over in the Hacker News comments), but the worst part of programming is often writing a bunch of boring ass code. There are some wackos out there who think the actual writing of code is the fun part, and I think those people imagine themselves to be doing some sort of ancient mental tai chi zen buddhism self-improvement “digital jazz” type bullshit, and I also think they are very wrong.

To me, the fun parts is everything except the writing of the code. I enjoy having the idea. I enjoy envisioning and building out the idea into a full project. I enjoy the problem solving aspects of building the app: how do I design the data model, how do I architect the app, what underlying technologies to use, etc. I enjoy doing code review, the “theorycrafting” aspect of software design, where you consider whether every bit of code is doing its job and won’t bite you in the butt in the future. I enjoy doing QA and dogfooding the app, to see if it accomplishes the task its supposed to, and whether it does it cleanly and in a non-annoying way.

What I do not particularly enjoy, but do not hate by any measure, is writing out long reams of same-y code that I’ve written out hundreds of times before; or googling answers to the same questions I’ve googled hundreds of times before. That code, it’s in my head, it’s getting it from my head and into the computer that is nothing but a chore. It’s busywork. If only I could build software and skip that annoying step… If only I could split myself in half and make that other sucker write all the code for me… If only…

Well, spoiler warning, that’s what Claude Code is. Claude Code is the poor son of a bitch who has to write all my code for me. I give it my ideas, as best as I can (which is quite good, because I am nothing if not an effective communicator; look at you, reading this, how many words have I written so far, and you’re still reading? What’s wrong with you?) and then Claude Code semi-effectively writes the code for me, and it does so quite quickly. It can implement an entire new screen in an app for me, data model, functionality and all, while I brush my teeth. (Assuming I remembered to hit Shift+Tab before I walk away and I don’t come back to it asking for permission to make its first edits.)

I don’t want to overstate it, Claude Code is not flawless. When writing SwiftUI specific code, it can be quite bad, as it’s full of muddled information from years of SwiftUI getting annual updates and cause huge changes to the most effective way to accomplish certain basic tasks. It’s not smarter than me, that’s for sure, and frequently makes mistakes quite like a poorly trained junior engineer could, especially if given poor instruction.

I ran into several scenarios where, because I did not fully understand the problem scope, Claude Code didn’t seem to understand it either, and it spun its wheels (and burned money) building out nonfunctional features that it could not get into functioning state. I learned the hard way (by burning money, several times) that if Claude Code can’t fix its own code within 1 or 2 tries, it’s better for me to just throw everything it did out, blame myself, and fix whatever is wrong with my prompting. Usually this meant I needed to go do some of my usual feature building research myself, finding the most right solution and some implementation examples of it, which I then feed into Claude Code so that it knows everything that I know.

Let’s cut the chase. Claude Code touched every single part of this project, and saved me a massive amount of time. Not only that, it gave me a lot of confidence that I did not previously have as an engineer. This is saying a lot, because I was a very confident engineer already, but my grasp did not reach as far as it could because I am inherently quite lazy. Because Claude Code takes so much of the busy work out of software engineering, it’s really taken some shackles off of my willingness to let ideas stretch and grow. All that’s left for me is the fun parts, so every idea seems fun to me now, and not full of drudgery and jockeying code.

I really love Claude Code and I am now pretty fiercely devoted to it. I am very excited to see where the future leads for app development, and I say that without trying to be a soothsayer, which inevitably leads to forecasting doom and the destruction of the human race.

The App

Postalgic is a fully featured CMS and static site generator for iPhones. It’s basically as close to Blogger.com from the year 2000 as you can get, with some extra modern features, like full category and tag support, and rich ’embeds’ like YouTube, link share previews, and image galleries. It also supports several publishing methods: you can upload the site via SFTP, AWS S3, or push it to any git repo (for GitHub Pages support and more). It has a fully customizable templating system, and comes with a default theme which has a UX for customizing its colors.

I’m already using it to host my resurrected journaling domain, my resurrected music blog domain, and the devlog for the app. A friend of mine is using it for a journal and a card game blog.

The Postalgic.app website, which was built and written essentially entirely by Claude Code, can tell you more about the app, but I suppose the screenshots I came up with for the App Store could tell you even more.

You can buy Postalgic on the App Store right now! Who wouldn’t want to?

The Future

This is really only the start of my plans for Postalgic. I intend for there to be two more phases of the project, though they’re somewhat conjoined. One is that I want to offer paid hosting under the .postalgic.app domain, so people can pay a very low fee to get a username on the domain and be able to upload their site there. The second is that I want to allow Postalgic blogs to submit their posts to what I’ve been calling “Postalgic Portal” in my head, which’ll be a non-algorithmic feed of posts people have submitted from their own blogs, meant to allow for discovery of other Postalgic blogs.

I have some other things I want to do first, or should do first, like doing maintenance on my other apps that are on the App Store, but these things will hopefully be a fast follow, assuming I don’t get too hung up on making decisions about how and where to host the backend services needed for it. I have not built out a SaaS myself, I just help run one professionally, so it’ll be a slightly new experience for me.

That’s it for now, see you next time.