7 min read

Project Study: GoDutch.us

Project Study: What is the best way to build a cheaply self hosted functional CMS in 2026?
Project Study: GoDutch.us
Ghost / Porkbun / DigitalOcean / Mailgun / Github / Coolify / Docker

Blog style website - Payment Services - Self Hosted

Our family moved to the Netherlands in March on a DAFT visa. One of the requirements of this visa is to be productively self employed, so while I'm awaiting clients for software work here at Kaperkunde, I've begun building sample projects / apps / and ideas for myself, both as a potential source of secondary income and as a portfolio to show the kind of work I can do, and to highlight the importance of experience even with simple tasks, I'm sharing the deeper thought process and technologies chosen in these "Project Study" posts.

For these projects, I'll detail the work involved, time necessary, and perhaps even provide a ballpark price estimate. For my first project I took something I thought would be useful and had some expertise in, moving to the Netherlands, and decided to create a common ask from web customers, a CMS (Blog) that would be usable as a community building portal and information resource for those considering US Emigration, as well as a possible source of income through providing consultation / assistance around relocating.

Requirements

  • Provide a portal for those interested in moving from the US to the Netherlands
  • Provide a way to share rich content articles as a service, both free and potentially "premium" paid subscriptions
  • Should have rich content control to make easy to share on social media and help with SEO
  • Allow for multiple authors, community engagement (comments)
  • Allow for analytics to track leads and visits
  • Flexibility to put custom tooling / pages / content
  • Self hosted, for privacy, control and cost
  • Responsive (works on mobile or desktop) / Professional / Modern UI

Final Product

  • Time required (for the platform, not the articles): 4 hours
  • Fixed Cost: $78 / year
    • Hosting: $6 / month
    • Domain: $6 / year

GoDutch.us

Advice and community support for those in the process of or considering making a move out of the US for the Netherlands or Europe abroad.

Visit the site

Solutions Utilized

This part gets a bit technical, so the target audience are those who are interested in a more detailed description.

CMS: Ghost

Over the years, I've learned that almost anything you want to do in software has been done before. Often there are more than one open source (free) software solution, and paid hosted solutions that can work depending on your needs. So the first valuable service a knowledgable engineer can provide is researching these solutions (it is an ever changing landscape) and performing a critical analysis of how each solution aligns with the requirements of the project. A savvy software pirate like myself knows that modern AI is really good at this initial research. Even if I have a bias, the state of the art is constantly shifting, so I'll do this as the first step of any customer deployment. The result here was as I expected, but still useful, between Wordpress (which also has options for hosting on your behalf) and Ghost. I had used all of these (Ghost, Wordpress and Drupal) at different times for different reasons, and I agreed with the take away that Ghost was the right fit. A bonus is the way it does analytics, collecting aggregate data and not sharing with third parties keeps me from having to do an annoying "EU Cookie" pop up if done correctly and verified.

Domain Host: Porkbun

Need a website, and I used my favorite here, Porkbun. It's cheap, no nonsense and has free mail forwarding built in. After the demise of google domains, I found this to be the best no-nonsense domain host.

Hosting: Digitalocean NY Droplet

I have an existing relationship with DigitalOcean, and the price is reasonable, but I still took a moment to see what new alternatives or changes might have occurred since the last time I deployed. AI came back with Hetzner Cloud being a better decision, but it mentioned DigitalOcean (which is a known good for me) so I went that route for roughly the same cost. Still may trial the new service later as I try to keep abreast of the best options, and the Hetzner option promises more CPU, RAM and storage for a smaller price 🏴‍☠️

Email: Mailgun Free

