Morethan-Log для Astro
Однажды я наткнулся на приятный шаблон персонального блога - morethan-log на Next.js с привязкой к Notion. Дизайн зашел моментально, а вот идея жить в чужом workspace вообще не улыбалась. Так что собрал свой порт на Astro, привёл всё к TypeScript, добавил мелкие удобства для себя и теперь делюсь им как Morethan-Log для Astro.
Что за шаблон
- Сразу два языка (английский и русский) и понятная настройка новых через
src/config/locales.ts. - Поиск, тёмная тема, RSS для каждого языка, плюс фронтматтер с типами, чтобы не забыть описание или дату.
- Вся структура сайта живёт в
src/config/site.ts: навигация, категории, разделы контактов, переключатели фич и форматы дат. - Можно писать обычный Markdown и подключать MDX с React islands только там, где хочется интерактива.
- Уже лежат плейсхолдеры для картинок, Open Graph теги и остальные SEO мелочи, так что страница красиво выглядит даже без своих обложек.
Как стартануть
npm create astro@latest -- --template JustSereja/morethan-log-astro
cd your-blog
npm run dev
Локальный сервер ждёт на http://localhost:4321. Правите файлы в src/ и сразу видите изменения. Если удобнее начать с GitHub template, жмите кнопку на репозитории, клонируйте свой форк, дальше npm install и npm run dev.
Настраиваем под себя
src/config/site.tsдержит название, описания, автора, меню, категории, контакты, фичи и форматы дат для каждого языка.src/config/locales.tsотвечает за набор языков: код, локаль, подпись и дефолт. Так Astro правильно строит ссылки и hreflang.- Для каждого языка можно сделать свои ссылки и даже разные имена автора. Поддерживаются эмодзи и свои SVG иконки.
- Стили лежат в
public/css/style.css. Меняете переменные и получаете нужную палитру. Светлая и тёмная темы уже готовы.
Контент и посты
Все посты лежат в src/content/posts/<lang>/<category>/. Чтобы шаблон связал переводы, файлы для разных языков держим с одинаковым именем.
---
title: 'Новый проект'
h1: 'Новый проект'
description: 'Короткий тизер для карточек'
date: '2025-07-30'
announcement: 'Необязательный текст для списков'
image: '/img/posts/your-cover.jpg'
aiGenerated: false
draft: false
---
permalink почти всегда можно оставить пустым. Папка уже задаёт язык и категорию. Страницы в src/content/pages работают по той же логике.
Пара бонусов
- RSS генерируется для каждого языка:
/rss.xmlдля языка по умолчанию и/<lang>/rss.xmlдля остальных. Подписчики получают только свои тексты. - В продакшн сборке
dist/404.htmlавтоматически копируется вdist/404/index.html, так что GitHub Pages и Netlify не теряют 404 страницу. - Нужен третий язык? Добавьте его в
src/i18n/ui.ts, расширьте переводы и закиньте новые папки с контентом. - Чтобы подтянуть свежие обновления шаблона, есть
make update-template. Скрипт скачает актуальный код, аккуратно обновит компоненты и ассеты, а ваш контент и конфиги не тронет.
Этот шаблон крутится на sereja.com. Забирайте, настраивайте под себя и пишите. Если найдёте баг или придумаете что-то крутое, создайте issue на GitHub или просто маякните мне.