Технологичен стек на cutty.dev — съзнателни избори
Какво стои под капака на cutty.dev и защо. Без евангелизъм — философия: скучен, стабилен стек, хостинг в ЕС и поверителност, вградена в архитектурата, която един човек е в състояние да поддържа.
Повечето публикации „моят tech stack“ са горделив списък с нововмествания. Виж, имам това, имам онова, а тук е още една съвсем нова библиотека от миналата седмица. Този ще бъде различен.
Истината е, че когато управляваш проект сам, не търсиш най-модното. Търсиш нещо, което няма да те събуди в три през нощта. И точно за това е целият този технологичен стек на cutty.dev: скучно вместо модно, европейско вместо американско, частно още от основите и достатъчно просто, за да може една двойка ръце да го овладее.
Обяснявам нещата последователно, сякаш ти ги превеждам при кафе.
Astro рендерирано на сървъра (и защо не нещо „по-интересно“)
cutty.dev е Astro с рендериране от страна на сървъра. Всяка заявка минава през сървъра, генерира страницата и връща готов HTML. Скучно? Точно това е целта.
Исках три неща: рендериране на сървъра без тежка инфраструктура, солидна поддръжка на много езици веднага и скорост без излишни разходи. Astro дава всичко това, а кодът остава четим. Когато се връщам към него след две месеца почивка, знам точно какво се случва там. При соло проект това струва повече от всеки моден добавка, който след една година вече никой не поддържа.
Един файл вместо база с фойерверки
SQLite. Една база данни, един файл на диска. Към това добавяме слой от заявки, който комуникира с TypeScript, така че когато променя структурата на данните, грешката се появява в редактора ми, а не на продукция в полунощ.
Защо точно това? cutty е "read-heavy". Някой клика върху съкратен линк, ние правим четене и увеличаваме брояча. Това е всичко. SQLite се справя с такъв трафик спокойно, дори при наистина големи дневни числа. А бекъпът? Копираш файла. Край. Без церемонии по репликация, без скриптове, чието действие никой не помни.
Тук внимавай за едно нещо, защото това е често срещана капан: хората чуват "SQLite" и си мислят "играчка за проект за изпит". Не е вярно. По-малко движещи се части означава по-малко неща, които могат да се разпаднат. Това не е пестене на качество, това е съзнателно решение.
Сървърът се намира в Европа и това не е случайност
Dedicated server in EU. Own TLS, reverse proxy with automatic HTTPS, application in containers.
Това е основата на това как cutty се справя с данните. Знам точно къде физически се намират те (при клиенти от ЕС и GDPR това не е любопитство, а условие), не съм привързан към един доставчик, нищо не изтича автоматично зад океана, а разходите са предвидими, вместо да скачат заедно с трафика.
Да, удобните платформи от Запада биха дали по-бърз старт. Кликваш, deploy, работи. Само че плащаш за това с това, къде попадат данните на твоите потребители. За мен това беше лоша сделка.
Преводите прави свой собствен модел, при себе си
cutty говори на 25 езика. Това се превежда от локален, отворен AI модел, който работи на моята инфраструктура. Не изпращам текст от интерфейса към никакъв външен доставчик.
Ползите са практични. Единичното превод струва нула. Имам пълен контрол върху качеството и мога да го обновя, когато пожелая. И машината винаги се нуждае от човешко око, така че всеки от тези 25 езика е преминал през проверка. Но фактът, че го правя при себе си, означава, че поверителността не е позиция в ценоразпис. Тя е свойство на това как е изграено цялото.
Tailwind, контейнери и няколко по-малки решения
Стил? Utility-first, т.е. Tailwind. Без CSS-in-JS, без отделни файлове със стилове, всичко директно в шаблоните. Не губя време в измисляне на имена на класове, неизползваните стилове така или иначе не попадат на финалната страница, а дизайнът е подреден, защото самата система го налага. За един човек всяка минута, не изгубена за дреболии, е ценна.
Внедряването е Docker. Същата среда локално и на продукция, край с "при мен работише". И ако някога се наложи, пренасям всичко на друг сървър за около половин час. Преносимостта е тиха форма на независимост.
Какво научих от това
Скучният стек печели. Astro, SQLite, Tailwind, контейнери. Всичко е зряло, проверено, описано. Нищо не се чупи в момента, в който най-малкото се нуждаеш от това.
Хостингът в ЕС е готов за продукция, наистина. Приказка е, че „трябва да преминеш към голямото американско облачно пространство, за да бъдеш сериозен“. Локалният AI също е реален, не е необходимо да предавате данни на външно API, за да имате прилични преводи. И последната неща: един човек може да пусне нещо, което изглежда като работа на цял екип. Трябва само да се помни, че времето е по-скъпо от парите, и през тази призма да се подбира всеки елемент.
Когато изграждате нещо свое, задайте си едно въпрос при всяка технология: след една година ще мога ли сам да го поддържам? Ако не, вероятно вече имате отговора.
Всичко това работи тук: cutty.dev. А ако искаш да поговорим за някое от тези решения, пишеш на [email protected], отговарям още същия ден.