- 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
65 lines
3.7 KiB
Markdown
65 lines
3.7 KiB
Markdown
# 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 постов 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
|
||
|
||
- `/` — главная (лента всех постов)
|
||
- `/<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`). Архив 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 (минимальный конвертер без внешних зависимостей: `<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.
|