Stack tecnologico di cutty.dev — scelte consapevoli
Cosa c'è sotto cutty.dev e perché. Senza evangelismo — la filosofia: uno stack noioso e stabile, hosting nell'UE e privacy integrata nell'architettura, che una singola persona è in grado di gestire.
La maggior parte dei post "il mio tech stack" sono una lista orgogliosa di novità. Guarda, ho questo, ho quello, e qui c'è anche una libreria freschissima della scorsa settimana. Questo sarà diverso.
Perché la verità è che quando gestisci un progetto da solo, non cerchi la cosa più alla moda. Cerchi qualcosa che non ti faccia svegliare alle tre di notte. Ed è proprio questo il senso di tutto questo stack tecnologico cutty.dev: noioso invece che alla moda, europeo invece che americano, privato fin dalle fondamenta, e abbastanza semplice da poter essere gestito da una sola coppia di mani.
Vado in ordine, come se te lo stessi spiegando davanti a un caffè.
Astro renderizzato sul server (e perché non qualcosa di "più figo")
cutty.dev è un'istanza di Astro con rendering lato server. Ogni richiesta passa attraverso il server, compone la pagina e restituisce l'HTML pronto. Noioso? Esattamente, è proprio questo lo scopo.
Volevo tre cose: rendering sul server senza macchinari pesanti, un supporto multilingue adeguato e immediato, e velocità senza overhead. Astro offre tutto questo, e il codice rimane leggibile. Quando ci torno dopo due mesi di pausa, so esattamente cosa sta succedendo. Per un progetto in solitaria, questo vale più di qualsiasi plugin alla moda che dopo un anno non è più supportato da nessuno.
Un solo file invece di un database con fuochi d'artificio
SQLite. Un unico database, un unico file sul disco. A questo si aggiunge uno strato di query che comunica con TypeScript, quindi se cambio la struttura dei dati, l'errore mi appare nell'editor e non in produzione a mezzanotte.
Perché proprio questo? cutty è "read-heavy". Qualcuno clicca un link abbreviato, noi eseguiamo una lettura e incrementiamo il contatore. Tutto qui. SQLite gestisce questo traffico tranquillamente, fino a numeri giornalieri davvero elevati. E il backup? Copi il file. Fine. Senza cerimonie di replica, senza script di cui nessuno ricorda come funzionino.
Fai attenzione a una cosa, perché è una trappola comune: la gente sente "SQLite" e pensa "un giocattolo per un progetto universitario". Non è così. Meno parti mobili significano meno cose che possono rompersi. Non si tratta di risparmiare sulla qualità, ma di una scelta consapevole.
Il server si trova in Europa e non è un caso
Server dedicato nell'UE. TLS proprio, reverse proxy con HTTPS automatico, applicazione in container.
Questo è il fondamento di come cutty gestisce i dati. So esattamente dove si trovano fisicamente (per i clienti UE e GDPR non è una curiosità, ma una condizione), non sono legato a un singolo fornitore, nulla fuoriesce automaticamente oltreoceano e il costo è prevedibile invece di fluttuare insieme al traffico.
Sì, le piattaforme comode dell'Occidente avrebbero dato un inizio più rapido. Clicchi, deploy, funziona. Solo che paghi per questo con il luogo in cui atterrano i dati dei tuoi utenti. Per me è stato un cattivo affare.
Traduzioni crea il tuo modello, da te
cutty parla 25 lingue. Questo viene tradotto da un modello AI locale e aperto, che gira sulla mia infrastruttura. Non invio il testo dall'interfaccia a nessun fornitore esterno.
I vantaggi sono pratici. Una singola traduzione costa zero. Ho il pieno controllo sulla qualità e posso aggiornarla quando voglio. E inoltre la macchina ha sempre bisogno dell'occhio umano, quindi ognuna di queste 25 lingue è stata revisionata. Ma il fatto che io lo faccia da me significa che la privacy non è una voce nel listino prezzi. È una proprietà del modo in cui l'intero sistema è costruito.
Tailwind, contenitori e alcune piccole decisioni
Stile? Utility-first, ovvero Tailwind. Senza CSS-in-JS, senza file di stile separati, tutto direttamente nei template. Non perdo tempo a inventare nomi di classi, gli stili non utilizzati non finiscono comunque nella pagina finale, e il design è coerente perché il sistema stesso lo impone. Per una singola persona, ogni minuto non sprecato in sciocchezze è fondamentale.
L'implementazione è Docker. Lo stesso ambiente in locale e in produzione, la fine del "sul mio computer funzionava". E se mai dovesse servire, sposto tutto su un altro server in circa mezz'ora. La portabilità è una forma silenziosa di indipendenza.
Cosa ne ho tratto
Lo stack noioso vince. Astro, SQLite, Tailwind, container. Tutto è maturo, testato, documentato. Nulla si rompe nel momento in cui ne hai meno bisogno.
L'hosting nell'UE è pronto per la produzione, davvero. La favola secondo cui "devi passare al grande cloud americano per fare sul serio" è solo una favola. Anche l'IA locale è reale, non è necessario cedere i dati a un'API esterna per avere traduzioni decenti. E l'ultima cosa: una singola persona può rilasciare qualcosa che sembra il lavoro di un intero team. Bisogna solo ricordare che il tempo è più costoso del denaro, e in questo senso scegliere ogni singolo tassello.
Quando costruisci qualcosa di tuo, poniti una sola domanda per ogni tecnologia: tra un anno sarò in grado di mantenerla da solo? Se la risposta è no, allora forse hai già la tua risposta.
Tutto questo funziona qui: cutty.dev. E se vuoi parlare di una di queste decisioni, scrivimi a [email protected], rispondo lo stesso giorno.