Technologische stack van cutty.dev — bewuste keuzes
Wat zit er onder de motorkap van cutty.dev en waarom. Zonder evangelisme — de filosofie: een saaie, stabiele stack, hosting in de EU en privacy ingebakken in de architectuur, die door één persoon te onderhouden is.
De meeste "mijn tech stack" berichten zijn een trotse lijst van nieuwigheden. Kijk, ik heb dit, ik heb dat, en hier is nog een gloednieuwe bibliotheek van vorige week. Deze zal anders zijn.
Want de waarheid is dat wanneer je een project alleen runt, je niet op zoek bent naar het meest modieuze. Je zoekt naar iets dat je niet om drie uur 's nachts wakker maakt. En dat is precies waar de hele cutty.dev tech stack om draait: saai in plaats van modieus, Europees in plaats van Amerikaans, privé vanaf de basis, en eenvoudig genoeg om door één paar handen te worden beheerd.
Ik ga stap voor stap door de punten, alsof ik het je uitleg bij een kopje koffie.
Astro geserveerd op de server (en waarom niet iets "vetters")
cutty.dev is Astro met server-side rendering. Elke aanvraag gaat via de server, assembleert de pagina en stuurt de kant-en-klare HTML terug. Saai? Precies dat is het punt.
Ik wilde drie dingen: server-side rendering zonder zware machinery, goede ondersteuning voor meerdere talen direct uit de doos, en snelheid zonder overhead. Astro biedt dit allemaal, terwijl de code leesbaar blijft. Wanneer ik na een pauze van twee maanden ermee aan de slag ga, weet ik precies wat er gebeurt. Bij een solo-project is dit meer waard dan welke modieuze extensie dan ook die na een jaar niet meer wordt ondersteund.
Eén bestand in plaats van een database met vuurwerk
SQLite. Eén database, één bestand op de schijf. Daarnaast een query-laag die communiceert met TypeScript, dus als ik de datastructuur wijzig, krijg ik een foutmelding in mijn editor en niet op productie om middernacht.
Waarom precies dit? cutty is "read-heavy". Iemand klikt op een verkorte link, wij doen een leesactie en verhogen de teller. Dat is alles. SQLite kan dit soort verkeer prima aan, tot aan echt grote aantallen per dag. En de backup? Je kopieert het bestand. Klaar. Zonder replicatie-ceremonies, zonder scripts waarvan niemand meer weet hoe ze werken.
Pas hier op, want dit is een veelvoorkomende valkuil: mensen horen "SQLite" en denken "een speeltje voor een schoolproject". Niets is minder waar. Minder bewegende delen betekent minder dingen die uit elkaar kunnen vallen. Dit is geen bezuinigen op kwaliteit, het is een bewuste keuze.
De server staat in Europa en dat is geen toeval
Dedicated server in de EU. Eigen TLS, reverse proxy met automatische HTTPS, applicatie in containers.
Dit is de fundering van hoe cutty met gegevens omgaat. Ik weet precies waar ze zich fysiek bevinden (bij EU-klanten en AVG is dit geen leuke extra, maar een vereiste), ik ben niet gebonden aan één leverancier, er lekt niets automatisch door naar de andere kant van de oceaan, en de rekening is voorspelbaar in plaats van mee te springen met de fluctuaties.
Ja, handige platforms uit het Westen zouden een snellere start geven. Je klikt, deployt, en het werkt. Al betaal je daarvoor met de plek waar de gegevens van je gebruikers terechtkomen. Voor mij was dat een slechte deal.
Vertalingen maakt zijn eigen model, bij zichzelf
cutty spreekt 25 talen. Dit wordt vertaald door een lokaal, open-source AI-model dat draait op mijn infrastructuur. Ik stuur de tekst van de interface niet naar enige externe provider.
De voordelen zijn praktisch. Een enkele vertaling kost niets. Ik heb volledige controle over de kwaliteit en kan ze op elk gewenst moment verversen. En een machine heeft altijd een menselijk oog nodig, dus elk van deze 25 talen is gecontroleerd. Maar het feit dat ik dit bij mezelf doe, betekent dat privacy geen post op de prijslijst is. Het is een eigenschap van hoe het geheel is opgebouwd.
Tailwind, containers en enkele kleinere beslissingen
Style? Utility-first, oftewel Tailwind. Geen CSS-in-JS, geen aparte stylesheet-bestanden, alles direct in de templates. Ik verspil geen tijd aan het bedenken van klassenaammen; ongebruikte stijlen komen toch niet op de uiteindelijke pagina terecht, en het design klopt omdat het systeem dit zelf afdwingt. Voor één persoon telt elke minuut die niet wordt verspild aan onzin.
De implementatie is Docker. Dezelfde omgeving lokaal en in productie, einde aan "bij mij werkte het". En mocht het ooit nodig zijn, ik verplaats alles naar een andere server in ongeveer een half uur. Draagbaarheid is een stille vorm van onafhankelijkheid.
Wat ik hiervan heb geleerd
Een saaie stack wint. Astro, SQLite, Tailwind, containers. Alles is volwassen, bewezen en gedocumenteerd. Niets breekt op het moment dat je het het minst kunt gebruiken.
Hosting in de EU is echt klaar voor productie. Het sprookje dat je "naar de grote Amerikaanse cloud moet gaan om serieus genomen te worden", is een sprookje. Lokale AI is ook reëel; je hoeft data niet aan een externe API af te staan om fatsoenlijke vertalingen te krijgen. En het laatste punt: één persoon kan iets uitbrengen dat eruitziet als het werk van een heel team. Je moet alleen onthouden dat tijd duurder is dan geld, en dat je in die zin elke bouwsteen moet selecteren.
Als je iets van jezelf bouwt, stel jezelf dan bij elke technologie één vraag: zal ik over een jaar in staat zijn om dit zelfstandig te onderhouden? Zo niet, dan heb je waarschijnlijk het antwoord.
Alles werkt hier: cutty.dev. En als je over een van deze beslissingen wilt praten, schrijf dan naar [email protected], ik reageer dezelfde dag nog.