Dmitry Gusev 86d2aa6c14 feat(seo): add security.txt, humans.txt, Schema.org JSON-LD
- public/.well-known/security.txt (RFC 9116): контакты для responsible disclosure
- public/humans.txt: команда и стек
- BaseLayout.astro: JSON-LD WebSite (SearchAction) + NewsMediaOrganization (sameAs из SOCIAL)
2026-05-21 13:41:27 +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%