Записи 41–46. Рождение веб-портала: Astro, Starlight и витрина реального софта
⏱️ Время: 22 — 23 сентября 2026Любой серьезный продукт нуждается в удобном доме в интернете. Мы отказались от тяжелых конструкторов сайтов и шаблонов на WordPress:
- Архитектура Astro + Starlight: Молниеносная генерация статических страниц (сборка более 30 страниц за 8 секунд), 100/100 в Google Lighthouse.
- Честное сравнение с Termius: Интерактивная таблица сравнения без маркетингового тумана — честно показываем, где у нас открытый исходный код и локальный сейф, а где другие берут подписку за базовые фичи.
- Реальные скриншоты интерфейса: Отказались от синтетических 3D-рендеров. На сайте смонтированы 9 аутентичных снимков экрана Shellit (Obsidian Dark, диалог прав SFTP, сплиты 2x2, окно ключей Keychain).
- Двуязычная документация: Полноценная база знаний на русском и английском с моментальным поиском на клиенте через Pagefind.
Записи 50–52. Командный центр администратора и защита голосования от накруток
⏱️ Время: 24 сентября 2026, 12:00 — 15:00 (~180 минут)Для управления порталом и сбора обратной связи развернут легковесный бэкенд на PocketBase:
- Приватный киберпанк-дашборд
/adminс графиками Chart.js: приватная аналитика визитов, статистика скачиваний установщиков и входящие баг-репорты. - Инцидент с накруткой дорожной карты (BUG-033): Пользователи могли голосовать за фичи в роадмапе. Но открытый API позволял через прямой
PATCHнакручивать счетчики кликов скриптами! - Эшелонированная защита: Полностью закрыли прямой PATCH для неавторизованных пользователей на уровне правил коллекций PocketBase. Написали серверный хук
pb_hooks/vote.pb.js: голос принимается только через защищенный POST с проверкой связкиVoter Token + Salted IP Hash. Попытки повторного голосования или сброса токена через инкогнито мгновенно отсекаются с кодом409 Conflict.
Запись 39. Выход в интернет: боевой домен shellit.top и Cloudflare Tunnel
⏱️ Время: 24 сентября 2026, 15:15 — 16:10 (~55 минут)Финальный аккорд веб-эпопеи — выкат сайта на боевой сервер Senko и привязка официального домена shellit.top.
И тут нас встретили жесткие ограничения хоста:
- Порты 80 и 443 оказались заняты системной службой HAProxy под управлением стороннего шлюза. Менять конфиги HAProxy вручную было нельзя — система перезаписывает их при обновлениях.
- Порт 8090 уже слушал контейнер другого проекта.
Мы не стали ломать существующую инфраструктуру сервера и развернули Cloudflare Tunnel (cloudflared) в Docker:
- Исходящий зашифрованный HTTP/2 туннель к Cloudflare Edge без открытия внешних портов на сервере.
- Автоматический SSL-сертификат, защита от DDoS и скорость доставки контента через глобальную сеть CDN.
- Принцип Same-Origin: единый домен
shellit.topотдает статический сайт Astro, проксирует вызовы к/api/в PocketBase и держит административный центр/admin/без единой проблемы с CORS.