Технологічний стек cutty.dev — свідомий вибір
Що лежить в основі cutty.dev і чому. Без євангелізму — філософія: нудний, стабільний стек, хостинг в ЄС і приватність, закладена в архітектуру, яку одна людина здатна підтримувати.
Більшість записів "мій tech stack" — це горда черга новинок. Дивись, у мене є це, у мене є те, а ось ще зовсім свіжа бібліотека з минулого тижня. Цей буде іншим.
Бо правда полягає в тому, що коли ти ведеш проєкт самостійно, ти не шукаєш наймоднішого. Ти шукаєш те, що не розбудить тебе о третій ночі. І саме про це весь цей технологічний стек cutty.dev: нудний замість модного, європейський замість американського, приватний від самих основ, і настільки простий, щоб із ним могла впоратися одна пара рук.
Я йду по черзі, ніби пояснюю тобі це за чашкою кави.
Astro рендериться на сервері (і чому не щось "крутіше")
cutty.dev — це Astro із рендерингом на стороні сервера. Кожен запит проходить через сервер, збирає сторінку та повертає готовий HTML. Нудно? Саме в цьому і полягає суть.
Я хотів три речі: рендеринг на сервері без важкої механізації, належну підтримку багатьох мов відразу, і швидкість без накладних витрат. Astro дає все це, а код залишається читабельним. Коли я повертаюся до нього після двомісячної перерви, я знаю, що там відбувається. При сольному проекті це вартує більше, ніж будь-який модний додаток, який через рік вже ніхто не підтримує.
Один файл замість бази з феєрверками
SQLite. Одна база, один файл на диску. До цього шар запитів, що спілкується з TypeScript, тому якщо я зміню структуру даних, помилка вискакує мені в редакторі, а не на продакшені опівночі.
Чому саме це? cutty є "read-heavy". Хтось клікає на скорочене посилання, ми робимо читання і збільшуємо лічильник. Тільки й усього. SQLite спокійно витримує такий трафік, до справді великих цифр щодня. А бекап? Копіюєш файл. Кінець. Без церемоній реплікації, без скриптів, про роботу яких ніхто не пам'ятає.
Тут будь обережним з одним, бо це часта пастка: люди чують "SQLite" і думають "іграшка для проєкту на залік". Неправда. Менше рухомих частин — це менше речей, які можуть розсипатися. Це не економія на якості, це свідоме рішення.
Сервер знаходиться в Європі, і це не випадковість
Виділений сервер в ЄС. Власний TLS, reverse proxy з автоматичним HTTPS, додаток у контейнерах.
Це фундамент того, як cutty поводиться з даними. Я точно знаю, де вони фізично знаходяться (для клієнтів з ЄС та GDPR це не цікавинка, а умова), я не прив'язаний до одного постачальника, нічого не витікає автоматично за океан, а рахунок є передбачуваним замість того, щоб стрибати разом із трафіком.
Так, зручні платформи із Заходу дали б швидший старт. Клікаєш, deploy, працює. Тільки що ти платиш за це тим, де опиняються дані твоїх користувачів. Для мене це була погана угода.
Переклади робить власна модель, у себе
cutty розмовляє 25 мовами. Це перекладає локальна відкрита модель AI, яка працює на моїй інфраструктурі. Я не надсилаю текст з інтерфейсу жодному зовнішньому постачальнику.
Переваги є практичними. Поодиноке переклад коштує нуль. Я маю повний контроль над якістю і можу оновити його, коли захочу. І машина завжди потребує людського ока, тому кожна з цих 25 мов пройшла перевірку. Але той факт, що я роблю це у себе, означає, що приватність не є позицією в прайс-листі. Це властивість того, як усе побудовано.
Tailwind, контейнери та кілька менших рішень
Стиль? Utility-first, тобто Tailwind. Без CSS-in-JS, без окремих файлів зі стилями, все прямо в шаблонах. Я не витрачаю час на вигадування назв класів, невикористані стилі і так не потрапляють на фінальну сторінку, а дизайн тримається купи, бо сама система це змушує. Для однієї людини важлива кожна хвилина, не витрачена на дрібниці.
Впровадження — це Docker. Те саме середовище локально та на продакшені, кінець з "у мене працювало". І якщо колись знадобиться, я переношу все на інший сервер десь за пів години. Портативність — це тиха форма незалежності.
Що я з цього виніс
Нудний стек перемагає. Astro, SQLite, Tailwind, контейнери. Все зріле, обкатане, описане. Ніщо не ламається в той момент, коли це найменше потрібно.
Хостинг в ЄС готовий до продакшену, справді. Казка про те, що "мусиш піти у велику американську хмару, щоб усе було серйозно" — це казка. Локальний AI також є реальним, не потрібно віддавати дані зовнішньому API, щоб мати пристойні переклади. І останнє: одна людина може випустити щось, що виглядає як робота цілої команди. Потрібно лише пам'ятати, що час дорожчий за гроші, і з цього погляду підбирати кожен елемент.
Коли ви будуєте щось своє, ставте собі одне питання щодо кожної технології: чи зможу я через рік підтримувати це самостійно? Якщо ні, то, мабуть, ви вже маєте відповідь.
Все це працює тут: cutty.dev. А якщо хочеш поговорити про якесь із цих рішень, пиши на [email protected], відповідаю того ж дня.