Tech and Services of My Online Presence
As developers, we all have our side-projects that we want to make available and promote online. In my case, several of them are core to my business. I need several technologies and services to serve my sites and to improve my content and reach. But researching which services and technologies to use can be a time-consuming process. Therefore, I’ve always enjoyed reading about other people’s stack of technologies and services. Over the years, I’ve combined my own set of technologies and services into something that I really like. So now I’m sharing my list so that you can take some inspiration to support your own developer portfolio or side-projects.
Hosting stack
When I launched my first couple of sites, I used a standard hosting service where you had to upload your site’s files and they would serve them, together with a fully managed database. And while having a fully managed database was nice, I felt restricted in the technologies I could use and the flow of deploying new content wasn’t to my liking. Therefore, I switched to a more self-hosted stack, while making use of cloud servers.
Domains
My primary domain registrar is Gandi. Simple pricing, no annoying upselling, and comes with 2 basic mailboxes included per domain (which I’ve used for a couple domains).
Cloud Servers
I run my hosting stack on a Vultr cloud server, an alternative to DigitalOcean. Their primary focus is providing cloud servers which you can manage via their easy-to-use interface. In no time, you can have a server running with one of the most common Linux distros, an automated backup schedule and some firewall rules.
Right now I’m using an instance with 1 CPU, 2GB memory and 55GB of SSD storage, which costs me about $14.5 per month (including backups).
App/Site deployment
I’m using Docker for all my services, as it allows a clean isolation of each application with all its dependencies nicely packaged into the Docker image. No more sudden surprises when a standard hosting service upgrades their version of framework X.
Since I have multiple containers that I need to run, I need something to manage them. I used a simple Docker Compose, instead of a complex and heavyweight Kubernetes stack, for my basic non-critical set of services. And that’s coming from someone who uses Kubernetes-like platforms every day for more complex client projects.
I have one Docker Compose file with the configuration of all my services, separating private (e.g. database) and public services (e.g. sites) using different Docker networks and using volumes to make my site’s content available to the web-serving containers.
Bitnami Docker Images
Looking for a Docker image to serve a commonly used service? Then chances are a Bitnami image exists for it. Bitnami has an extensive collection of production-grade and regularly updated images. Minideb is the base image for most if not all of their images, which is their minimalist image of Debian, weighing in at about 67MB uncompressed compared to Debian’s standard image of 124MB.
SSL certificates
I use Let’s Encrypt to serve my sites with a valid SSL certificate. Let’s Encrypt is a non-profit certificate authority, with its biggest selling point (next to it being free) being the automated request and renewal of certificates. Requesting and installing your new certificates requires no manual action anymore. Next to that, it can be easily integrated into any stack and is even supported in several reverse proxies (such as Traefik).
Monitoring
At this moment, my monitoring is very limited, given that none of my services are critical. Therefore, I only have some uptime alerts configured using the free version of UptimeRobot. It does a simple http-based status check to verify that my sites are still up and running and sends me an email when they’re down.
The Digitalbuff.dev Site
To build and maintain this site, I use a static-site generator called Jekyll. It’s based on Ruby, but when using it, you rarely come into contact with it. You primarily use HTML and Markdown. Personally, I use HTML for the layout, but I write all my articles in Markdown. Jekyll is extremely light-weight, goes out of your way when you’re writing new articles, supports the Liquid template language, allows you to separate data from layout and can be easily extended.
Site Analytics
I want to have some high-level insights into the amount of visitors coming to my site, trending pages, referrer channels (social channels, search engines, …) and the continent-based location of visitors. It is one way of knowing that I’m making progress in terms of reach. I’m absolutely not interested in fine-grained details of visitors, I’m only interested in short- and long-term trends.
To capture these analytics, I’m using Matomo, which is an open source Google Analytics alternative which allows fine-grained privacy setting controls. You can deploy it either on-premise (as I did on my server) or use their cloud offering.
Because I’m only interested in raw trends, I’ve configured my Matomo instance with the following privacy-related settings:
- respects Do Not Track (DNT) setting of the visitor’s browser
- anonymizes last 2 bytes of the visitor’s IP address (192.168.xxx.xxx). This means that the location is only somewhat accurate on a continent level (Europe, North America, Asia, …), which is exactly what I want.
- forced tracking without cookies: meaning that my Matomo instance will ignore all tracking cookies on the server side. Because I don’t use cookies, certain statistics won’t be completely accurate anymore, such as returning visitor count. But again, trends not details, so I don’t care.
- anonymization of the referrer: only the domain of the referrer URL is stored, such that it does not track any personal information that may be in the full URL.
- automatic deletion of raw data: Matomo receives and stores raw data, from which it calculates the aggregates. I’ve configured it such that it automatically deletes this raw data.
- disabled visitor profiles: Matomo can create visitor profiles, so that you can see the behavior of an individual visitor. Again, I’m only interested in trends (plus, since I’m not using cookies, it would be unreliable anyway), so I’ve disabled this feature entirely.
SEO
To improve my site’s content and traffic coming from search engines, I’m also investing in SEO (search engine optimization). However, for me SEO isn’t about applying some SEO hacks to improve my search ranking, instead it’s about figuring out how to tailer my content more towards potential visitors such that it solves their problems better, uses their terminology and to discover related and very relevant topics that I haven’t covered yet. SEO makes the content of my site better for my users.
In this context, I’m using a service called KeywordsEverywhere. It’s a browser add-on that provides keyword insights while using Google, such as search volume, cost per click (CPC), competition rating, SEO difficulty, related keywords and additional insights in related website results. Its pricing model is also very affordable, as it uses a pay as you go model where $10 buys you 100.000 credits. 1 credit equals one keyword result shown on the page, so for every keyword search you enter in Google you actually use several credits.
Audience Outreach
There are a couple ways of ways I try to reach an audience. Two important aspects are social channels and email. One thing they all have in common is that they should deliver consistent value to my audience.
One important criteria for the tools I use here is that they allow me to schedule updates. When I’m done working on some new content, I want to schedule it so that it gets automatically send out at a certain point in time in the future. That way I can work on something else while automagically my content gets delivered to my audience.
The approach I like the most is an email newsletter. It has something personal to it. People took the effort to subscribe to my content and I’m allowed to send them an update when I have something interesting to share. To do this effectively, I’m using ConvertKit, which is a platform to:
- manage an email list
- compose, schedule and broadcast emails to (a segment of) that list
- use rule-based flows to send emails automatically (think email courses, for example)
- create email sign up forms
I like this platform because it’s clean, it’s made by a creator who I’ve been following for years now, it has a free version to get you started and their email delivery rates (yes, that’s a thing) are pretty good. For now, I’m still using the free version, with no automation capabilities.
Social Channels
Two social channels that I regularly post my content on are Twitter and LinkedIn. Also here I want to schedule my updates automatically, which is where Buffer comes in. You can link your Buffer account to multiple social channels and schedule updates. It also comes with a free version.
Communication
Email is an important tool for my business, so I’m paying Fastmail to host my email. It’s a no-nonsense and rock-solid e-mail service that has been around for quite a while now. Email is the core of their business and they know how to get it right.
While Fastmail’s web interface is great, I still prefer a desktop client to bundle multiple email accounts into one location. For this I’m using the Windows-based Mailbird client. As with many of the products I use, it’s clean and powerful.