striker 841826ba8e feat: страница /kontakty/, robots.txt, ai.txt, llms.txt, sitemap.txt
- /kontakty/ — email, Telegram, ВКонтакте + сетка игровых форумов
- Меню обновлено: добавлен пункт «Контакты»
- public/robots.txt — статика, разрешено всё; Host для Yandex; перечислены
  AI-краулеры (GPTBot, ClaudeBot, Google-Extended, CCBot, PerplexityBot,
  anthropic-ai); ссылки на оба sitemap (XML + TXT)
- public/ai.txt — Train/Cite/Quote: yes, контактная почта
- public/llms.txt — структура llmstxt.org с описанием проекта, ключевыми
  страницами, форумами, RSS-фидами, контактами
- src/pages/sitemap.txt.ts — endpoint, генерит plain-text список 66 URL
  (главная + статика + страницы + посты + категории)
2026-05-21 01:51:51 +03:00

anotherreflections.ru — v2

Главный сайт-портал ролевой группы «Иные Отражения» — переделан со старого WordPress (тема darkness-10) на статический Astro 5.

Стек

  • Astro 5 + Content Collections (markdown)
  • @astrojs/rss — RSS-фиды (общий + per-category), формат под IPB RSS Importer
  • @astrojs/sitemap — sitemap.xml автоматически
  • sanitize-html — очистка HTML тела поста для <content:encoded> в RSS

Содержимое

  • src/content/posts/*.md — 50 постов 20092015, мигрированы из WP (frontmatter включает legacyId для трассировки и categorySlugs для категорий)
  • src/content/pages/*.md — 6 страниц: /o-nas/, /nashi-druzya/, страницы про игры
  • src/content/_categories.json — справочник категорий из WP (10 шт.)
  • _wp-export.json — исходный дамп WP, оставлен в репо для трассируемости миграции; не используется в build

Структура URL

  • / — главная (лента всех постов)
  • /<slug>/ — пост или статическая страница
  • /category/<slug>/ — лента категории
  • /feed.xml — общий RSS
  • /category/<slug>/feed.xml — RSS категории
  • /sitemap-index.xml — sitemap

URL постов совпадают с историческими WP-slug, т.к. permalink_structure='/%postname%/'. Никаких 301-редиректов не требуется — slug сохранены 1:1.

RSS для IPB Importer

Фид заточен под ACP → Community → RSS Feeds → Add Feed:

  • RSS 2.0 strict, <pubDate> в RFC-822, абсолютные <link>
  • <guid isPermaLink="true"> = URL поста — IPB по нему дедуплицирует темы при повторных сканах
  • <content:encoded> с CDATA — полное HTML тело поста, IPB подставит его в тело темы
  • <lastBuildDate> обновляется при каждом build — Importer проверяет, изменился ли фид
  • Cutoff: фид отдаёт только посты с pubDate >= RSS_CUTOFF (см. src/consts.ts). Архив 20092015 остаётся на сайте для людей, но в форумы не вбрасывается одной волной.

Разработка

npm install
npm run dev     # http://localhost:4321
npm run build   # → dist/
npm run preview

Миграция (одноразово, уже выполнено)

npm run migrate  # _wp-export.json → src/content/{posts,pages}/*.md

Скрипт scripts/migrate-wp.mjs конвертирует HTML тела постов в markdown (минимальный конвертер без внешних зависимостей: <a>/<strong>/<em>/<li>/<ul>/<blockquote>/<br>/<p> + HTML entities).

Деплой

Контейнер nginx:alpine на web.hhivp.com, шаблон по образцу stbolshevik.ru (CI/CD: Gitea → SSH-деплой на свободный порт). См. CLAUDE.md после первого деплоя.

История

  • v1: WordPress 6.9 + тема darkness-10 + 23 активных плагина, БД anotherreflctions_ru (sic) на db.hhivp.com, контейнер anotherreflections-ru:4080 на web.hhivp.com. Репо: git.striker.su/striker/anotherreflections-website (ветка feat/dockerize). Оставлен для отката.
  • v2 (этот репо): Astro 5 static, 2026-05-20.
Description
anotherreflections.ru v2 � Astro 5 static site (markdown + RSS for IPB importer)
Readme 578 KiB
Languages
Astro 41.9%
CSS 23.5%
JavaScript 18.4%
TypeScript 15.2%
Dockerfile 1%