Tehnološki stack cutty.dev — svesni izbori
Šta je ispod cutty.dev i zašto. Bez evangelizma — filozofija: dosadan, stabilan stack, hosting u EU i privatnost upisana u arhitekturu koju jedna osoba može da održava.
Većina objava "moj tech stack" su ponosne liste noviteta. Vidi, imam ovo, imam ono, a evo i potpuno sveže biblioteke od prošle nedelje. Ovaj će biti drugačiji.
Jer istina je da kada sam vodiš projekat, ne tražiš najmodernije. Tražiš nešto što te neće probuditi u tri ujutru. I upravo o tome je ceo taj tehnološki stack cutty.dev: dosadno umesto moderno, evropsko umesto američkog, privatno od samih temelja, i dovoljno jednostavno da to može da obradi jedna par ruku.
Idem redom, kao da ti to objašnjavam uz kafu.
Astro renderiranje na serveru (i zašto ne nešto "zanimljivije")
cutty.dev je Astro sa server-side renderingom. Svaki zahtev ide preko servera, sastavlja stranicu i vraća gotov HTML. Dosadno? Upravo o tome je reč.
Želeo sam tri stvari: rendering na serveru bez teške mašinerije, kvalitetnu podršku za više jezika odmah, i brzinu bez dodatnog opterećenja. Astro pruža sve to, a kod ostaje čitljiv. Kada se mu vratim nakon dva meseca pauze, znam šta se tamo dešava. Kod solo projekta, ovo vredi više od bilo kog modernog dodatka koji niko ne podržava nakon godinu dana.
Jedna datoteka umesto baze sa vatrometom
SQLite. Jedna baza, jedna datoteka na disku. Uz to sloj upita koji komunicira sa TypeScript-om, tako da ako promenim strukturu podataka, greška mi se pojavljuje u editoru, a ne na produkciji u ponoć.
Zašto baš to? cutty je "read-heavy". Neko klikne skraćeni link, mi uradimo čitanje i povećamo brojač. To je sve. SQLite može da izdrži takav saobraćaj bez problema, do zaista velikih dnevnih brojeva. A backup? Kopiraš fajl. Kraj. Bez ceremonija replikacije, bez skripti koje niko ne seća kako rade.
Ovde budi oprez sa jednom stvari, jer je to česta zamka: ljudi čuju "SQLite" i pomisle "igračka za projekat na fakultetu". Nije tačno. Manje pokretnih delova znači manje stvari koje mogu da se pokvare. Ovo nije ušteda na kvalitetu, već svesna odluka.
Server se nalazi u Evropi i to nije slučajnost
Namenski server u EU. Sopstveni TLS, reverse proxy sa automatskim HTTPS-om, aplikacija u kontejnerima.
Ovo je temelj načina na koji cutty upravlja podacima. Tačno znam gde se oni fizički nalaze (kod klijenata iz EU i GDPR-a to nije zanimljivost, već uslov), nisam vezan za jednog dobavljača, ništa ne odlazi automatski preko okeana, a račun je predvidiv umesto da skače zajedno sa prometom.
Da, praktične platforme sa Zapada bi omogućile brži početak. Klikneš, deploy, radi. Samo što za to plaćaš mestom gde se nalaze podaci tvojih korisnika. Za mene je to bio loš dogovor.
Prevođenje: pravi sopstveni model, kod sebe
cutty govori na 25 jezika. To prevodi lokalni, otvoreni AI model koji radi na mojoj infrastrukturi. Ne šaljem tekst iz interfejsa nijednom spoljnom provajderu.
Prednosti su praktične. Jedinstveni prevod košta nula. Imam punu kontrolu nad kvalitetom i mogu ga osvežiti kada god želim. I mašina uvek zahteva ljudsko oko, tako da je svaki od ovih 25 jezika prošao reviziju. Ali činjenica da to radim kod sebe znači da privatnost nije stavka na cenovniku. To je svojstvo načina na koji je celina izgrađena.
Tailwind, kontejneri i nekoliko manjih odluka
Stil? Utility-first, odnosno Tailwind. Bez CSS-in-JS, bez posebnih fajlova sa stilovima, sve direktno u šablonima. Ne gubim vreme na smišljanje naziva klasa, neiskorišćeni stilovi svakako ne završavaju na finalnoj stranici, a dizajn je koherentan jer sam sistem to nameće. Za jednu osobu je bitan svaki minut koji nije protraćen na sitnice.
Implementacija je Docker. Isto okruženje lokalno i na produkciji, kraj sa "kod mene je radilo". I kada bi ikada bilo potrebno, prebacim sve na drugi server za nekih pola sata. Prenosivost je tiha forma nezavisnosti.
Šta sam iz toga izvukao
Dosadan stack pobeđuje. Astro, SQLite, Tailwind, kontejneri. Sve je zrelo, provereno, opisano. Ništa ne puca u trenutku kada vam je najmanje potrebno.
Hosting u EU je spreman za produkciju, zaista. Priča da "moraš ići na veliku američku cloud platformu da bi bilo ozbiljno", je samo priča. Lokalni AI je takođe realan, ne mora se predavati podatak eksternom API-ju da bi se dobili pristojni prevodi. I poslednja stvar: jedna osoba može da izbaci nešto što izgleda kao rad celog tima. Samo treba imati na umu da je vreme skuplje od novca, i da u tu svrhu birate svaki element.
Kada gradiš nešto svoje, postavi sebi jedno pitanje kod svake tehnologije: da li ću za godinu dana moći samostalno to da održavam? Ako ne, onda verovatno već imaš odgovor.
Sve ovo radi ovde: cutty.dev. A ako želiš da razgovaraš o nekoj od ovih odluka, piši na [email protected], odgovaram istog dana.