Новый этап развития проекта

Сайт перестал быть просто блогом. Теперь это лаборатория. И набор в неё официально открыт.

Я давно говорил, что строю не просто движок для постов, а платформу для экспериментов. И вот, кажется, фундамент готов. Я внедрил регистрацию, профили пользователей и заложил основу для будущего чата.

Технически всё работает. Теперь тут не просто «пользователи», а участники. Они не «логинятся», а получают допуск. У каждого есть своя страница /u/username, где видно, когда человек пришёл в проект, что он о себе написал и сколько у него «хитинов» (очков репутации). Никаких тебе email, только имя и пароль. Чтобы зайти в лабораторию, не надо сдавать паспорт.

Только вот самих людей пока нет. Механизм запущен, двери открыты, но внутри пока тихо. Жду первых смельчаков.

Капризный зверь по имени Turso

Вы знаете, что я недавно перевёл базу данных на Turso. И вот тут он показал свой характер. Turso ещё в бете, так что я ожидал сюрпризов.

И они не заставили себя ждать. При первой же попытке создать миграции он отказался принимать составные индексы и внешние ключи. Пришлось выкинуть их из SQL-файлов, а целостность данных теперь контролировать прямо в коде.

А при регистрации сервер вообще выдал ошибку 500. Оказалось, Turso не понимает команду RETURNING id и не умеет прибавлять дни к дате прямо в запросе. Пришлось переписывать логику на Rust. Теперь я вставляю запись, отдельно получаю её ID, а дату истечения сессии считает сам язык. Больше кода, зато работает.

Мелочи, которые бесят

Пока ковырял это всё, чуть не сломал сборку админки. В проекте собрались три разные версии библиотеки getrandom, и они наотрез отказались собираться под WebAssembly. Пришлось плясать с конфигами и включать нужные фичи.

Ещё Leptos, на котором работает фронтенд, не переваривает, когда в разметке есть тег <script>. Он просто ломает макрос. Пришлось выносить весь JavaScript для форм в отдельный файл.

И деплой. Мой скрипт deploy.sh постоянно забывал копировать на сервер папку с миграциями. Из-за этого база на проде не знала о новых таблицах, и сайт падал. Добавил копирование - проблема ушла.

56 мегабайт

А теперь самое приятное. Я переделал страницу «О проекте». Раньше там были скучные полоски, а теперь инфографика с нормальными SVG-кругами. Страница показывает состояние всего сервера (ядра, ОЗУ) и отдельно - сколько ресурсов жрёт сама лаборатория.

И вот результат. Процесс hitin потребляет всего 56 мегабайт оперативной памяти и 0.2% процессора. Это меньше, чем открытая вкладка с YouTube! Сервер с одним ядром справляется с запасом.

Правда, сбор данных о нагрузке пришлось вынести в фоновый таск. Если запрашивать их прямо во время загрузки страницы, сервер на секунду замирал. Теперь страница просто читает готовые цифры из памяти и открывается мгновенно.

Что дальше

Вот такой результат одного вечера работы. Функционал и логика социальной составляющей будет ещё дорабатываться и совершенствоваться, тут непаханое поле. Но фундамент залит. Механизмы работают. Двери открыты.

Дальше - комнаты для обсуждений. То есть чат. И вот там меня ждут новые шишки, победы и поражения.

Лаборатория готова принимать первых участников.