Тернистий шлях створення блогу мій досвід, фейли і плани

22 липня 2025

Книга є хорошою, коли змушує задуматися. Стаття — коли спонукає до дії.

Це перше пафосне речення, яке спало мені на думку при написанні цієї статті. Тут я розповім, чому взагалі почав писати блог, звідки ідея створення власного ком'юніті, з якими траблами зіштовхнувся під час розробки самописного сайту на Next.js, який в мене roadmap, ну і взагалі висновки.

Навіщо я виршів створити свій блог

На початку літа згадав уривок з книги The Pragmatic Programmer:

"Learn at least one new language every year"

Моя спеціалізація — це JavaScript екосистема, але я вирішив попробувати щось нове. Хотів мову з світу системного програмування. Мова на які можна писати драйвери, ОС, швидкий софт тощо.

Думав між C++ і Rust. З одного боку — C++ бетон у світі IT, з іншого — Rust Позиціонується як сучасна та безпечншіа альтернатива але з маленькою екосистемою. Не довго думаючи, я обрав Rust — гіпстерську, модну, нову.

Почав читати офіційну книгу The Rust Programming Language і паралельно зацікавився Matrix протоколом. Але наткнувся на проблему — офіційна реалізація серверу Synapse написана на Python, а це:

Існують ще кілька альтернативних реалізацій серверів для Matrix, написаних іншими мовами різними командами. Але мене не покидала думка зробити власну реалізацію — умовно кажучи, форк протоколу. Хотілося інтегрувати Tor, реалізувати фічі, схожі на Telegram, і при цьому зберегти фокус на приватність і автономність.

Паралельно з технічними думками прийшла ідея — ділитися всім цим досвідом публічно. Документувати не лише розробку проєкту, а й загальні технічні інсайти. І, можливо, з часом зібрати навколо себе спільноту, з якою можна буде реалізовувати цікаві ідеї — як open source, так і комерційні.

Ще раніше в мене вже був накинутий фундамент персонального сайту 2.0, тож ці роздуми дали поштовх продовжити його розробку та додати блог.

Разом з блогом на персональному сайті поча ввести твітер та планую дублювати статті на платформах такі як meddium можливо ще на linkedin.

Чому не Medium одразу? Бо хотів набити руку на Next.js і мати повну свободу на власному домені.

Трабли розробки самописного рішення

Використовував фулстек-фреймворк Next.js. Для мультимовності — next-intl, для авторизації — next-auth. Логін потрібен тільки для адмінки. Як ORM обрав Drizzle.

Найцікавіше почалось при зборці:

const token = await getToken({ req, secureCookie: true, secret: process.env.NEXTAUTH_SECRET })

Хотів зробити ISG (Incremental Static Generation) для статей — але щось пішло не так, зараз працює SSR.

Tiptap і код

Налаштування Tiptap-редактора. Хотів красиве підсвічування синтаксису з code block lowlight. Але в HTML не було тегів для кольорів символів, тому вирішив рендирити статтю з тегом Editor з атрибутом editable: false. Проблема в тому що редактор вимагає DOM, а мені треба готовий HTML для кращого SEO. Тому поки показую код без підсвічування, генеруючи HTML на бекенді.

colored_code

Деплой і несподіваний досвід

Деплой розтягнувся аж на 3 дня. Свої проекти зазвичай хощу на свому домашньому сервері. Одного ранку підходжу, торкаюсь сходів ногою, рукою до корпусу — і мене б’є током. Такого досвіду адміністрування серверу я не очікував)

photo_2025-07-22_21-20-07

Зараз фото трохи завеликі і на максимальні ширіні контейнера виглядають дивно, ближчим часом пофікшу)

Overengineering на старті

Спочатку хотів одразу реалізувати:

...але зупинив себе. Почав із мінімального. Хоча поки писав цю статтю — згадав, що досі не додав кнопку для видалення статті в адмінці)

Roadmap

Перше, що зроблю — можливість видаляти статті. Далі:

Таски пофіксити розмір фото та нумерацію появилися тільки що при редагуванні статі)

Висновок

Робити свій самописний блог, коли є багато готових рішень?

Залежить від твого часу та цілей. Якщо хочеш набити руку на технології — так. Але готуйся: бавитися прийдеться багато)

Вихідний код лежить на Github, але поки що без документації в README.md лежить тільки h1

Якщо цікаво слідкувати за розвитком, приєднуйся до мого Telegram-каналу або Twitter/X. Буду радий зворотному зв’язку.