@dzhechkov/keysarium 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/README.md +70 -10
  2. package/bin/cli.js +0 -0
  3. package/package.json +5 -3
  4. package/src/utils.js +1 -1
  5. package/templates/.claude/commands/analyst-manual.md +38 -0
  6. package/templates/.claude/commands/brain-export.md +2 -0
  7. package/templates/.claude/commands/bto-benchmark.md +302 -0
  8. package/templates/.claude/commands/casarium.md +55 -4
  9. package/templates/.claude/commands/feature-adr.md +8 -0
  10. package/templates/.claude/commands/harvest.md +28 -46
  11. package/templates/.claude/rules/trust-tiers.md +6 -0
  12. package/templates/.claude/shards/feature-adr.shard.md +64 -10
  13. package/templates/.claude/shards/phase-ai-factory.shard.md +109 -0
  14. package/templates/.claude/skills/ai-factory-mapper/README.md +90 -0
  15. package/templates/.claude/skills/ai-factory-mapper/SKILL.md +309 -0
  16. package/templates/.claude/skills/ai-factory-mapper/assets/report-template.md +123 -0
  17. package/templates/.claude/skills/ai-factory-mapper/references/catalog.md +230 -0
  18. package/templates/.claude/skills/ai-factory-mapper/references/coverage-formula.md +219 -0
  19. package/templates/.claude/skills/ai-factory-mapper/references/decomposition-checklist.md +183 -0
  20. package/templates/.claude/skills/ai-factory-mapper/references/pattern-library.md +312 -0
  21. package/templates/.claude/skills/ai-factory-mapper/scripts/build_docx_report.js +423 -0
  22. package/templates/.claude/skills/analyst-manual-full/SKILL.md +286 -0
  23. package/templates/.claude/skills/edu-site-generator/SKILL.md +254 -0
  24. package/templates/.claude/skills/edu-site-generator/examples/sample-course-structure.md +116 -0
  25. package/templates/.claude/skills/edu-site-generator/modules/00-content-analysis.md +84 -0
  26. package/templates/.claude/skills/edu-site-generator/modules/01-course-structure.md +75 -0
  27. package/templates/.claude/skills/edu-site-generator/modules/02-data-generation.md +186 -0
  28. package/templates/.claude/skills/edu-site-generator/modules/03-scaffold.md +249 -0
  29. package/templates/.claude/skills/edu-site-generator/modules/04-components.md +130 -0
  30. package/templates/.claude/skills/edu-site-generator/modules/05-gamification.md +163 -0
  31. package/templates/.claude/skills/edu-site-generator/modules/06-deploy.md +88 -0
  32. package/templates/.claude/skills/edu-site-generator/modules/07-verification.md +97 -0
  33. package/templates/.claude/skills/edu-site-generator/references/component-templates.md +436 -0
  34. package/templates/.claude/skills/edu-site-generator/references/data-schemas.md +164 -0
  35. package/templates/.claude/skills/edu-site-generator/references/exercise-catalog.md +110 -0
  36. package/templates/.claude/skills/edu-site-generator/references/tech-stack.md +69 -0
  37. package/templates/.claude/skills/feature-adr/SKILL.md +245 -59
  38. package/templates/.claude/skills/feature-adr/modules/03-adr.md +43 -0
  39. package/templates/.claude/skills/feature-adr/modules/03.5-ideation-swarm.md +180 -0
  40. package/templates/.claude/skills/feature-adr/modules/06-implementation-plan.md +56 -7
  41. package/templates/.claude/skills/feature-adr/modules/08-qe.md +87 -23
  42. package/templates/.claude/skills/feature-adr/modules/09-fleet-qe.md +305 -0
  43. package/templates/.claude/skills/feature-adr/references/agentic-qe/README.md +143 -0
  44. package/templates/.claude/skills/feature-adr/references/agentic-qe/brutal-honesty-review.md +240 -0
  45. package/templates/.claude/skills/feature-adr/references/agentic-qe/chaos-engineering-resilience.md +163 -0
  46. package/templates/.claude/skills/feature-adr/references/agentic-qe/code-goal-planner.md +446 -0
  47. package/templates/.claude/skills/feature-adr/references/agentic-qe/enterprise-integration-testing.md +111 -0
  48. package/templates/.claude/skills/feature-adr/references/agentic-qe/mutation-testing.md +236 -0
  49. package/templates/.claude/skills/feature-adr/references/agentic-qe/performance-testing.md +315 -0
  50. package/templates/.claude/skills/feature-adr/references/agentic-qe/qcsd-ideation-swarm.md +126 -0
  51. package/templates/.claude/skills/feature-adr/references/agentic-qe/qcsd-production-swarm.md +108 -0
  52. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-coverage-analysis.md +193 -0
  53. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-requirements-validation.md +254 -0
  54. package/templates/.claude/skills/feature-adr/references/agentic-qe/regression-testing.md +233 -0
  55. package/templates/.claude/skills/feature-adr/references/agentic-qe/risk-based-testing.md +212 -0
  56. package/templates/.claude/skills/feature-adr/references/agentic-qe/security-testing.md +311 -0
  57. package/templates/.claude/skills/feature-adr/references/agentic-qe/shift-left-testing.md +231 -0
  58. package/templates/.claude/skills/feature-adr/references/agentic-qe/tdd-london-chicago.md +249 -0
  59. package/templates/.claude/skills/knowledge-extractor/SKILL.md +254 -0
  60. package/templates/.claude/skills/knowledge-extractor/modules/01-extract.md +188 -0
  61. package/templates/.claude/skills/knowledge-extractor/modules/02-classify.md +99 -0
  62. package/templates/.claude/skills/knowledge-extractor/modules/03-gate.md +150 -0
  63. package/templates/.claude/skills/knowledge-extractor/modules/04-integrate.md +159 -0
  64. package/templates/.claude/skills/knowledge-extractor/references/artifact-categories.md +100 -0
  65. package/templates/.claude/skills/knowledge-extractor/references/maturity-model.md +94 -0
  66. package/templates/.claude/skills/knowledge-extractor/references/quality-gates.md +98 -0
  67. package/templates/.claude/skills/knowledge-extractor/templates/artifact-card.md +63 -0
  68. package/templates/.claude/skills/knowledge-extractor/templates/harvest-report.md +102 -0
  69. package/templates/.claude/skills/transcript-site-generator/SKILL.md +287 -0
  70. package/templates/.claude/skills/transcript-site-generator/examples/sample-text-only-site.md +123 -0
  71. package/templates/.claude/skills/transcript-site-generator/examples/sample-transcript-site.md +134 -0
  72. package/templates/.claude/skills/transcript-site-generator/modules/00-input-analysis.md +132 -0
  73. package/templates/.claude/skills/transcript-site-generator/modules/01-content-parsing.md +117 -0
  74. package/templates/.claude/skills/transcript-site-generator/modules/02-site-generation.md +293 -0
  75. package/templates/.claude/skills/transcript-site-generator/modules/03-interactivity.md +406 -0
  76. package/templates/.claude/skills/transcript-site-generator/modules/04-deploy.md +130 -0
  77. package/templates/.claude/skills/transcript-site-generator/modules/05-verification.md +155 -0
  78. package/templates/.claude/skills/transcript-site-generator/references/component-catalog.md +86 -0
  79. package/templates/.claude/skills/transcript-site-generator/references/data-schemas.md +123 -0
  80. package/templates/.claude/skills/transcript-site-generator/references/tech-stack.md +132 -0
  81. package/templates/CLAUDE.md +30 -9
  82. package/templates/docs/continuous-learning-guide.md +622 -0
  83. package/templates/docs/edu-site-generator/01-deployment-guide.md +911 -0
  84. package/templates/docs/edu-site-generator/02-admin-guide.md +901 -0
  85. package/templates/docs/edu-site-generator/03-user-guide.md +1008 -0
  86. package/templates/docs/edu-site-generator/04-infrastructure-requirements.md +489 -0
  87. package/templates/docs/edu-site-generator/05-architecture.md +902 -0
  88. package/templates/docs/edu-site-generator/06-user-flows.md +759 -0
  89. package/templates/docs/improvement-directions.md +8 -4
  90. package/templates/docs/keysarium-core/02-functionality.md +3 -1
  91. package/templates/docs/skills-bto/01-deployment-guide.md +1 -1
  92. package/templates/docs/skills-bto/02-admin-guide.md +4 -1
  93. package/templates/docs/skills-bto/03-user-guide.md +4 -3
  94. package/templates/docs/skills-bto/04-infrastructure-requirements.md +2 -1
  95. package/templates/docs/skills-bto/05-architecture.md +11 -11
  96. package/templates/docs/skills-bto/06-user-flows.md +2 -1
  97. package/templates/docs/transcript-site-generator/01-deployment-guide.md +1042 -0
  98. package/templates/docs/transcript-site-generator/02-admin-guide.md +918 -0
  99. package/templates/docs/transcript-site-generator/03-user-guide.md +925 -0
  100. package/templates/docs/transcript-site-generator/04-infrastructure-requirements.md +482 -0
  101. package/templates/docs/transcript-site-generator/05-architecture.md +1068 -0
  102. package/templates/docs/transcript-site-generator/06-user-flows.md +855 -0
  103. package/templates/lib/dream-engine.md +1 -1
  104. package/templates/lib/memory-protocol.md +6 -2
  105. package/templates/lib/reward-tracker.md +6 -3
