Projectstudie: GoDutch.us
Blogstijl-website - Betalingsdiensten - Zelf gehost
Ons gezin is in maart naar Nederland verhuisd op een DAFT-visum. Een van de vereisten van dit visum is dat je productief zelfstandig ondernemer bent. Dus terwijl ik hier bij Kaperkunde wacht op klanten voor softwarewerk, ben ik begonnen met het bouwen van voorbeeldprojecten / apps / en ideeën voor mezelf, zowel als mogelijke bron van extra inkomsten als als portfolio om te laten zien wat voor werk ik kan doen. En om het belang van ervaring te benadrukken, zelfs bij eenvoudige taken, deel ik het diepere denkproces en de gekozen technologieën in deze “Project Study”-posts.
Voor deze projecten zal ik beschrijven welk werk erbij komt kijken, hoeveel tijd nodig is, en misschien zelfs een grove prijsinschatting geven. Voor mijn eerste project nam ik iets waarvan ik dacht dat het nuttig zou zijn en waar ik enige expertise in had: verhuizen naar Nederland. Ik besloot een veelvoorkomende vraag van webklanten te maken: een CMS (blog) dat bruikbaar zou zijn als community-portaal en informatiebron voor mensen die emigratie uit de VS overwegen, en ook als mogelijke inkomstenbron door consultatie / hulp rond relocatie aan te bieden.
Requirements
- Bied een portaal voor mensen die geïnteresseerd zijn in verhuizen van de VS naar Nederland
- Bied een manier om rijke content-artikelen als dienst te delen, zowel gratis als mogelijk via “premium” betaalde abonnementen
- Moet uitgebreide controle over content bieden om delen op sociale media makkelijk te maken en SEO te ondersteunen
- Sta meerdere auteurs en community-engagement toe (reacties)
- Sta analytics toe om leads en bezoeken te volgen
- Flexibiliteit om custom tooling / pagina’s / content toe te voegen
- Zelf gehost, voor privacy, controle en kosten
- Responsive (werkt op mobiel of desktop) / Professioneel / Moderne UI
Final Product
- Benodigde tijd (voor het platform, niet de artikelen): 4 uur
- Vaste kosten: $78 / jaar
- Hosting: $6 / maand
- Domein: $6 / jaar
GoDutch.us
Advies en community-ondersteuning voor mensen die bezig zijn met, of overwegen, een verhuizing uit de VS naar Nederland of Europa in het buitenland.
Solutions Utilized
Dit deel wordt wat technisch, dus de doelgroep zijn mensen die geïnteresseerd zijn in een gedetailleerdere beschrijving.
CMS: Ghost
Door de jaren heen heb ik geleerd dat bijna alles wat je in software wilt doen al eerder is gedaan. Vaak zijn er meer dan één open-source (gratis) softwareoplossingen, en betaalde gehoste oplossingen die afhankelijk van je behoeften kunnen werken. Dus de eerste waardevolle dienst die een deskundige engineer kan leveren, is het onderzoeken van deze oplossingen — het landschap verandert voortdurend — en het uitvoeren van een kritische analyse van hoe elke oplossing aansluit bij de requirements van het project.
Een slimme softwarepiraat zoals ik weet dat moderne AI erg goed is in dit eerste onderzoek. Zelfs als ik een voorkeur heb, verschuift de stand van de techniek voortdurend, dus ik doe dit als eerste stap bij elke klantdeployment. Het resultaat hier was zoals ik verwachtte, maar nog steeds nuttig: tussen Wordpress — dat ook opties heeft om namens jou te hosten — en Ghost. Ik had al deze opties (Ghost, Wordpress en Drupal) op verschillende momenten om verschillende redenen gebruikt, en ik was het eens met de conclusie dat Ghost de juiste keuze was. Een bonus is de manier waarop het analytics doet: het verzamelt geaggregeerde data en deelt die niet met derde partijen, waardoor ik geen irritante “EU Cookie”-pop-up hoef te tonen als dit correct wordt gedaan en geverifieerd.
Domain Host: Porkbun
Je hebt een website nodig, en hier gebruikte ik mijn favoriet: Porkbun. Het is goedkoop, no-nonsense, en heeft gratis mail forwarding ingebouwd. Na het verdwijnen van Google Domains vond ik dit de beste no-nonsense domeinhost.
Hosting: Digitalocean NY Droplet
Ik heb al een bestaande relatie met DigitalOcean, en de prijs is redelijk, maar ik nam toch even de tijd om te kijken welke nieuwe alternatieven of veranderingen er waren sinds de laatste keer dat ik iets deployde. AI kwam terug met Hetzner Cloud als betere beslissing, maar noemde ook DigitalOcean — wat voor mij een bekende goede optie is — dus ik koos die route voor ongeveer dezelfde kosten. Ik probeer de nieuwe service later misschien nog uit, omdat ik graag op de hoogte blijf van de beste opties, en de Hetzner-optie belooft meer CPU, RAM en opslag voor een lagere prijs 🏴☠️
Email: Mailgun Free
Normaal probeer ik bij het bouwen van een project voor mezelf te voorkomen dat ik voor de basisfuncties van mijn applicatie afhankelijk ben van derde partijen. Het doel van deze diensten is vaak om aanvankelijk makkelijk, functioneel en goedkoop te zijn, maar later flink in prijs te stijgen. Succes met een CMS vereist e-mailnotificaties voor login, maar vooral ook voor abonnementen, zodat nieuwe content verkeer kan genereren.
Mailgun is prima in de gratis tier, en het Ghost-platform is er vrij hard aan gekoppeld, om een principiële reden: je eigen e-mailserver hosten zit vol uitdagingen en verhoogt de hoeveelheid werk aanzienlijk. Moderne webinterfaces zoals Gmail enzovoort hebben agressieve spamdetectie, en het is zover gekomen dat e-mail eigenlijk alleen nog wordt geaccepteerd van vertrouwde bestaande bronnen. Je kunt proberen je eigen e-mail te hosten, maar waarschijnlijk staat het IP-adres van je VPS — en mogelijk de hele range — al op een blacklist of wordt het op zijn minst niet vertrouwd, dankzij spammers die VPS-diensten gebruiken om hun ding te doen.
Het gratis Mailgun-plan geeft 3000 e-mails per maand. Dit betekent dat 5 keer per maand posten naar 600 abonnees het budget zou opmaken. Tel daar transactionele e-mails bij op, zoals login en accountaanmaak, en een betere grove schatting zou ongeveer 500 abonnees zijn voordat ik de limiet raak. 500 abonnees hebben zou een mooi probleem zijn, en waarschijnlijk betekenen dat ik enige omzet heb. De volgende sprong is echter bijna 5x mijn totale bestaande vaste kosten en gaat naar 50k e-mails per maand, of dichter bij 10k abonnees.
Source Control: Github
Er komt veel kijken bij het lanceren van een website waar vibe coding niet echt op ingaat tenzij je erom vraagt. Na het bouwen van veel websites heb ik ontdekt dat het belangrijk is om een soepele overgang te hebben voor upgrades / deployment, zodat snelle fixes mogelijk zijn — hopelijk zelden nodig — in prod, evenals consistente omgevingen tussen lokale ontwikkeling en productie.
Github voor source control is een van die diensten die op een dag slechter zou kunnen worden, maar die veel gratis biedt. Daarom gebruik ik het nog steeds in plaats van te proberen het zelf te hosten. Dit komt doordat Github mijn primaire check voor afhankelijkheid van externe diensten doorstaat: “Hoeveel werk zou het zijn om over te stappen als ze het gratis aanbod weghalen?” Omdat ik Github vooral gebruik voor source check-in, en git zelf open source is, is overstappen makkelijk als Micro$oft besluit gratis gebruikers te laten betalen.
Deployments, CI/CD: Coolify
Een plek waar Github je wel een beetje lockt, is deployment: de code uit je source repo in productie krijgen. Hiervoor gebruik ik Coolify. Het is super rad voor onafhankelijke developers, en hoewel het misschien een deel van de complexe kracht mist van het beheren van je eigen Kubernetes-cluster, doet het uitstekend werk door een fijne web-UI te bieden voor het beheren van webdeployments, evenals automatische integratie voor veerkrachtige deployment bij push.
Dit betekent dat ik code naar mijn repo kan pushen, Coolify het automatisch opmerkt, mijn webapplicatie opnieuw buildt, health checks uitvoert, en als alles goed is de oude deployment vervangt door de nieuwe met weinig of geen downtime. Daarnaast biedt het monitoring en notificaties — die ik naar Discord, e-mail of elders kan sturen — zodat ik weet wanneer mijn website down gaat.
Tot slot kan ik met Docker en Docker Compose een identieke ervaring krijgen voor al mijn webservices wanneer ik op mijn lokale machine ontwikkel. In het verleden heb ik ook deployments gedaan via Github Actions — wat kosten met zich mee kan brengen, maar redelijk kan zijn bij klein gebruik — Heroku en Vercel. Coolify geeft de meeste controle en de laagste kosten, dus het blijft mijn persoonlijke favoriet.
Reflection
- Ghost deployen naar Coolify was een beetje pijnlijk, omdat de nieuwste versie met analytics (Ghost 6) niet beschikbaar is als template en niet goed compatibel is met de Docker Compose beta die TryGhost deelt. Hier ging het grootste deel van de 4 uur die ik hieraan werkte naartoe: het tweaken van de bestaande TryGhost Docker Compose-setup zodat die met Coolify werkt. Het goede nieuws: ik heb hem geforkt en kan hem nu gebruiken om nieuwe Ghost-blogs veel sneller te deployen.
- Ghost 6 brengt cruciale post view analytics naar Ghost — Wordpress biedt dit en het is hun meest gebruikte functionaliteit — maar voor self-deployment zijn ze een samenwerking aangegaan met tinybird.co: een third-party ClickHouse. Het is mij niet echt duidelijk waarom dit nodig was, behalve misschien performance-optimalisatie, aangezien je je eigen analytics met betere privacy voor je gebruikers — waarbij je je data behoudt — kunt verzamelen vanaf dezelfde VPS waarop je Ghost host, of Ghost zelf zou de API’s kunnen exposen. Er zou hier een performance-kost zijn, maar ik denk niet dat die van een omvang is waar de meesten om zullen geven. Ook is tinybird.co tot een bepaald punt gratis, maar het doorstaat mijn lock-in-test niet, omdat het de enige ondersteunde endpoint voor Ghost is, en voor zover ik kan zien heeft nog niemand een third-party open-source clone voor deze functionaliteit geschreven.
- Ghost 6 komt met een service om je blog te helpen “federeren” naar dingen als Threads en Mastodon, maar ik weet niet zeker hoeveel waarde dat heeft. Het is momenteel beta voor self-hosting en er komen vaak grote breaking changes binnen, dus ik heb deze service in de config uitgezet.
- Ghost zelf werkt behoorlijk goed.
Next Steps
- Ik ga proberen naar Hetzner Cloud te deployen om te zien of het betere performance levert voor lagere kosten.
- Ik denk dat ik misschien mijn volgende project heb gevonden: een Ghost - Tinybird drop-in zodat je een blog zelf kunt hosten die zijn eigen analytics behoudt.godutch
Member discussion