Это первая заметка, поэтому она о том, на чём вы её читаете. Сайт маленький, но собран так, как я собираю бэкенд-системы: источник истины — структурированные данные, а каждая поверхность (для человека или для машины) — их проекция.
Сначала статика, один серверный маршрут
Все страницы пререндерятся на этапе сборки. Серверный маршрут ровно один — эндпоинт ассистента, и он существует только потому, что ему нужно ходить в модель. Больше ничему живой сервер не нужен — значит, его и нет. Сайт быстрый, дешёвый в хостинге, и его трудно сломать.
Одна модель контента, много проекций
Резюме, услуги и библиотека доказательств — это content collections с типизированными схемами. Из этой единственной модели сборка отдаёт:
- человеческие страницы, по которым вы ходите,
- Markdown-зеркала (
/resume.md,/ai-context.md, записи доказательств в.md), - JSON-индекс услуг,
llms.txt, который индексирует всё это для агентов,- JSON-LD
@graph(одна сущностьPerson, переиспользуемая на всех страницах).
Факт пишется один раз — и корректно появляется везде. Никаких копий, которые разъезжаются.
Машиночитаемость — намеренно
AI-движки ответов становятся реальным источником трафика, поэтому машиночитаемый слой — полноценный артефакт, а не довесок. robots.txt приглашает краулеры ассистентов; Markdown- и JSON-зеркала дают им чистый, цитируемый текст; структурированные данные говорят, о ком страницы. Ассистент сайта работает на том же опубликованном контенте, обязан ссылаться на источники и не выдумывать факты.
Двуязычность как принцип
Всё существует на английском и русском как равноправные каноники, связанные взаимным hreflang. Аудитории почти не пересекаются — это охват, а не дубль.
В этом и вся идея: портфолио, которое человек читает, краулер индексирует, а агент цитирует — из одного честного набора фактов.