@@ -0,0 +1,901 @@
1
+ # Руководство администратора @dzhechkov/skills-edu-site
2
+
3
+ Это руководство описывает управление, настройку и обслуживание edu-site skill pack. Предназначено для администраторов, которые управляют компонентами скилла, настраивают пайплайн генерации, конфигурируют типы упражнений, тему оформления, систему достижений и параметры деплоя.
4
+
5
+ ---
6
+
7
+ ## Содержание
8
+
9
+ 1. [Управление компонентами](#1-управление-компонентами)
10
+ 2. [Конфигурация пайплайна (8 шагов)](#2-конфигурация-пайплайна-8-шагов)
11
+ 3. [Конфигурация типов упражнений](#3-конфигурация-типов-упражнений)
12
+ 4. [Конфигурация языка (ru/en)](#4-конфигурация-языка-ruen)
13
+ 5. [Конфигурация Vite](#5-конфигурация-vite)
14
+ 6. [Кастомизация TailwindCSS v4 темы](#6-кастомизация-tailwindcss-v4-темы)
15
+ 7. [Конфигурация Zustand store](#7-конфигурация-zustand-store)
16
+ 8. [Конфигурация системы достижений](#8-конфигурация-системы-достижений)
17
+ 9. [Конфигурация финального теста](#9-конфигурация-финального-теста)
18
+ 10. [SEO-конфигурация](#10-seo-конфигурация)
19
+ 11. [Оптимизация производительности](#11-оптимизация-производительности)
20
+
21
+ ---
22
+
23
+ ## 1. Управление компонентами
24
+
25
+ ### 1.1. Текущие компоненты
26
+
27
+ После установки edu-site включает следующие компоненты:
28
+
29
+ | Компонент | Путь | Назначение |
30
+ |-----------|------|------------|
31
+ | Edu-Site Skill | `.claude/skills/edu-site-generator/` | Основной оркестратор: загружается командой |
32
+ | SKILL.md | `.claude/skills/edu-site-generator/SKILL.md` | Точка входа, документирует все 8 модулей |
33
+ | Модуль Content Analysis | `.claude/skills/edu-site-generator/modules/01-content-analysis.md` | Анализ входных данных |
34
+ | Модуль Course Structure | `.claude/skills/edu-site-generator/modules/02-course-structure.md` | Планирование структуры курса |
35
+ | Модуль Data Generation | `.claude/skills/edu-site-generator/modules/03-data-generation.md` | Генерация файлов данных |
36
+ | Модуль Scaffold | `.claude/skills/edu-site-generator/modules/04-scaffold.md` | Создание каркаса проекта |
37
+ | Модуль Components | `.claude/skills/edu-site-generator/modules/05-components.md` | Генерация React-компонентов |
38
+ | Модуль Gamification | `.claude/skills/edu-site-generator/modules/06-gamification.md` | Настройка геймификации |
39
+ | Модуль Deploy | `.claude/skills/edu-site-generator/modules/07-deploy.md` | Конфигурация деплоя |
40
+ | Модуль Verification | `.claude/skills/edu-site-generator/modules/08-verification.md` | Верификация проекта |
41
+ | Справочник упражнений | `.claude/skills/edu-site-generator/references/exercise-types.md` | 6 типов упражнений |
42
+ | Паттерны компонентов | `.claude/skills/edu-site-generator/references/component-patterns.md` | React-паттерны |
43
+ | Справочник TailwindCSS v4 | `.claude/skills/edu-site-generator/references/tailwind-v4-guide.md` | TailwindCSS v4 API |
44
+ | Паттерны Zustand | `.claude/skills/edu-site-generator/references/zustand-patterns.md` | State management |
45
+ | Шаблоны достижений | `.claude/skills/edu-site-generator/references/achievement-templates.md` | Шаблоны ачивок |
46
+ | Команда /edu-site | `.claude/commands/edu-site.md` | Полный пайплайн |
47
+ | Правила генерации | `.claude/rules/edu-site-conventions.md` | Автоматически применяемые правила |
48
+
49
+ ### 1.2. Проверка компонентов
50
+
51
+ ```bash
52
+ # Полная диагностика установки
53
+ npx @dzhechkov/skills-edu-site doctor
54
+
55
+ # Листинг установленных файлов
56
+ npx @dzhechkov/skills-edu-site list
57
+ ```
58
+
59
+ ### 1.3. Обновление отдельных компонентов
60
+
61
+ Команда `update` обновляет все компоненты из последней версии пакета. Для обновления отдельного файла:
62
+
63
+ ```bash
64
+ # Шаг 1: просмотрите diff без применения
65
+ npx @dzhechkov/skills-edu-site update --dry-run
66
+
67
+ # Шаг 2: при необходимости скопируйте нужный файл из шаблона пакета
68
+ node -e "console.log(require.resolve('@dzhechkov/skills-edu-site/package.json').replace('package.json', 'templates/'))"
69
+ ```
70
+
71
+ ### 1.4. Добавление пользовательских расширений
72
+
73
+ Для добавления собственных ссылочных материалов без изменения базовых файлов пакета создайте файлы с уникальными именами:
74
+
75
+ ```
76
+ .claude/skills/edu-site-generator/references/
77
+ +-- exercise-types.md <- базовый (не изменять)
78
+ +-- component-patterns.md <- базовый
79
+ +-- tailwind-v4-guide.md <- базовый
80
+ +-- zustand-patterns.md <- базовый
81
+ +-- achievement-templates.md <- базовый
82
+ +-- custom-exercise-type.md <- ваш пользовательский файл
83
+ +-- custom-theme-palette.md <- ваш пользовательский файл
84
+ ```
85
+
86
+ ### 1.5. Структура скилл-директории
87
+
88
+ Полная структура скилла edu-site-generator:
89
+
90
+ ```
91
+ .claude/skills/edu-site-generator/
92
+ +-- SKILL.md <- Оркестратор: 8 шагов, зависимости, quick start
93
+ +-- modules/
94
+ | +-- 01-content-analysis.md <- Анализ контента: URL, файлы, текст
95
+ | +-- 02-course-structure.md <- Иерархия секций, порядок изучения
96
+ | +-- 03-data-generation.md <- sections.js, exercises.js, quizQuestions.js, achievements.js
97
+ | +-- 04-scaffold.md <- Vite + React + TailwindCSS v4 + Zustand каркас
98
+ | +-- 05-components.md <- Layout, interactive, common, pages
99
+ | +-- 06-gamification.md <- Zustand store, points, achievements, progress
100
+ | +-- 07-deploy.md <- GitHub Actions, base path, Pages
101
+ | +-- 08-verification.md <- Import check, data validation, build test
102
+ +-- references/
103
+ | +-- exercise-types.md <- 6 типов: Quiz, Flashcards, Matching, DragToOrder, CommandBuilder, ScenarioGame
104
+ | +-- component-patterns.md <- React 19 паттерны, hooks, composition
105
+ | +-- tailwind-v4-guide.md <- v4 syntax, @theme, CSS-first config
106
+ | +-- zustand-patterns.md <- persist, slices, selectors
107
+ | +-- achievement-templates.md <- Шаблоны достижений по категориям
108
+ +-- examples/
109
+ +-- sample-sections.js <- Пример структуры секций
110
+ +-- sample-exercises.js <- Пример упражнений всех 6 типов
111
+ ```
112
+
113
+ ---
114
+
115
+ ## 2. Конфигурация пайплайна (8 шагов)
116
+
117
+ ### 2.1. Архитектура пайплайна
118
+
119
+ Edu-site использует линейный 8-шаговый пайплайн. Каждый шаг зависит от результата предыдущего:
120
+
121
+ ```
122
+ Step 1 Step 2 Step 3 Step 4
123
+ CONTENT -> COURSE -> DATA -> SCAFFOLD
124
+ ANALYSIS STRUCTURE GENERATION (Vite project)
125
+
126
+ Step 5 Step 6 Step 7 Step 8
127
+ COMPONENTS -> GAMIFICATION -> DEPLOY -> VERIFICATION
128
+ (React) (Zustand) (GitHub Pages) (checks)
129
+ ```
130
+
131
+ ### 2.2. Шаг 1: Content Analysis
132
+
133
+ **Модуль:** `modules/01-content-analysis.md`
134
+
135
+ **Настраиваемые параметры:**
136
+
137
+ | Параметр | Значение по умолчанию | Описание |
138
+ |----------|----------------------|----------|
139
+ | `max_url_depth` | 3 | Глубина обхода ссылок при парсинге URL |
140
+ | `language_detection` | `auto` | Автоопределение языка (`auto`, `ru`, `en`) |
141
+ | `min_content_length` | 500 символов | Минимальная длина контента для анализа |
142
+ | `max_topics` | 20 | Максимальное число тем для извлечения |
143
+
144
+ Для изменения параметров отредактируйте секцию `## Configuration` в `01-content-analysis.md`.
145
+
146
+ ### 2.3. Шаг 2: Course Structure
147
+
148
+ **Модуль:** `modules/02-course-structure.md`
149
+
150
+ **Настраиваемые параметры:**
151
+
152
+ | Параметр | Значение по умолчанию | Описание |
153
+ |----------|----------------------|----------|
154
+ | `max_sections` | 8 | Максимальное число секций |
155
+ | `min_exercises_per_section` | 2 | Минимум упражнений в секции |
156
+ | `max_exercises_per_section` | 6 | Максимум упражнений в секции |
157
+ | `difficulty_progression` | `linear` | Нарастание сложности (`linear`, `stepped`) |
158
+
159
+ ### 2.4. Шаг 3: Data Generation
160
+
161
+ **Модуль:** `modules/03-data-generation.md`
162
+
163
+ Генерирует 4 JavaScript-файла с данными:
164
+
165
+ | Файл | Содержимое | Формат |
166
+ |------|-----------|--------|
167
+ | `sections.js` | Секции курса с описаниями, иконками | `export const sections = [...]` |
168
+ | `exercises.js` | Упражнения всех 6 типов | `export const exercises = [...]` |
169
+ | `quizQuestions.js` | Вопросы финального теста | `export const quizQuestions = [...]` |
170
+ | `achievements.js` | Достижения с критериями | `export const achievements = [...]` |
171
+
172
+ **Настройка формата данных:**
173
+
174
+ По умолчанию данные экспортируются как ES-модули (`.js` файлы с `export`). Если вам нужен другой формат, отредактируйте секцию `## Output Format` в `03-data-generation.md`.
175
+
176
+ ### 2.5. Шаг 4: Scaffold
177
+
178
+ **Модуль:** `modules/04-scaffold.md`
179
+
180
+ Создаёт каркас проекта Vite + React + TailwindCSS v4. Параметры:
181
+
182
+ | Параметр | Значение по умолчанию | Описание |
183
+ |----------|----------------------|----------|
184
+ | `react_version` | `19` | Версия React |
185
+ | `vite_version` | `6` | Версия Vite |
186
+ | `tailwind_version` | `4` | Версия TailwindCSS |
187
+ | `zustand_version` | `5` | Версия Zustand |
188
+ | `router` | `HashRouter` | Тип роутера (HashRouter для GitHub Pages) |
189
+
190
+ ### 2.6. Шаг 5: Components
191
+
192
+ **Модуль:** `modules/05-components.md`
193
+
194
+ Генерирует React-компоненты по 4 категориям:
195
+
196
+ | Категория | Компоненты | Назначение |
197
+ |-----------|-----------|------------|
198
+ | `layout/` | Header, Footer, Sidebar, Navigation | Макет приложения |
199
+ | `interactive/` | Quiz, Flashcards, Matching, DragToOrder, CommandBuilder, ScenarioGame | 6 типов упражнений |
200
+ | `common/` | Toast, ProgressBar, Badge, AchievementPopup, Button, Card | Общие UI-элементы |
201
+ | `pages/` | HomePage, SectionPage, FinalTestPage, ResultsPage | Страницы приложения |
202
+
203
+ ### 2.7. Шаг 6: Gamification
204
+
205
+ **Модуль:** `modules/06-gamification.md`
206
+
207
+ Настройка системы геймификации. Подробнее в разделе [8. Конфигурация системы достижений](#8-конфигурация-системы-достижений).
208
+
209
+ ### 2.8. Шаг 7: Deploy
210
+
211
+ **Модуль:** `modules/07-deploy.md`
212
+
213
+ Генерация GitHub Actions workflow. Подробнее в разделе [5. Конфигурация Vite](#5-конфигурация-vite).
214
+
215
+ ### 2.9. Шаг 8: Verification
216
+
217
+ **Модуль:** `modules/08-verification.md`
218
+
219
+ 5 проверок финальной верификации:
220
+
221
+ | Проверка | Что проверяется |
222
+ |---------|----------------|
223
+ | Import resolution | Все `import` в JSX-файлах указывают на существующие файлы |
224
+ | Data file structure | Файлы данных экспортируют массивы с корректной структурой |
225
+ | Component hierarchy | App -> Router -> Pages -> Layout + Sections -> Components |
226
+ | Router configuration | Все маршруты ведут на существующие компоненты-страницы |
227
+ | Build simulation | Проект собирается без ошибок (`npm run build` эмуляция) |
228
+
229
+ ---
230
+
231
+ ## 3. Конфигурация типов упражнений
232
+
233
+ ### 3.1. 6 типов упражнений
234
+
235
+ Edu-site поддерживает 6 типов интерактивных упражнений. Каждый тип определён в `references/exercise-types.md`.
236
+
237
+ | Тип | Компонент | Описание | Когда использовать |
238
+ |-----|-----------|---------|-------------------|
239
+ | **Quiz** | `Quiz.jsx` | Вопрос с вариантами ответа (single/multiple choice) | Проверка знания фактов и определений |
240
+ | **Flashcards** | `Flashcards.jsx` | Карточки с вопросом на лицевой стороне и ответом на обратной | Запоминание терминов, команд, определений |
241
+ | **Matching** | `Matching.jsx` | Перетащить элементы из левой колонки к соответствующим в правой | Связывание концепций: команда-описание, термин-определение |
242
+ | **Drag-to-Order** | `DragToOrder.jsx` | Расположить элементы в правильном порядке перетаскиванием | Последовательности действий, приоритеты, этапы процессов |
243
+ | **Command Builder** | `CommandBuilder.jsx` | Собрать команду из отдельных частей (флаги, аргументы) | CLI-инструменты, SQL-запросы, API-вызовы |
244
+ | **Scenario Game** | `ScenarioGame.jsx` | Прочитать ситуацию и выбрать действие из нескольких вариантов | Принятие решений, troubleshooting, best practices |
245
+
246
+ ### 3.2. Конфигурация маппинга контент-тип -> упражнение
247
+
248
+ В модуле `02-course-structure.md` определена логика выбора типа упражнения в зависимости от типа контента:
249
+
250
+ ```
251
+ Тип контента Рекомендуемый тип упражнения
252
+ ---------------------------------------------------------
253
+ Определения, термины -> Flashcards, Quiz
254
+ CLI-команды -> CommandBuilder, DragToOrder
255
+ Процессы, workflows -> DragToOrder, ScenarioGame
256
+ Концепции и связи -> Matching, Quiz
257
+ API-справочники -> CommandBuilder, Matching
258
+ Best practices -> ScenarioGame, Quiz
259
+ Troubleshooting -> ScenarioGame
260
+ ```
261
+
262
+ Для изменения маппинга отредактируйте таблицу `## Content-to-Exercise Mapping` в `02-course-structure.md`.
263
+
264
+ ### 3.3. Добавление нового типа упражнения
265
+
266
+ Для добавления кастомного типа упражнения:
267
+
268
+ 1. Создайте файл `references/custom-exercise-type.md` с описанием:
269
+
270
+ ```markdown
271
+ # Custom Exercise Type: CodeEditor
272
+
273
+ ## Description
274
+ Интерактивный редактор кода с проверкой вывода.
275
+
276
+ ## Component Interface
277
+ Props:
278
+ - code: string (начальный код)
279
+ - expectedOutput: string (ожидаемый вывод)
280
+ - language: string (подсветка синтаксиса)
281
+
282
+ ## Data Format
283
+ {
284
+ "type": "code-editor",
285
+ "code": "function hello() {\n // ...\n}",
286
+ "expectedOutput": "Hello, World!",
287
+ "language": "javascript"
288
+ }
289
+
290
+ ## Scoring
291
+ - Correct output: +10 points
292
+ - Partial match: +5 points
293
+ - No match: 0 points
294
+ ```
295
+
296
+ 2. Добавьте тип в маппинг `02-course-structure.md`
297
+ 3. Обновите шаблон компонента в `05-components.md`
298
+
299
+ ### 3.4. Настройка количества упражнений по типу на секцию
300
+
301
+ По умолчанию генератор выбирает типы упражнений автоматически на основе контента. Для принудительного задания пропорций добавьте в вызов `/edu-site` указание:
302
+
303
+ ```
304
+ /edu-site "Git basics" --exercise-mix "quiz:3,flashcards:2,commandbuilder:4,matching:2"
305
+ ```
306
+
307
+ Или отредактируйте параметр `exercise_mix` в `02-course-structure.md`:
308
+
309
+ ```markdown
310
+ ## Exercise Mix (per section)
311
+ - quiz: 30%
312
+ - flashcards: 20%
313
+ - matching: 15%
314
+ - drag-to-order: 10%
315
+ - command-builder: 15%
316
+ - scenario-game: 10%
317
+ ```
318
+
319
+ ---
320
+
321
+ ## 4. Конфигурация языка (ru/en)
322
+
323
+ ### 4.1. Автоопределение языка
324
+
325
+ По умолчанию генератор определяет язык контента автоматически на шаге Content Analysis:
326
+
327
+ - Если входные данные на русском — сайт генерируется на русском
328
+ - Если на английском — на английском
329
+ - Если смешанный — используется преобладающий язык
330
+
331
+ ### 4.2. Принудительная установка языка
332
+
333
+ Для явного указания языка:
334
+
335
+ ```
336
+ /edu-site "Docker basics" --lang ru
337
+ /edu-site "Основы Docker" --lang en
338
+ ```
339
+
340
+ Или в модуле `01-content-analysis.md`:
341
+
342
+ ```markdown
343
+ ## Language Configuration
344
+ - Detection: auto | ru | en
345
+ - Default: auto
346
+ - Fallback: en (if auto-detection fails)
347
+ ```
348
+
349
+ ### 4.3. Локализованные элементы UI
350
+
351
+ В зависимости от выбранного языка меняются:
352
+
353
+ | Элемент | ru | en |
354
+ |---------|----|----|
355
+ | Кнопка "Далее" | "Далее" | "Next" |
356
+ | Прогресс | "Прогресс: 45%" | "Progress: 45%" |
357
+ | Достижения | "Достижения" | "Achievements" |
358
+ | Финальный тест | "Финальный тест" | "Final Test" |
359
+ | Тост уведомление | "Достижение разблокировано!" | "Achievement Unlocked!" |
360
+ | Результаты | "Результаты" | "Results" |
361
+ | Секция завершена | "Секция завершена!" | "Section Complete!" |
362
+ | Очки | "10 очков" | "10 points" |
363
+
364
+ Строки локализации генерируются в `src/data/strings.js` (если используется i18n) или хардкодятся в компонентах (для простых проектов).
365
+
366
+ ---
367
+
368
+ ## 5. Конфигурация Vite
369
+
370
+ ### 5.1. Base path для GitHub Pages
371
+
372
+ Ключевой параметр — `base` в `vite.config.js`. Он определяет префикс URL для всех ресурсов.
373
+
374
+ **Для GitHub Pages (проектный сайт):**
375
+ ```javascript
376
+ // vite.config.js
377
+ import { defineConfig } from 'vite'
378
+ import react from '@vitejs/plugin-react'
379
+ import tailwindcss from '@tailwindcss/vite'
380
+
381
+ export default defineConfig({
382
+ base: '/repository-name/', // <-- имя репозитория
383
+ plugins: [
384
+ react(),
385
+ tailwindcss(),
386
+ ],
387
+ })
388
+ ```
389
+
390
+ **Для GitHub Pages (user site, username.github.io):**
391
+ ```javascript
392
+ export default defineConfig({
393
+ base: '/',
394
+ plugins: [react(), tailwindcss()],
395
+ })
396
+ ```
397
+
398
+ **Для self-hosted (Nginx, Vercel, Netlify):**
399
+ ```javascript
400
+ export default defineConfig({
401
+ base: '/',
402
+ plugins: [react(), tailwindcss()],
403
+ })
404
+ ```
405
+
406
+ ### 5.2. Настройка base path при генерации
407
+
408
+ Генератор спрашивает имя репозитория на шаге Scaffold (Step 4) и автоматически подставляет его в `base`. Если имя не указано, используется `/edu-site/` по умолчанию.
409
+
410
+ Для принудительного задания:
411
+
412
+ ```
413
+ /edu-site "Git basics" --base /my-git-course/
414
+ ```
415
+
416
+ ### 5.3. Дополнительные параметры Vite
417
+
418
+ Для расширенной конфигурации отредактируйте `modules/04-scaffold.md`, секция `## Vite Configuration`:
419
+
420
+ ```javascript
421
+ export default defineConfig({
422
+ base: '/repo-name/',
423
+ plugins: [react(), tailwindcss()],
424
+ build: {
425
+ outDir: 'dist',
426
+ sourcemap: false, // отключить source maps для production
427
+ minify: 'terser', // или 'esbuild' (быстрее)
428
+ chunkSizeWarningLimit: 500, // KB
429
+ },
430
+ server: {
431
+ port: 5173,
432
+ open: true, // автоматически открыть в браузере
433
+ },
434
+ })
435
+ ```
436
+
437
+ ---
438
+
439
+ ## 6. Кастомизация TailwindCSS v4 темы
440
+
441
+ ### 6.1. Основы TailwindCSS v4
442
+
443
+ TailwindCSS v4 использует CSS-first конфигурацию вместо `tailwind.config.js`. Основная конфигурация темы находится в `src/app.css`:
444
+
445
+ ```css
446
+ @import "tailwindcss";
447
+
448
+ @theme {
449
+ --color-primary: #3b82f6;
450
+ --color-primary-dark: #2563eb;
451
+ --color-secondary: #10b981;
452
+ --color-accent: #f59e0b;
453
+ --color-background: #f8fafc;
454
+ --color-surface: #ffffff;
455
+ --color-text: #1e293b;
456
+ --color-text-muted: #64748b;
457
+
458
+ --font-sans: 'Inter', system-ui, sans-serif;
459
+ --font-mono: 'JetBrains Mono', monospace;
460
+
461
+ --radius-card: 0.75rem;
462
+ --radius-button: 0.5rem;
463
+ --radius-badge: 9999px;
464
+
465
+ --shadow-card: 0 1px 3px rgb(0 0 0 / 0.1);
466
+ --shadow-hover: 0 4px 12px rgb(0 0 0 / 0.15);
467
+ }
468
+ ```
469
+
470
+ ### 6.2. Предустановленные палитры
471
+
472
+ Генератор поддерживает несколько предустановленных палитр. Палитра выбирается автоматически на основе контента или указывается явно:
473
+
474
+ | Палитра | Цвета | Когда используется |
475
+ |---------|-------|-------------------|
476
+ | **Tech Blue** | Blue / Slate / Cyan | CLI-инструменты, DevOps, инфраструктура |
477
+ | **Green Learn** | Emerald / Lime / Teal | Общеобразовательные курсы |
478
+ | **Purple Code** | Violet / Indigo / Fuchsia | Программирование, алгоритмы |
479
+ | **Warm Orange** | Amber / Orange / Rose | Бизнес, маркетинг, soft skills |
480
+ | **Dark Mode** | Slate / Zinc + яркие акценты | Любой контент (альтернативная тема) |
481
+
482
+ Для принудительного выбора палитры:
483
+
484
+ ```
485
+ /edu-site "Git basics" --palette tech-blue
486
+ ```
487
+
488
+ ### 6.3. Кастомная палитра
489
+
490
+ Для создания полностью кастомной палитры отредактируйте `@theme` блок в `src/app.css` после генерации или создайте файл `references/custom-theme-palette.md`:
491
+
492
+ ```markdown
493
+ # Custom Theme: Corporate Brand
494
+
495
+ ## Colors
496
+ - primary: #1a365d (brand blue)
497
+ - primary-dark: #0d1b2a
498
+ - secondary: #48bb78 (success green)
499
+ - accent: #ed8936 (orange)
500
+ - background: #f7fafc
501
+ - surface: #ffffff
502
+ - text: #2d3748
503
+ - text-muted: #718096
504
+
505
+ ## Typography
506
+ - sans: 'Roboto', system-ui, sans-serif
507
+ - mono: 'Source Code Pro', monospace
508
+
509
+ ## Radii
510
+ - card: 8px
511
+ - button: 4px
512
+ - badge: 9999px
513
+ ```
514
+
515
+ ### 6.4. Dark mode
516
+
517
+ TailwindCSS v4 поддерживает dark mode через `@variant dark`. Сгенерированный проект включает toggle кнопку в Header, которая переключает `class="dark"` на элементе `<html>`.
518
+
519
+ Для настройки dark mode цветов добавьте в `src/app.css`:
520
+
521
+ ```css
522
+ @variant dark (&:where(.dark, .dark *)) {
523
+ --color-background: #0f172a;
524
+ --color-surface: #1e293b;
525
+ --color-text: #f1f5f9;
526
+ --color-text-muted: #94a3b8;
527
+ }
528
+ ```
529
+
530
+ ---
531
+
532
+ ## 7. Конфигурация Zustand store
533
+
534
+ ### 7.1. Структура store
535
+
536
+ Zustand store сгенерированного проекта управляет следующими состояниями:
537
+
538
+ ```javascript
539
+ // src/store/useStore.js
540
+ import { create } from 'zustand'
541
+ import { persist } from 'zustand/middleware'
542
+
543
+ const useStore = create(
544
+ persist(
545
+ (set, get) => ({
546
+ // Прогресс по секциям
547
+ completedExercises: {}, // { sectionId: Set<exerciseId> }
548
+ sectionProgress: {}, // { sectionId: number (0-100) }
549
+
550
+ // Очки и статистика
551
+ totalPoints: 0,
552
+ streak: 0,
553
+ longestStreak: 0,
554
+
555
+ // Достижения
556
+ unlockedAchievements: [], // [achievementId, ...]
557
+
558
+ // Финальный тест
559
+ finalTestScore: null,
560
+ finalTestAnswers: {},
561
+
562
+ // UI state
563
+ currentSection: null,
564
+ toastQueue: [],
565
+
566
+ // Actions
567
+ completeExercise: (sectionId, exerciseId, points) => { ... },
568
+ unlockAchievement: (achievementId) => { ... },
569
+ submitFinalTest: (answers) => { ... },
570
+ showToast: (message, type) => { ... },
571
+ resetProgress: () => { ... },
572
+ }),
573
+ {
574
+ name: 'edu-site-storage', // ключ localStorage
575
+ version: 1, // версия для миграций
576
+ partialize: (state) => ({
577
+ // Сохраняем только нужное (не UI state)
578
+ completedExercises: state.completedExercises,
579
+ sectionProgress: state.sectionProgress,
580
+ totalPoints: state.totalPoints,
581
+ streak: state.streak,
582
+ longestStreak: state.longestStreak,
583
+ unlockedAchievements: state.unlockedAchievements,
584
+ finalTestScore: state.finalTestScore,
585
+ finalTestAnswers: state.finalTestAnswers,
586
+ }),
587
+ }
588
+ )
589
+ )
590
+ ```
591
+
592
+ ### 7.2. Persist middleware
593
+
594
+ По умолчанию store сохраняется в `localStorage` через Zustand persist middleware. Ключевые настройки:
595
+
596
+ | Параметр | Значение | Описание |
597
+ |----------|---------|----------|
598
+ | `name` | `'edu-site-storage'` | Ключ в localStorage |
599
+ | `version` | `1` | Версия хранилища (для миграций) |
600
+ | `partialize` | Функция фильтрации | Исключает временные UI-данные |
601
+
602
+ ### 7.3. Миграции при обновлении версии store
603
+
604
+ Если вы изменяете структуру store, увеличьте `version` и добавьте миграцию:
605
+
606
+ ```javascript
607
+ persist(
608
+ (set) => ({ /* ... */ }),
609
+ {
610
+ name: 'edu-site-storage',
611
+ version: 2, // увеличено с 1
612
+ migrate: (persistedState, version) => {
613
+ if (version === 1) {
614
+ // Миграция с v1 на v2: добавить новое поле
615
+ persistedState.favoriteExercises = []
616
+ }
617
+ return persistedState
618
+ },
619
+ }
620
+ )
621
+ ```
622
+
623
+ ### 7.4. Отключение persist (для тестирования)
624
+
625
+ Для отключения сохранения прогресса (например, при разработке):
626
+
627
+ ```javascript
628
+ // Замените persist на простой create
629
+ const useStore = create((set) => ({
630
+ // ... без обёртки persist
631
+ }))
632
+ ```
633
+
634
+ ---
635
+
636
+ ## 8. Конфигурация системы достижений
637
+
638
+ ### 8.1. Структура достижения
639
+
640
+ Каждое достижение определяется в `src/data/achievements.js`:
641
+
642
+ ```javascript
643
+ export const achievements = [
644
+ {
645
+ id: 'first-exercise',
646
+ title: 'First Step',
647
+ description: 'Complete your first exercise',
648
+ icon: 'rocket', // имя иконки (emoji или SVG)
649
+ criteria: {
650
+ type: 'exercise_count', // тип критерия
651
+ count: 1, // порог
652
+ },
653
+ points: 50, // бонусные очки за разблокировку
654
+ rarity: 'common', // common | uncommon | rare | epic | legendary
655
+ },
656
+ {
657
+ id: 'perfect-section',
658
+ title: 'Perfectionist',
659
+ description: 'Complete all exercises in a section with 100% accuracy',
660
+ icon: 'star',
661
+ criteria: {
662
+ type: 'section_perfect',
663
+ sectionId: null, // null = любая секция
664
+ },
665
+ points: 100,
666
+ rarity: 'rare',
667
+ },
668
+ // ...
669
+ ]
670
+ ```
671
+
672
+ ### 8.2. Типы критериев достижений
673
+
674
+ | Тип критерия | Описание | Параметры |
675
+ |-------------|---------|-----------|
676
+ | `exercise_count` | Выполнить N упражнений | `count: number` |
677
+ | `section_complete` | Завершить секцию | `sectionId: string | null` |
678
+ | `section_perfect` | 100% точность в секции | `sectionId: string | null` |
679
+ | `streak` | Серия правильных ответов | `count: number` |
680
+ | `points_total` | Набрать N очков | `count: number` |
681
+ | `all_sections` | Завершить все секции | (нет параметров) |
682
+ | `final_test_pass` | Сдать финальный тест | `minScore: number (0-100)` |
683
+ | `final_test_perfect` | 100% на финальном тесте | (нет параметров) |
684
+ | `exercise_type_master` | Выполнить N упражнений одного типа | `type: string, count: number` |
685
+ | `speed_run` | Завершить секцию за N минут | `sectionId: string, minutes: number` |
686
+
687
+ ### 8.3. Настройка количества достижений
688
+
689
+ По умолчанию генератор создаёт 10-15 достижений. Для изменения:
690
+
691
+ ```
692
+ /edu-site "Git basics" --achievements 20
693
+ ```
694
+
695
+ Или в `modules/06-gamification.md`:
696
+
697
+ ```markdown
698
+ ## Achievement Count
699
+ - Minimum: 8
700
+ - Default: 12
701
+ - Maximum: 25
702
+
703
+ ## Distribution by Rarity
704
+ - common: 40%
705
+ - uncommon: 25%
706
+ - rare: 20%
707
+ - epic: 10%
708
+ - legendary: 5%
709
+ ```
710
+
711
+ ### 8.4. Toast-уведомления при разблокировке
712
+
713
+ При разблокировке достижения показывается toast-уведомление через компонент `AchievementPopup`:
714
+
715
+ ```javascript
716
+ // Zustand action
717
+ unlockAchievement: (achievementId) => {
718
+ const state = get()
719
+ if (state.unlockedAchievements.includes(achievementId)) return
720
+ const achievement = achievements.find(a => a.id === achievementId)
721
+ set({
722
+ unlockedAchievements: [...state.unlockedAchievements, achievementId],
723
+ totalPoints: state.totalPoints + achievement.points,
724
+ })
725
+ get().showToast(`Achievement Unlocked: ${achievement.title}!`, 'achievement')
726
+ }
727
+ ```
728
+
729
+ ---
730
+
731
+ ## 9. Конфигурация финального теста
732
+
733
+ ### 9.1. Структура финального теста
734
+
735
+ Финальный тест состоит из вопросов, сгенерированных из всех секций курса. Данные хранятся в `src/data/quizQuestions.js`:
736
+
737
+ ```javascript
738
+ export const quizQuestions = [
739
+ {
740
+ id: 'q1',
741
+ sectionId: 'getting-started', // из какой секции
742
+ question: 'What command initializes a new Git repository?',
743
+ options: ['git init', 'git start', 'git new', 'git create'],
744
+ correctAnswer: 0, // индекс правильного ответа
745
+ explanation: 'git init creates a new .git directory...',
746
+ },
747
+ // ...
748
+ ]
749
+ ```
750
+
751
+ ### 9.2. Количество вопросов
752
+
753
+ По умолчанию из каждой секции берётся 3-5 вопросов. Настройка:
754
+
755
+ | Параметр | Значение | Описание |
756
+ |----------|---------|----------|
757
+ | `questions_per_section` | 3-5 | Количество вопросов на секцию |
758
+ | `total_questions` | 15-30 | Общее число вопросов (зависит от секций) |
759
+ | `randomize` | `true` | Перемешивать порядок вопросов |
760
+
761
+ ### 9.3. Порог прохождения
762
+
763
+ ```markdown
764
+ ## Passing Threshold
765
+ - Default: 70%
766
+ - Configurable: 50% - 100%
767
+ - Display: percentage + letter grade (A/B/C/D/F)
768
+ ```
769
+
770
+ Для изменения порога отредактируйте `modules/06-gamification.md`:
771
+
772
+ ```markdown
773
+ ## Final Test
774
+ - Passing score: 70%
775
+ - Grade thresholds:
776
+ - A: >= 90%
777
+ - B: >= 80%
778
+ - C: >= 70%
779
+ - D: >= 60%
780
+ - F: < 60%
781
+ ```
782
+
783
+ ### 9.4. Повторное прохождение
784
+
785
+ По умолчанию финальный тест можно пересдать неограниченное количество раз. Каждая попытка перезаписывает предыдущий результат в Zustand store.
786
+
787
+ ---
788
+
789
+ ## 10. SEO-конфигурация
790
+
791
+ ### 10.1. Open Graph теги
792
+
793
+ Сгенерированный `index.html` включает OG-теги для корректного отображения в соцсетях:
794
+
795
+ ```html
796
+ <meta property="og:title" content="Learn Git Basics - Interactive Course" />
797
+ <meta property="og:description" content="Master Git fundamentals with interactive exercises..." />
798
+ <meta property="og:type" content="website" />
799
+ <meta property="og:url" content="https://username.github.io/repo/" />
800
+ <meta property="og:image" content="https://username.github.io/repo/og-image.png" />
801
+ ```
802
+
803
+ ### 10.2. JSON-LD структурированные данные
804
+
805
+ Для поисковых систем генерируется JSON-LD разметка:
806
+
807
+ ```html
808
+ <script type="application/ld+json">
809
+ {
810
+ "@context": "https://schema.org",
811
+ "@type": "Course",
812
+ "name": "Learn Git Basics",
813
+ "description": "Interactive course on Git fundamentals",
814
+ "provider": {
815
+ "@type": "Organization",
816
+ "name": "Edu-Site Generator"
817
+ },
818
+ "hasCourseInstance": {
819
+ "@type": "CourseInstance",
820
+ "courseMode": "online",
821
+ "courseWorkload": "PT2H"
822
+ }
823
+ }
824
+ </script>
825
+ ```
826
+
827
+ ### 10.3. Настройка SEO-параметров
828
+
829
+ В модуле `04-scaffold.md` секция `## SEO Configuration`:
830
+
831
+ ```markdown
832
+ ## SEO Configuration
833
+ - og:title: auto-generated from course title
834
+ - og:description: auto-generated from course description (first 160 chars)
835
+ - og:image: placeholder or custom URL
836
+ - JSON-LD: Course schema
837
+ - lang attribute: auto-detected (ru/en)
838
+ - viewport: responsive
839
+ ```
840
+
841
+ ---
842
+
843
+ ## 11. Оптимизация производительности
844
+
845
+ ### 11.1. Code splitting (React.lazy)
846
+
847
+ Сгенерированный проект использует `React.lazy` для ленивой загрузки страниц:
848
+
849
+ ```javascript
850
+ // src/App.jsx
851
+ import { lazy, Suspense } from 'react'
852
+
853
+ const HomePage = lazy(() => import('./pages/HomePage'))
854
+ const SectionPage = lazy(() => import('./pages/SectionPage'))
855
+ const FinalTestPage = lazy(() => import('./pages/FinalTestPage'))
856
+ const ResultsPage = lazy(() => import('./pages/ResultsPage'))
857
+
858
+ function App() {
859
+ return (
860
+ <Suspense fallback={<div>Loading...</div>}>
861
+ {/* routes */}
862
+ </Suspense>
863
+ )
864
+ }
865
+ ```
866
+
867
+ ### 11.2. Lazy loading компонентов упражнений
868
+
869
+ Интерактивные компоненты упражнений загружаются лениво при первом использовании:
870
+
871
+ ```javascript
872
+ // src/components/interactive/index.js
873
+ export const Quiz = lazy(() => import('./Quiz'))
874
+ export const Flashcards = lazy(() => import('./Flashcards'))
875
+ export const Matching = lazy(() => import('./Matching'))
876
+ export const DragToOrder = lazy(() => import('./DragToOrder'))
877
+ export const CommandBuilder = lazy(() => import('./CommandBuilder'))
878
+ export const ScenarioGame = lazy(() => import('./ScenarioGame'))
879
+ ```
880
+
881
+ ### 11.3. Размер бандла
882
+
883
+ Ожидаемый размер production бандла:
884
+
885
+ | Компонент | Размер (gzip) |
886
+ |-----------|--------------|
887
+ | React + React DOM | ~45 KB |
888
+ | Zustand | ~1 KB |
889
+ | TailwindCSS (only used classes) | ~10-30 KB |
890
+ | Код приложения | ~20-50 KB |
891
+ | Данные (sections, exercises, etc.) | ~5-30 KB |
892
+ | **Итого** | **~80-160 KB** |
893
+
894
+ ### 11.4. Рекомендации по контенту
895
+
896
+ | Параметр | Рекомендация | Обоснование |
897
+ |----------|-------------|-------------|
898
+ | Максимум секций | 8-10 | Больше секций замедляют загрузку данных |
899
+ | Упражнений на секцию | 3-5 | Баланс между полнотой и размером данных |
900
+ | Изображения | Избегать больших изображений | SPA без сервера — всё в бандле |
901
+ | Длина описаний | До 200 символов | Компактные тексты быстрее рендерятся |