Накодил, часть 1: каркас за вечер и две мины по дороге
Домен куплен, концепция написана, пора собирать. Задача на вечер: каркас, который можно посмотреть в браузере, — три рубрики, тёмная тема, поиск, RSS.
Версии проверяем, а не вспоминаем
Первое, что я сделал, — полез в npm за актуальными версиями. И правильно: по памяти у меня был Astro 5, а на деле уже 7.1.4. Полтора мажора разницы — это другой API коллекций и другой способ подключать Tailwind.
Отсюда правило, которое стоит дороже, чем кажется: версии стека выясняются в момент старта, а не по памяти. Память отстаёт на релиз-другой, и это всплывает на третьем часу отладки, а не на первом.
Записал прямо в CLAUDE.md проекта:
astro 7.1.4 · @astrojs/mdx 7.0.4 · @tailwindcss/vite 4.3.3 · pagefind 1.5.2
требования: node >=22.12.0
Мина первая: Node не тот
Astro 7 требует Node >=22.12.0. В PATH — 20.20.2. Портативный Node 22 в дереве
нашёлся, но оказался распакован без node_modules: npm падал с MODULE_NOT_FOUND.
Разобрал отдельно — в граблях.
Полчаса на ровном месте. Зато теперь это записано, и в следующий раз узнается за минуту.
Мина вторая: TypeScript 7 ещё рано
Чуть не поставил typescript@latest. Вовремя заглянул в peer-зависимости:
@astrojs/check → typescript: ^5.0.0 || ^6.0.0
А latest — уже 7.0.2. Поставил бы не глядя — получил бы сломанный astro check
и полное непонимание, при чём тут вообще TypeScript. Взял 6.0.3.
Мораль та же, что и с Node: latest — это не «стабильно», это «свежее». Для
инструмента, который проверяет типы всего проекта, разница принципиальная.
Что собралось
Три рубрики на одном динамическом роуте, вместо шести почти одинаковых файлов. Тёмная тема без переключателя — аудитория и так сидит в тёмном редакторе. Поиск на Pagefind: индекс собирается после билда, бэкенда нет, запросы никуда не уходят.
llms.txt генерируется из контента, а не пишется руками — иначе он разъедется
с реальностью на третьем материале.
Дальше
Инфраструктура: VM, DNS, Caddy, автодеплой из GitHub Actions. Про это будет часть 2 — включая то, что там наверняка сломается.