cutty.dev:s teknikstack — medvetna val
Vad finns under huven på cutty.dev och varför. Utan evangelism — filosofi: tråkig, stabil stack, hosting inom EU och integritet inbyggt i en arkitektur som en enda person kan underhålla.
De flesta inlägg om "min tech stack" är en stolt lista över nyheter. Titta, jag har detta, jag har detta, och här är ännu ett helt nytt bibliotek från förra veckan. Detta kommer att vara annorlunda.
För sanningen är att när du driver ett projekt själv, så letar du inte efter det mest trendiga. Du letar efter något som inte väcker dig klockan tre på natten. Och det är precis det hela den här tekniska stacken från cutty.dev handlar om: tråkigt istället för trendigt, europeiskt istället för amerikanskt, privat från grunden, och tillräckligt enkelt för att kunna hanteras av ett par händer.
Jag går igenom det steg för steg, som om jag förklarade det för dig över en kopp kaffe.
Astro serverrenderad (och varför inte något "roligare")
cutty.dev är Astro med server-side rendering. Varje förfrågan går genom servern, renderar sidan och skickar tillbaka färdig HTML. Tråkigt? Det är precis det som är poängen.
Jag ville ha tre saker: rendering på servern utan tung mekanik, ordentligt stöd för flera språk direkt ur lådan, och snabbhet utan overhead. Astro ger allt detta, och koden förblir läsbar. När jag återvänder till det efter ett två månaders uppehåll, så vet jag vad som händer där. Vid ett soloprojekt är detta värt mer än något trendigt tillägg som ingen längre stöder efter ett år.
En fil istället för en databas med fyrverkerier
SQLite. En databas, en fil på disken. Dessutom ett frågelager som pratar med TypeScript, så om jag ändrar datastrukturen dyker felet upp i min editor istället för i produktion vid midnatt.
Varför just detta? cutty är "read-heavy". Någon klickar på en förkortad länk, vi gör en läsning och uppdaterar räknaren. Det är allt. SQLite hanterar sådan trafik utan problem, även vid riktigt stora dagliga siffror. Och backup? Du kopierar filen. Klart. Utan replikeringsceremonier, utan skript som ingen kommer ihåg hur de fungerar.
Här ska du vara vaksam på en sak, för det är en vanlig fälla: folk hör "SQLite" och tänker "en leksak för ett skolprojekt". Det stämmer inte. Färre rörliga delar innebär färre saker som kan gå sönder. Det handlar inte om att spara på kvalitet, utan om ett medvetet beslut.
Servern står i Europa och det är ingen slump
Dedikerad server i EU. Egen TLS, reverse proxy med automatisk HTTPS, applikation i containrar.
Detta är grunden för hur cutty hanterar data. Jag vet exakt var de fysiskt befinner sig (för kunder inom EU och GDPR är detta ingen kuriositet, utan ett krav), jag är inte bunden till en enda leverantör, ingenting läcker automatiskt över havet, och kostnaden är förutsägbar istället för att hoppa i takt med trafiken.
Ja, bekväma plattformar från väst skulle ha gett en snabbare start. Du klickar, deploy, det fungerar. Bara att du betalar för det med var dina användares data hamnar. För mig var det en dålig deal.
Översättningar gör sin egen modell, hos sig själv
cutty talar 25 språk. Det översätts av en lokal, öppen AI-modell som körs på min infrastruktur. Jag skickar inte text från gränssnittet till någon extern leverantör.
Fördelarna är praktiska. En enskild översättning kostar noll. Jag har full kontroll över kvaliteten och kan uppdatera dem när jag vill. Och maskinen behöver alltid ett mänskligt öga, så vart och ett av dessa 25 språk har granskats. Men det faktum att jag gör detta själv innebär att integritet inte är en post i prislistan. Det är en egenskap hos hur helheten är uppbyggd.
Tailwind, containrar och några mindre beslut
Style? Utility-first, det vill säga Tailwind. Utan CSS-in-JS, utan separata stilfiler, allt direkt i mallarna. Jag slösar inte tid på att hitta på klassnamn, oanvända stilar hamnar ändå inte på den slutgiltiga sidan, och designen håller ihop eftersom systemet självt tvingar fram det. För en person räknas varje minut som inte slösas bort på småsaker.
Implementeringen är Docker. Samma miljö lokalt och i produktion, slutet på "det fungerade hos mig". Och om det någonsin skulle behövas, flyttar jag allt till en annan server på ungefär en halvtimme. Portabilitet är en tyst form av oberoende.
Vad jag lärde mig av detta
Tråkig stack vinner. Astro, SQLite, Tailwind, containrar. Allt är moget, beprövat, dokumenterat. Ingenting går sönder när du minst behöver det.
Hosting i EU är redo för produktion, på riktigt. Det är en saga att "du måste använda den stora amerikanska molnet för att det ska vara seriöst", det är en saga. Lokal AI är också verklig, man behöver inte lämna över data till ett externt API för att få bra översättningar. Och den sista saken: en person kan släppa något som ser ut som arbetet av ett helt team. Man måste bara komma ihåg att tid är dyrare än pengar, och välja varje byggsten utifrån det perspektivet.
När du bygger något eget, ställ dig en fråga vid varje teknik: kommer jag att kunna underhålla det själv om ett år? Om inte, så har du förmodligen svaret.
Allt fungerar här: cutty.dev. Och om du vill prata om något av dessa beslut, skriv till [email protected], jag svarar samma dag.