# 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 тела поста для `` в RSS ## Содержимое - `src/content/posts/*.md` — 50 постов 2009–2015, мигрированы из 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 - `/` — главная (лента всех постов) - `//` — пост или статическая страница - `/category//` — лента категории - `/feed.xml` — общий RSS - `/category//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, `` в RFC-822, абсолютные `` - `` = URL поста — IPB по нему дедуплицирует темы при повторных сканах - `` с CDATA — полное HTML тело поста, IPB подставит его в тело темы - `` обновляется при каждом build — Importer проверяет, изменился ли фид - **Cutoff:** фид отдаёт только посты с `pubDate >= RSS_CUTOFF` (см. `src/consts.ts`). Архив 2009–2015 остаётся на сайте для людей, но в форумы не вбрасывается одной волной. ## Разработка ```bash npm install npm run dev # http://localhost:4321 npm run build # → dist/ npm run preview ``` ## Миграция (одноразово, уже выполнено) ```bash npm run migrate # _wp-export.json → src/content/{posts,pages}/*.md ``` Скрипт `scripts/migrate-wp.mjs` конвертирует HTML тела постов в markdown (минимальный конвертер без внешних зависимостей: `///
  • /
      /
      /
      /

      ` + 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.