Normally when building a project for myself I try and avoid depending on third party services for the basics of my application, as the goal of these services is often to be easy, functional and cheap initially but to jump in price afterwards. CMS success requires email notifications for login, but importantly for subscription (so that new content can drive traffic). Mailgun is decent at the free tier, and Ghost platform is tied pretty hard to it, for a principled reason: Hosting your own email server is fraught with challenges and greatly increases the amount of work required. Modern web interfaces like Gmail etc, have aggressive spam detection, and it has gotten to the point that email is only really accepted from trusted existing sources. You can try and host your email, but likely the IP address of your VPS (and possibly the whole range) has been blacklisted or at least is not trusted thanks to spammers using VPS services to do their thing. Mailgun free plan gives 3000 email per month. This means posting 5 times a month to 600 subscribers would kill the budget, add transactional emails like login and account creation and a better rough estimate would be 500 or so subscribers before I cap. Having 500 subscribers would be a nice problem, and likely mean that I have some revenue, The next jump however is nearly 5x my total existing fixed costs and goes to 50k email per month or closer to 10k subscribers. The lock in here is real, ghost currently doesn't support newsletter sending without mailgun, but there are open source projects for creating your own mailgun proxy stand-in, as well as integrating to different SES (Simple Email Service) like those hosted by Amazon for cheaper rates. Weighing all that out, I agree with the mailgun choice that ghost made and it works for our use on free.

Source Control: Github

Lots of things go into launching a website that vibe coding won't really get into unless you ask. After building lots of websites, I found it is important to have a smooth transition for upgrades / deployment that allows for rapid fixes (when hopefully rarely needed) in prod, as well as consistent environments between local development and production.

Github for source control is one of those services that could someday get worse, but provides a lot for free, and so I still use rather than trying to host myself. This is because Github passes my primary check for depending on other services "How work would it be to switch if they take away the free offer", since I mostly depend on Github for it's source checkin, and git itself is open source, switching if Micro$oft decides to start charging free users is an easy move.

Deployments, CI/CD: Coolify

One place that Github does lock you in a bit is deployment, or getting the code from your source repo into production. For this I use Coolify. It's super rad for independent developers, and while it may lack some of the complex power of managing your own Kubernetes cluster, it does a fine job at providing a nice web UI for managing web deployments, as well as automatic integration for resilient deployment on push (meaning I can push code to my repo, coolify will automatically notice, re-build my web application, and perform health checks, and if everything is good swap the old deployment for the fresh one with little or no downtime). Additionally, it provides monitoring and notifications (which I can send to discord, email or elsewhere), so I can know when my website goes down. Finally, using docker and docker compose I can get an identical experience for all my web services when developing on my local machine. In the past I have also done deployments through Github Actions (which can have a price tag associated, but can be reasonable for small usage), Heroku, and Vercel. Coolify gives the most control and the least cost so my personal favorite still.

Reflection

  • Deploying ghost to coolify was a bit of a pain, as the latest version with analytics (Ghost 6) isn't available as a template, and isn't properly compatible with the Docker Compose beta that TryGhost is sharing. This was where most of the 4 hours I was working on this went to, tweaking the existing TryGhost docker compose setup to work with coolify, the good news I forked it and can use it now to rapidly deploy new Ghost blogs in a much shorter time.
  • Ghost 6 brings critical post view analytics to Ghost (Wordpress provides this and it's their most utilized functionality) but for the self deployment they partnered with tinybird.co – A third party click house, it's not really clear to me why this was necessary other than perhaps performance optimization, as you can collect your own analytics with better privacy for your users (maintaining your data) from the same VPS you are hosting ghost on (or ghost itself could expose the API's)... There would be a performance cost here but I don't think it's going to be of a magnitude that most will care. Also, tinybird.co is free to a certain point, but doesn't pass my lock in test because it's the only supported endpoint for ghost, and as far as I can tell no one has written a third party open source clone for the functionality yet.
  • Ghost 6 comes with a service to help "federate" your blog to things like threads and Mastadon, but I'm not sure it's much value, it's currently beta for self hosting and major breaking changes coming in frequently so I turned this service off in config.
  • Ghost itself works quite well

Next Steps

  1. Going to try deploying to Hetzner cloud to see if it provides better performance for the lower cost.
  2. Think I might have found my next project, a ghost - tinybird drop in so that you can self host a blog that keeps its own analytics.