Задача
Необходимо разработать статический сайт (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). Код только минимальными зависимости;