Задача

Необходимо разработать статический сайт (SSG) на фреймворке Astro 5 с архитектурой «Граф знаний». Решение похоже на функционал Obsidian Publish, но полностью кастомное, без использования сторонних сервисов синхронизации или готовых шаблонов.

Функциональные требования

  • Работа с контентом: Весь контент хранится в формате Markdown внутри проекта (редактируемые файлы, не БД).
  • Content Collections: Использовать встроенный механизм Astro 5 для управления файлами - типизация, валидация фронтматеров.
  • Граф связей: Автоматическое построение сети ссылок между заметками (сканирование ссылок в файлах). Динамическая SVG-схема для отображения связей между документами.
  • Визуальные элементы: Карты связей (сетки), breadcrumbs (навигационные цепочки), блок последних измененных файлов.
  • Производительность: Страницы должны выдавать минимальный вес на старте (Astro части), максимальная стилизация лоадера Skeleton (простой прогресс-загрузчик контента).

Технические детали

  • Фреймворк: Astro 5 (строго 5-я версия) с режимом статической генерации (static/prefetch). SSR не используется.
  • Хранение данных: Только Markdown + YAML.
  • Связи: Требуется сканировщик (скрипт сборки), который читает Wiki стиль ссылок ([[filename]] или кастомный синтаксис) и строит инвертированные индексы (бэклинки).
  • Визуализация: На отдельной странице /graph отображать интерактивную SVG-карту графа (минимум - выделение связанных узлов).
  • Разработка: Готовые паттерны не поставляем - реализация на чистом Astro (GJ Komponente должны быть внутри проекта, не из хнишних библиотек).

Дополнительно

  • SEO Optimization: кастомные H1/H2, готовый sitemap на основе зависимостей.
  • Базовый дизайн-компонент (визуальный): dark/ligд modes из CSS ([data-theme-=}." data-preserve-html-node="true" скрипт компонент „theme-toggle“).
  • Сборка при помощи стандартного интерфейса npm run build - вывод /dist с готовыми статическими HTML-файлами.
  • Против чрезвычайных функций поднятия комплектации на React / Svelte (только Astro `.astro` + JavaScript shadow injection). Код только минимальными зависимости;