feat: llms.txt — карта сайта для LLM-агентов + link-relation describedby в head

Генерируется в build-pages.mjs из тех же страниц, что и sitemap.xml, с ручными описаниями по каждому URL. Страницы-каталоги дизайн-системы (noindex) в файл не попадают.
This commit is contained in:
Nikolay Mamadaev committed 2026-10-07 14:01:09 +02:00
1 parent ee0dca11a2
commit f383ec350a
42 files changed
+177

No files matched your search

+1
View File
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/ai-dev/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/ai-dev/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/ai-dev/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/ai-assistant-figma/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/ai-assistant-figma/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/ai-assistant-figma/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/ai-platform-primo-rpa-2/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/ai-platform-primo-rpa-2/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/ai-platform-primo-rpa-2/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/ai-platform-primo-rpa-v2/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/ai-platform-primo-rpa-v2/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/ai-platform-primo-rpa-v2/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/ai-platform-primo-rpa/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/ai-platform-primo-rpa/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/ai-platform-primo-rpa/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/card-columns-obsidian/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/card-columns-obsidian/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/card-columns-obsidian/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
+1
View File
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/design-system/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/design-system/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/design-system/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#0f1115" />
+1
View File
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/lunacy/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/lunacy/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/lunacy/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
+1
View File
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/manu-game-maker/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/manu-game-maker/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/manu-game-maker/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/mini-projects-showcase/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/mini-projects-showcase/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/mini-projects-showcase/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/mobile-clinic-app/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/mobile-clinic-app/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/mobile-clinic-app/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/obsidian-plugin-columns-view/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/obsidian-plugin-columns-view/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/obsidian-plugin-columns-view/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/orc-automation-panel/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/orc-automation-panel/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/orc-automation-panel/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
+1
View File
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/site-portfolio/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/site-portfolio/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/site-portfolio/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/task-distribution-concept/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/task-distribution-concept/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/task-distribution-concept/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
+1
View File
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/task-tracker/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/task-tracker/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/task-tracker/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -111,6 +111,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/template-elements-demo/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/template-elements-demo/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/template-elements-demo/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#0f1115" />
+1
View File
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cookie-policy/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cookie-policy/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cookie-policy/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/ai-assistant-figma/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/ai-assistant-figma/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/ai-assistant-figma/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/ai-platform-primo-rpa-2/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/ai-platform-primo-rpa-2/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/ai-platform-primo-rpa-2/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/ai-platform-primo-rpa-v2/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/ai-platform-primo-rpa-v2/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/ai-platform-primo-rpa-v2/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/ai-platform-primo-rpa/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/ai-platform-primo-rpa/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/ai-platform-primo-rpa/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/card-columns-obsidian/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/card-columns-obsidian/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/card-columns-obsidian/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
+1
View File
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/design-system/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/design-system/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/design-system/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#0f1115" />
+1
View File
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/lunacy/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/lunacy/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/lunacy/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/manu-game-maker/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/manu-game-maker/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/manu-game-maker/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/mini-projects-showcase/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/mini-projects-showcase/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/mini-projects-showcase/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/mobile-clinic-app/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/mobile-clinic-app/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/mobile-clinic-app/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/obsidian-plugin-columns-view/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/obsidian-plugin-columns-view/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/obsidian-plugin-columns-view/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/orc-automation-panel/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/orc-automation-panel/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/orc-automation-panel/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/site-portfolio/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/site-portfolio/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/site-portfolio/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/task-distribution-concept/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/task-distribution-concept/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/task-distribution-concept/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
+1
View File
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/task-tracker/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/task-tracker/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/task-tracker/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
@@ -111,6 +111,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cases/template-elements-demo/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cases/template-elements-demo/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cases/template-elements-demo/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#0f1115" />
+1
View File
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/cookie-policy/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/cookie-policy/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/cookie-policy/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
+1
View File
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
+1
View File
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/resume/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/resume/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/resume/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Nikolai Mamadaev" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
+1
View File
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
+39
View File
@@ -0,0 +1,39 @@
# Николай Мамадаев — продуктовый дизайнер
> Сайт-портфолио продуктового дизайнера Николая Мамадаева: кейсы UX/UI-проектов, резюме, описание AI-разработки и контакты. Русский и английский, английские страницы лежат в /en/.
Формат: [llms.txt](https://llmstxt.org/). Карта для поисковиков: https://mamadaevv.site/sitemap.xml, правила для краулеров: https://mamadaevv.site/robots.txt.
Ссылки ведут на HTML-страницы, отдельной markdown-версии у сайта нет. Страницы-каталоги дизайн-системы (/cases/design-system/, /cases/template-elements-demo/, /cases/mini-projects-showcase/) закрыты от индексации и сюда не попали.
## Основные страницы
- [AI-разработка](https://mamadaevv.site/ai-dev/): Telegram-боты, MCP-серверы, плагины для Figma и Obsidian, desktop-утилиты.
- [Политика cookie](https://mamadaevv.site/cookie-policy/): Какие cookie и localStorage использует сайт.
- [Главная](https://mamadaevv.site/): Короткое описание, портфолио из кейсов и лента активности.
- [Резюме](https://mamadaevv.site/resume/): Опыт работы, стек, проекты, навыки и контакты.
## Кейсы
- [AI assistant: плагин-мост между Cursor и Figma](https://mamadaevv.site/cases/ai-assistant-figma/): Получает скрипты из Cursor и выполняет их в открытом файле.
- [AI Server в Primo RPA: черновик 2](https://mamadaevv.site/cases/ai-platform-primo-rpa-2/): Черновик 2: OCR на документах, дообучение моделей, skills.
- [AI Server в Primo RPA: редизайн](https://mamadaevv.site/cases/ai-platform-primo-rpa-v2/): Редизайн интерфейса AI Server.
- [Настройка AI Server без помощи внедрения](https://mamadaevv.site/cases/ai-platform-primo-rpa/): Фреймворк STAR для настройки проектов в AI Server.
- [Card Columns для Obsidian Bases](https://mamadaevv.site/cases/card-columns-obsidian/): Канбан-доски по свойствам заметок, фильтры AND/OR, перенос карточек.
- [Lunacy](https://mamadaevv.site/cases/lunacy/): Icons8: пользовательские сценарии, итерации интерфейса и скриншоты процесса.
- [Игровой движок MANU](https://mamadaevv.site/cases/manu-game-maker/): Визуальная система и сложные пользовательские сценарии.
- [Мобильное приложение для сети клиник](https://mamadaevv.site/cases/mobile-clinic-app/): Запись к врачу, услуги, навигация, быстрые действия.
- [Колоночный вид для Obsidian](https://mamadaevv.site/cases/obsidian-plugin-columns-view/): Дизайн и UX плагина для заметок.
- [Веб-панель для оркестрации автоматизаций](https://mamadaevv.site/cases/orc-automation-panel/): Primo RPA: кураторство дизайна, переход на Ant Design и Storybook, токены в Figma.
- [Как я создаю сайт-портфолио с LLM-агентами](https://mamadaevv.site/cases/site-portfolio/): От no-code конструкторов до разработки в Cursor и Hermes Agent.
- [Концепт сервиса распределения задач](https://mamadaevv.site/cases/task-distribution-concept/): Прозрачность процессов между командами.
- [Таск-трекер для бек-офис системы](https://mamadaevv.site/cases/task-tracker/): Вкладки, фильтры, виды отображения, прототипы и пользовательские исследования.
## Контакты
- [Telegram](https://t.me/mamadaevv): @mamadaevv
- [Почта](mailto:nik@mamadaevv.site): nik@mamadaevv.site
## Использование
Цитировать кейсы и текст можно со ссылкой на страницу. Ссылка на сайт обязательна.
+1
View File
@@ -114,6 +114,7 @@
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/resume/" />
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/en/resume/" />
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/resume/" />
<link rel="describedby" href="https://mamadaevv.site/llms.txt" title="llms.txt" />
<meta name="author" content="Николай Мамадаев" />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0f1115" />
+98
View File
@@ -35,6 +35,39 @@ const PER_PAGE_OG_IMAGE = {
"cases/ai-platform-primo-rpa": `${SITE_ORIGIN}/assets/og/og-primo-star.png`,
};
// По одной строке на страницу — попадает в llms.txt.
// Пишется от руки: description из <meta> у кейсов начинается со слов «Кейс:»
// и сам по себе ни о чём не говорит агенту. Правило: не повторять имя ссылки
// (оно уже стоит слева от двоеточия) и не писать «Кейс: …».
const LLMS_PAGE_NOTES = {
"": "Короткое описание, портфолио из кейсов и лента активности.",
resume: "Опыт работы, стек, проекты, навыки и контакты.",
"ai-dev": "Telegram-боты, MCP-серверы, плагины для Figma и Obsidian, desktop-утилиты.",
"cookie-policy": "Какие cookie и localStorage использует сайт.",
"cases/ai-assistant-figma": "Получает скрипты из Cursor и выполняет их в открытом файле.",
"cases/ai-platform-primo-rpa": "Фреймворк STAR для настройки проектов в AI Server.",
"cases/ai-platform-primo-rpa-v2": "Редизайн интерфейса AI Server.",
"cases/ai-platform-primo-rpa-2": "Черновик 2: OCR на документах, дообучение моделей, skills.",
"cases/card-columns-obsidian": "Канбан-доски по свойствам заметок, фильтры AND/OR, перенос карточек.",
"cases/lunacy": "Icons8: пользовательские сценарии, итерации интерфейса и скриншоты процесса.",
"cases/manu-game-maker": "Визуальная система и сложные пользовательские сценарии.",
"cases/mobile-clinic-app": "Запись к врачу, услуги, навигация, быстрые действия.",
"cases/obsidian-plugin-columns-view": "Дизайн и UX плагина для заметок.",
"cases/orc-automation-panel":
"Primo RPA: кураторство дизайна, переход на Ant Design и Storybook, токены в Figma.",
"cases/site-portfolio": "От no-code конструкторов до разработки в Cursor и Hermes Agent.",
"cases/task-distribution-concept": "Прозрачность процессов между командами.",
"cases/task-tracker": "Вкладки, фильтры, виды отображения, прототипы и пользовательские исследования.",
};
// Имя ссылки, когда заголовок страницы не отвечает на вопрос «что это».
// Заодно снимаем хвост «— кейс» / «— Case Study»: в секции «Кейсы» он лишний.
const LLMS_PAGE_NAMES = {
"cases/ai-platform-primo-rpa-v2": "AI Server в Primo RPA: редизайн",
"cases/ai-platform-primo-rpa-2": "AI Server в Primo RPA: черновик 2",
"cases/card-columns-obsidian": "Card Columns для Obsidian Bases",
};
const titleRe = /<title>([\s\S]*?)<\/title>/i;
const descRe = /<meta\s+name="description"\s+content="([\s\S]*?)"\s*\/?>/i;
@@ -205,6 +238,65 @@ function buildSitemap(pageFiles) {
);
}
/** Генерация llms.txt: короткая карта сайта для LLM-агентов (спецификация llmstxt.org). */
function buildLlmsTxt(pageFiles) {
const entries = [];
for (const pagePath of pageFiles) {
const relNorm = path.relative(srcPagesDir, pagePath).split(path.sep).join("/");
// Тот же slug, что и в sitePath(): index.html → "" (главная).
const slug = relNorm
.replace(/\.html$/, "")
.replace(/(^|\/)index$/, "")
.replace(/\/$/, "");
if (NOINDEX_PAGES.has(slug)) continue;
const { title } = extractMeta(readUtf8(pagePath));
// Имя ссылки: из <title> без хвоста с фамилией автора и без «— кейс»,
// но с явным переопределением там, где заголовок говорит только «AI Server».
const strippedTitle = title
? title
.replace(/\s*[·|—-]\s*Никол(ая|ай) Мамадаев\s*$/i, "")
.replace(/\s*[—–-]\s*(кейс|case study)\s*$/i, "")
.trim()
: "";
const name =
LLMS_PAGE_NAMES[slug] || (slug === "" ? "Главная" : strippedTitle || slug);
entries.push({ slug, name, url: canonicalFor(relNorm, DEFAULT_LOCALE) });
}
const cases = entries.filter((e) => e.slug.startsWith("cases/"));
const rest = entries.filter((e) => !e.slug.startsWith("cases/"));
/** Строка списка: описание дописывается, только если не повторяет имя ссылки. */
const line = (e) => {
const note = LLMS_PAGE_NOTES[e.slug] || "";
if (!note) return `- [${e.name}](${e.url})`;
// Описание, начинающееся именем ссылки, обрезаем: «Имя: Имя: …» агентам не помогает.
const prefix = `${e.name}: `;
const trimmed = note.startsWith(prefix) ? note.slice(prefix.length) : note;
return `- [${e.name}](${e.url}): ${trimmed}`;
};
const section = (heading, list) => `## ${heading}\n\n${list.map(line).join("\n")}\n`;
return (
`# ${SITE_NAME_RU}\n\n` +
`> Сайт-портфолио продуктового дизайнера Николая Мамадаева: кейсы UX/UI-проектов, резюме, ` +
`описание AI-разработки и контакты. Русский и английский, английские страницы лежат в /en/.\n\n` +
`Формат: [llms.txt](https://llmstxt.org/). Карта для поисковиков: ` +
`https://mamadaevv.site/sitemap.xml, правила для краулеров: https://mamadaevv.site/robots.txt.\n\n` +
`Ссылки ведут на HTML-страницы, отдельной markdown-версии у сайта нет. ` +
`Страницы-каталоги дизайн-системы (/cases/design-system/, /cases/template-elements-demo/, ` +
`/cases/mini-projects-showcase/) закрыты от индексации и сюда не попали.\n\n` +
section("Основные страницы", rest) +
"\n" +
section("Кейсы", cases) +
"\n" +
`## Контакты\n\n` +
`- [Telegram](https://t.me/mamadaevv): @mamadaevv\n` +
`- [Почта](mailto:nik@mamadaevv.site): nik@mamadaevv.site\n\n` +
`## Использование\n\n` +
`Цитировать кейсы и текст можно со ссылкой на страницу. Ссылка на сайт обязательна.\n`
);
}
const includeRe = /\{\{\>\s*([a-z0-9-]+)\s*\}\}/gi;
const varRe = /\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g;
const i18nRe = /\{\{\s*i18n:([\w.-]+)\s*\}\}/g;
@@ -391,6 +483,8 @@ function build() {
vars.ogDescription = pageDesc;
vars.ogImage = PER_PAGE_OG_IMAGE[noSlug] || OG_IMAGE_DEFAULT;
vars.ogImageAlt = pageTitle;
// Link-relation v2 спецификации llms.txt: файл, покрывающий страницу.
vars.llmsUrl = `${SITE_ORIGIN}/llms.txt`;
vars.jsonLd = JSON.stringify(buildJsonLd(relNorm, loc, { title: pageTitle, description: pageDesc }, canonicalUrl), null, 2);
// Префикс до КОРНЯ ЛОКАЛИ (без en-сдвига) — для навигационных ссылок,
@@ -432,8 +526,12 @@ function build() {
const sitemapXml = buildSitemap(pageFiles);
fs.writeFileSync(path.join(outDir, "sitemap.xml"), sitemapXml, "utf8");
const llmsTxt = buildLlmsTxt(pageFiles);
fs.writeFileSync(path.join(outDir, "llms.txt"), llmsTxt, "utf8");
console.log(`Built ${pageFiles.length} pages × ${LOCALES.length} locales into public/`);
console.log(`Generated sitemap.xml (${sitemapXml.split("<url>").length - 1} urls)`);
console.log(`Generated llms.txt (${llmsTxt.split("\n").filter((l) => l.startsWith("- [")).length} links)`);
}
build();
+1
View File
@@ -2,6 +2,7 @@
<link rel="alternate" hreflang="ru" href="{{canonicalRu}}" />
<link rel="alternate" hreflang="en" href="{{canonicalEn}}" />
<link rel="alternate" hreflang="x-default" href="{{canonicalRu}}" />
<link rel="describedby" href="{{llmsUrl}}" title="llms.txt" />
<meta name="author" content="{{authorName}}" />
<meta name="robots" content="{{metaRobots}}" />
<meta name="theme-color" content="{{themeColor}}" />