Files
striker 0c3e248ccc feat: каркас v2 — Astro 5 + миграция 50 постов из WP + RSS для IPB Importer
- Astro 5 (6.3.6) minimal scaffold с Content Collections для posts/pages
- Тёмная палитра в духе старой темы darkness-10 (тонкая типографика Inter+Lora)
- Layout с шапкой/футером, главной-лентой, страницами категорий и одиночными постами
- RSS (общий + per-category) под IPB RSS Importer: RFC-822 pubDate,
  <guid isPermaLink="true">, <content:encoded> с CDATA, <lastBuildDate>
- RSS_CUTOFF фильтр: архив 2009-2015 на сайте остаётся, в RSS — только новые
- 50 постов и 6 страниц мигрированы из WP (anotherreflctions_ru @ db.hhivp.com)
  через scripts/migrate-wp.mjs (HTML→md без внешних зависимостей)
- sitemap.xml автоматически через @astrojs/sitemap
2026-05-21 00:58:44 +03:00

65 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 остаётся на сайте для людей, но в форумы не вбрасывается одной волной.
## Разработка
```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 (минимальный конвертер без внешних зависимостей: `<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.