Fountain Update 0x01
Remember how I proclaimed “I want my own CMS and it’s going to be magical?” Yeah.
Since then, I have done a lot of thinking. As established, there’s a grand vision to Fountain that has been meandering through my head for years already. As said before, I could go back through my old repos and notebooks and find the exact time and date I first started sketching and thinking about the system architecture. But what good would that do? After all, as any financial advisor will tell you at least five times a day, past results are no indicator for future success.
To future success
The thing that held me back most in the past is wanting to write the whole thing to then replace my current setup. While an admirable approach, it’s prone to slow down to a halt as soon as the initial excitement wears out.
The solution, hopefully, now is to break down the big idea into small, usable milestones. Knowing me, there will still be large gaps and massive changes of interest or needs along the way so what I will not do is sit down and make a full plan.
So what’s been happening?
As some of you may know, I worked on a Vala based version of Fountain for a while. Also with long hiatuses but still, it was quite usable in the end. It could deliver content on a fefe-style website and was fully git-driven, meaning there was a separate content repository that was pulled by the server and used to generate the websites. Since I didn’t quite feel comfortable enough with continuing this project in Vala I eventually stopped working on it. That may also just have been the aforementioned excitement drop-off.
For a while now, Vapor has been on my radar as a pretty stable, well maintained base framework for possibly doing the same thing in Swift. However, as I said above, I want usable milestones. Therefore, I need to find a way to move the current setup for this website here from Hugo to Fountain. Time to do a small architecture comparison:
Hugo | Fountain |
---|---|
Static Site Generator | Full CMS |
Everything in one Repository | Multiple repositories, at least content and styling separable |
No builtin commenting | Integrates with Fediverse |
Can run offsite | Needs runtime on server |
Fountain is different from Hugo. In many ways very different. I am not writing another static site generator. There’s enough of those and their existence has it’s place in the stack forest but they’re not what I want. I miss the olde days of blogging but - for now even more reasons - I don’t want to go back to Wordpress. What I do want to contribute to is the ease of use and simplicity Blogger, Wordpress, and even Tumblr used to provide. That is a longterm goal. Working towards that leads to the above architecture requirements.
Fountain needs to be able to react. Its content needs to be openly accessible and modifiable - even Wordpress to this day is a closed ecosystem, you can only modify the site content within the software.
It needs to be versatile - content comes in way more different forms than it used to. We don’t just have articles with categories and tags anymore. The widespread proliferation of easy to use static site generators enabled people to think less about structuring everything into (blog) posts and more about how to group things. Historically, hyperlinking and deep structuring were the Webs’ greatest powers. Todays siloing content aggregators, Facebook, Twitter X, Instagram, and the likes are very focused on people staying on their sites as long as possible. This works because we’re used to the limited forms of content we can provide and consume there. However, I don’t want to be in a Web that discourages offsite hyperlinks and limits and controls the creative output. I want to be in a Web that thrives on content, not ad-revenue increase. I believe that Web is still possible and just needs a little technology push. The true social network is not one place, but a network of places.
Fountain therefore needs to be interconnecting with the world. Back in the day, we mostly used Comments, RSS or Atom Feeds and later Pingbacks and Tracebacks for that. Those worked great at the time to foster communities. However, back in the day we weren’t centralised. Yes, there was already huge hosting players like Blogger and later also Wordpress and Tumblr, but, crucially, the content and moderation wasn’t centralised. Decentralisation is the key to reclaiming not only the web, but in my opinion also the generally lost diversity in opinion we as a people desperately need to thrive. This is where the Fediverse comes in like a knight in shining armour. I don’t just want comments or links to your blog. I want you to be able to write about my content wherever they want to but I want there to be a thread. Let’s weave this thing together again.
And, finally, it needs to be able to be run standalone with moderate technical expertise. Wordpress did and still does that perfectly. Fountain won’t be able to achieve that ease of use in a very long time if ever just because Wordpress was one of the biggest drivers for the pervasiveness of PHP hosting solutions. Not choosing PHP but Swift automatically leads to more requirements on a setup. I am fully aware of that but the benefits of a compiled modern language completely outweigh the drawbacks. And, with Docker and other container solutions, a lot of the hassle can be automated away.
A first milestone
Laying the foundation of Fountain. That sounds kinda precocious, doesn’t it? Extrapolating from the above architecture comparison and brief project history excerpt, it’s “obvious”, that I’m starting with a Git(Hub) communication server.
- I already have a running website. It is currently auto-deployed on push via GitHub Actions which works flawlessly.
- I need a reason to deploy a fountain server, that is, it needs to be something useful and I need it to be up and running rather sooner than later so that I don’t loose interest in the project.
- I want to separate content from code.
These three requirements mingle quite well:
- I can easily extract the content with
git subtree
and push it into a separate repository - I can send push events for that subtree repository to Fountain
- I can have Fountain trigger a pull and merge workflow on the main repository
I am fully aware that none of these requirements need the elaborate setup the result will end up being. Not delulu. Yet. Starting a project like this needs a solid foundation. After this, I will have gained some experience with Vapor, rekindled my acquaintance with the GitHub API and deployed a first little running server which will start to give me insights into ever simplifying the setup in the future.
Visibility
I did and do a lot of open source software development. So far, this was focused on small-ish libraries, the odd Vue component and the likes. Historically, my communication around these efforts has been very sparse to say the least. At best, I did open issues on GitHub containing some of my plans but still, there generally was silence aside from commits.
This I want to change. So here’s a different approach for Fountain: I will open source most of it. Why not everything? I don’t want to say all of it and later regret that decision. In my wildest dreams I will eventually put everything out in the open. Importantly however, I want to make all parts of Fountain open that are required for what I - or maybe at some point a community - consider core functionality. I simply do not know what that will entail yet.
Additionally, I want to keep making these posts. I am not ready to put a schedule on them yet, but they keep me accountable and at the very least force me to plan one step ahead.
At the moment, these posts are everything there is to see publicly. I am currently implementing the first milestone and once that is working satisfactorily for me I will consider flipping the switch on the repository. I may also decide to keep it closed until it is a somewhat self-sufficient platform. Setting up the communication server is a great first step for me, but at this moment it feels wrong to publish that as a software.
But don’t you just want to make money off of this in the end?
Yes. I do. At least I hope to. Making money of software is kind of my vocation. Here’s the thing: I think there’s a sweet spot between making (part of) a living from something and still contributing to the greater good.
There’s also different options. Of course there’s the almighty SaaS/PaaS construct looming in the distance. But there’s also just good old GitHub Sponsors and other reward systems. We’ll see.
For the time being, this is not my aim for this project. My aim is to keep going and find out if I can even get it to move towards the direction I’m dreaming of.
This is a post about Fountain. Fountain is a new kind of web publishing software I am working on. If you want to keep up with news about the development journey please don’t hesitate to subscribe to the Atom feed at https://meanderingsoul.com/stmfd/index.xml.