@dzhechkov/keysarium 1.4.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 (79) hide show
  1. package/README.md +50 -3
  2. package/bin/cli.js +0 -0
  3. package/package.json +5 -3
  4. package/templates/.claude/commands/analyst-manual.md +38 -0
  5. package/templates/.claude/commands/casarium.md +55 -4
  6. package/templates/.claude/commands/feature-adr.md +8 -0
  7. package/templates/.claude/rules/trust-tiers.md +5 -0
  8. package/templates/.claude/shards/feature-adr.shard.md +64 -10
  9. package/templates/.claude/shards/phase-ai-factory.shard.md +109 -0
  10. package/templates/.claude/skills/ai-factory-mapper/README.md +90 -0
  11. package/templates/.claude/skills/ai-factory-mapper/SKILL.md +309 -0
  12. package/templates/.claude/skills/ai-factory-mapper/assets/report-template.md +123 -0
  13. package/templates/.claude/skills/ai-factory-mapper/references/catalog.md +230 -0
  14. package/templates/.claude/skills/ai-factory-mapper/references/coverage-formula.md +219 -0
  15. package/templates/.claude/skills/ai-factory-mapper/references/decomposition-checklist.md +183 -0
  16. package/templates/.claude/skills/ai-factory-mapper/references/pattern-library.md +312 -0
  17. package/templates/.claude/skills/ai-factory-mapper/scripts/build_docx_report.js +423 -0
  18. package/templates/.claude/skills/analyst-manual-full/SKILL.md +286 -0
  19. package/templates/.claude/skills/edu-site-generator/SKILL.md +254 -0
  20. package/templates/.claude/skills/edu-site-generator/examples/sample-course-structure.md +116 -0
  21. package/templates/.claude/skills/edu-site-generator/modules/00-content-analysis.md +84 -0
  22. package/templates/.claude/skills/edu-site-generator/modules/01-course-structure.md +75 -0
  23. package/templates/.claude/skills/edu-site-generator/modules/02-data-generation.md +186 -0
  24. package/templates/.claude/skills/edu-site-generator/modules/03-scaffold.md +249 -0
  25. package/templates/.claude/skills/edu-site-generator/modules/04-components.md +130 -0
  26. package/templates/.claude/skills/edu-site-generator/modules/05-gamification.md +163 -0
  27. package/templates/.claude/skills/edu-site-generator/modules/06-deploy.md +88 -0
  28. package/templates/.claude/skills/edu-site-generator/modules/07-verification.md +97 -0
  29. package/templates/.claude/skills/edu-site-generator/references/component-templates.md +436 -0
  30. package/templates/.claude/skills/edu-site-generator/references/data-schemas.md +164 -0
  31. package/templates/.claude/skills/edu-site-generator/references/exercise-catalog.md +110 -0
  32. package/templates/.claude/skills/edu-site-generator/references/tech-stack.md +69 -0
  33. package/templates/.claude/skills/feature-adr/SKILL.md +245 -59
  34. package/templates/.claude/skills/feature-adr/modules/03-adr.md +43 -0
  35. package/templates/.claude/skills/feature-adr/modules/03.5-ideation-swarm.md +180 -0
  36. package/templates/.claude/skills/feature-adr/modules/06-implementation-plan.md +56 -7
  37. package/templates/.claude/skills/feature-adr/modules/08-qe.md +87 -23
  38. package/templates/.claude/skills/feature-adr/modules/09-fleet-qe.md +305 -0
  39. package/templates/.claude/skills/feature-adr/references/agentic-qe/README.md +143 -0
  40. package/templates/.claude/skills/feature-adr/references/agentic-qe/brutal-honesty-review.md +240 -0
  41. package/templates/.claude/skills/feature-adr/references/agentic-qe/chaos-engineering-resilience.md +163 -0
  42. package/templates/.claude/skills/feature-adr/references/agentic-qe/code-goal-planner.md +446 -0
  43. package/templates/.claude/skills/feature-adr/references/agentic-qe/enterprise-integration-testing.md +111 -0
  44. package/templates/.claude/skills/feature-adr/references/agentic-qe/mutation-testing.md +236 -0
  45. package/templates/.claude/skills/feature-adr/references/agentic-qe/performance-testing.md +315 -0
  46. package/templates/.claude/skills/feature-adr/references/agentic-qe/qcsd-ideation-swarm.md +126 -0
  47. package/templates/.claude/skills/feature-adr/references/agentic-qe/qcsd-production-swarm.md +108 -0
  48. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-coverage-analysis.md +193 -0
  49. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-requirements-validation.md +254 -0
  50. package/templates/.claude/skills/feature-adr/references/agentic-qe/regression-testing.md +233 -0
  51. package/templates/.claude/skills/feature-adr/references/agentic-qe/risk-based-testing.md +212 -0
  52. package/templates/.claude/skills/feature-adr/references/agentic-qe/security-testing.md +311 -0
  53. package/templates/.claude/skills/feature-adr/references/agentic-qe/shift-left-testing.md +231 -0
  54. package/templates/.claude/skills/feature-adr/references/agentic-qe/tdd-london-chicago.md +249 -0
  55. package/templates/.claude/skills/transcript-site-generator/SKILL.md +287 -0
  56. package/templates/.claude/skills/transcript-site-generator/examples/sample-text-only-site.md +123 -0
  57. package/templates/.claude/skills/transcript-site-generator/examples/sample-transcript-site.md +134 -0
  58. package/templates/.claude/skills/transcript-site-generator/modules/00-input-analysis.md +132 -0
  59. package/templates/.claude/skills/transcript-site-generator/modules/01-content-parsing.md +117 -0
  60. package/templates/.claude/skills/transcript-site-generator/modules/02-site-generation.md +293 -0
  61. package/templates/.claude/skills/transcript-site-generator/modules/03-interactivity.md +406 -0
  62. package/templates/.claude/skills/transcript-site-generator/modules/04-deploy.md +130 -0
  63. package/templates/.claude/skills/transcript-site-generator/modules/05-verification.md +155 -0
  64. package/templates/.claude/skills/transcript-site-generator/references/component-catalog.md +86 -0
  65. package/templates/.claude/skills/transcript-site-generator/references/data-schemas.md +123 -0
  66. package/templates/.claude/skills/transcript-site-generator/references/tech-stack.md +132 -0
  67. package/templates/CLAUDE.md +9 -2
  68. package/templates/docs/edu-site-generator/01-deployment-guide.md +911 -0
  69. package/templates/docs/edu-site-generator/02-admin-guide.md +901 -0
  70. package/templates/docs/edu-site-generator/03-user-guide.md +1008 -0
  71. package/templates/docs/edu-site-generator/04-infrastructure-requirements.md +489 -0
  72. package/templates/docs/edu-site-generator/05-architecture.md +902 -0
  73. package/templates/docs/edu-site-generator/06-user-flows.md +759 -0
  74. package/templates/docs/transcript-site-generator/01-deployment-guide.md +1042 -0
  75. package/templates/docs/transcript-site-generator/02-admin-guide.md +918 -0
  76. package/templates/docs/transcript-site-generator/03-user-guide.md +925 -0
  77. package/templates/docs/transcript-site-generator/04-infrastructure-requirements.md +482 -0
  78. package/templates/docs/transcript-site-generator/05-architecture.md +1068 -0
  79. package/templates/docs/transcript-site-generator/06-user-flows.md +855 -0
@@ -0,0 +1,84 @@
1
+ # Step 0: Content Analysis
2
+
3
+ ## Goal
4
+ Parse source documentation and extract distinct teachable topics.
5
+
6
+ ## Protocol
7
+
8
+ 1. **Identify input type:**
9
+ - URL(s) → use WebFetch to retrieve content
10
+ - Local path(s) → use Read tool
11
+ - Pasted text → use directly
12
+ - Topic description → generate content from knowledge
13
+
14
+ 2. **Extract topics:**
15
+ - Read through all source material
16
+ - Identify distinct concepts/practices/techniques
17
+ - Group related content into logical units
18
+ - Each unit = one potential section
19
+
20
+ 3. **For each topic, capture:**
21
+ - Title (concise, 3-8 words)
22
+ - Description (1 sentence)
23
+ - Key concepts (3-5 bullet points)
24
+ - Practical value (why learn this?)
25
+ - Content depth estimate (shallow/medium/deep)
26
+
27
+ 4. **Determine language:**
28
+ - Auto-detect from source content
29
+ - If mixed, ask user preference
30
+ - All UI text must match chosen language
31
+
32
+ 5. **Estimate scope:**
33
+ - Count topics → section count
34
+ - If < 3: warn user, suggest adding more content
35
+ - If > 20: suggest grouping or splitting into multiple courses
36
+ - Sweet spot: 5-15 sections
37
+
38
+ ## Output Format
39
+
40
+ ```javascript
41
+ // Topic analysis result
42
+ {
43
+ language: 'ru' | 'en',
44
+ courseTitle: 'string',
45
+ courseDescription: 'string',
46
+ topics: [
47
+ {
48
+ title: 'string',
49
+ description: 'string',
50
+ keyConcepts: ['string'],
51
+ depth: 'shallow' | 'medium' | 'deep',
52
+ suggestedExercise: 'quiz' | 'flashcards' | 'matching' | 'drag-order' | 'builder' | 'scenario'
53
+ }
54
+ ]
55
+ }
56
+ ```
57
+
58
+ ## Exercise Type Heuristics
59
+
60
+ | Content Nature | Best Exercise Type | `interactiveType` value |
61
+ |---------------|-------------------|------------------------|
62
+ | Definitions, terms, concepts | Flashcards | `'flashcards'` |
63
+ | Comparisons, mappings, associations | Matching | `'matching'` |
64
+ | Factual knowledge, best practices | Quiz | `'quiz'` |
65
+ | Sequential processes, ordered steps | Drag-to-Order | `'drag-and-drop'` |
66
+ | Command syntax, API calls | Command Builder | `'builder'` |
67
+ | Decision-making, workflows | Scenario Game | `'scenario'` |
68
+
69
+ **IMPORTANT:** Use ONLY these exact `interactiveType` values. Do NOT use `'drag-order'`, `'ordering'`, or `'simulation'` — they are legacy aliases.
70
+
71
+ ## Checkpoint
72
+
73
+ ```
74
+ Step 0/7: Content Analysis Complete
75
+ Topics: N identified
76
+ Language: {language}
77
+ Course: "{courseTitle}"
78
+
79
+ Topic list:
80
+ 1. {title} — {suggestedExercise}
81
+ ...
82
+
83
+ "ok" to continue | "[feedback]" to adjust
84
+ ```
@@ -0,0 +1,75 @@
1
+ # Step 1: Course Structure
2
+
3
+ ## Goal
4
+ Transform analyzed topics into a structured course with section definitions and exercise assignments.
5
+
6
+ ## Protocol
7
+
8
+ 1. **Order sections** from foundational to advanced:
9
+ - Basic concepts first
10
+ - Build on prior knowledge
11
+ - End with synthesis/integration topics
12
+
13
+ 2. **Assign exercise types** per section:
14
+ - Read `references/exercise-catalog.md` for guidance
15
+ - Vary types to avoid monotony (no 3+ consecutive same type)
16
+ - Match exercise to content nature (see heuristics in Step 0)
17
+ - Each of the 6 types should appear at least once if section count >= 6
18
+
19
+ 3. **Write theory text** per section:
20
+ - 150-400 words per section
21
+ - Structure: context -> core concept -> practical application
22
+ - Use newlines for paragraph separation
23
+ - Include **bold** for key terms
24
+ - Keep language consistent with source material
25
+
26
+ 4. **Assign icons** (emoji) per section:
27
+ - Relevant to the topic
28
+ - Distinct across sections (no duplicates)
29
+
30
+ 5. **Define section metadata:**
31
+ ```javascript
32
+ {
33
+ id: 'kebab-case-unique', // 2-4 words, descriptive
34
+ order: 1, // Sequential from 1
35
+ title: 'N. Full Title', // With order number prefix
36
+ shortTitle: 'Short Name', // For sidebar (2-3 words)
37
+ description: 'One-line summary of this section',
38
+ icon: 'emoji',
39
+ interactiveType: 'quiz' | 'flashcards' | 'matching' | 'drag-and-drop' | 'builder' | 'simulation' | 'scenario',
40
+ theory: 'Multi-paragraph theory text...'
41
+ }
42
+ ```
43
+
44
+ 6. **Define final test questions:**
45
+ - One question per section (for final assessment)
46
+ - 4 options each, one correct
47
+ - Test understanding, not memorization
48
+
49
+ ## Constraints
50
+
51
+ - Minimum 3 sections, maximum 20
52
+ - Each section must have exactly 1 exercise type
53
+ - `interactiveType` must be one of the 6 supported types:
54
+ - `'quiz'` -> Quiz component
55
+ - `'flashcards'` -> Flashcard component
56
+ - `'matching'` -> MatchingExercise component
57
+ - `'drag-and-drop'` or `'ordering'` -> DragOrder component
58
+ - `'builder'` -> CommandBuilder component
59
+ - `'simulation'` or `'scenario'` -> ScenarioGame component
60
+
61
+ ## Output
62
+
63
+ Section definitions ready for `sections.js` generation in Step 2.
64
+
65
+ ## Checkpoint
66
+
67
+ ```
68
+ Step 1/7: Course Structure Complete
69
+ Sections: N defined
70
+
71
+ 1. {icon} {title} — {interactiveType}
72
+ 2. ...
73
+
74
+ "ok" to continue | "[feedback]" to adjust
75
+ ```
@@ -0,0 +1,186 @@
1
+ # Step 2: Data Generation
2
+
3
+ ## Goal
4
+ Generate all data files (`sections.js`, `exercises.js`, `quizQuestions.js`, `achievements.js`) from the course structure.
5
+
6
+ ## Protocol
7
+
8
+ Read `references/data-schemas.md` for exact data formats.
9
+
10
+ ### 1. Generate `src/data/sections.js`
11
+
12
+ ```javascript
13
+ export const SECTIONS = [
14
+ {
15
+ id: 'section-id',
16
+ order: 1,
17
+ title: '1. Section Title',
18
+ shortTitle: 'Short Title',
19
+ description: 'Description',
20
+ icon: 'emoji',
21
+ interactiveType: 'type',
22
+ theory: `Theory text with **bold** and paragraphs separated by \\n\\n`
23
+ },
24
+ // ... one per section
25
+ ]
26
+
27
+ export const TOTAL_SECTIONS = SECTIONS.length
28
+ ```
29
+
30
+ ### 2. Generate `src/data/exercises.js`
31
+
32
+ For each section, generate exercise data matching its type:
33
+
34
+ **Flashcards:**
35
+ ```javascript
36
+ export const flashcardData = {
37
+ 'section-id': [
38
+ { front: 'Term or question', back: 'Definition or answer' },
39
+ // 4-8 cards per section
40
+ ]
41
+ }
42
+ ```
43
+
44
+ **Matching:**
45
+ ```javascript
46
+ export const matchingData = {
47
+ 'section-id': [
48
+ { left: 'Item A', right: 'Match A' },
49
+ // 4-6 pairs per section
50
+ ]
51
+ }
52
+ ```
53
+
54
+ **Drag Order:**
55
+ ```javascript
56
+ export const dragOrderData = {
57
+ 'section-id': {
58
+ instruction: 'Arrange these in correct order:',
59
+ items: [{ id: '1', label: 'Step 1' }, ...],
60
+ correctOrder: ['1', '2', '3', ...]
61
+ }
62
+ }
63
+ // Also export as orderingData if section uses 'ordering' type
64
+ ```
65
+
66
+ **Command Builder:**
67
+ ```javascript
68
+ export const commandBuilderData = {
69
+ 'section-id': {
70
+ instruction: 'Build the correct command:',
71
+ parts: ['part1', ' ', 'part2', ...],
72
+ correctCommand: 'part1 part2...',
73
+ hints: ['Hint for first part', 'Hint for second part']
74
+ }
75
+ }
76
+ ```
77
+
78
+ **Scenario/Simulation:**
79
+ ```javascript
80
+ export const simulationData = {
81
+ 'section-id': {
82
+ title: 'Scenario Title',
83
+ scenario: 'Context description',
84
+ steps: [
85
+ {
86
+ id: 'step1',
87
+ description: 'What do you do?',
88
+ options: [
89
+ { id: 'a', text: 'Good choice', result: 'positive', feedback: 'Why this is good' },
90
+ { id: 'b', text: 'OK choice', result: 'neutral', feedback: 'Why this is OK' },
91
+ { id: 'c', text: 'Bad choice', result: 'negative', feedback: 'Why this is bad' }
92
+ ]
93
+ },
94
+ // 3-5 steps per scenario
95
+ ]
96
+ }
97
+ }
98
+ // Also export as scenarioData for 'scenario' type sections
99
+ ```
100
+
101
+ **FAQ:**
102
+ ```javascript
103
+ export const faqData = [
104
+ { question: 'Frequently asked question?', answer: 'Detailed answer.' },
105
+ // 5-8 FAQ items about the course topic
106
+ ]
107
+ ```
108
+
109
+ ### 3. Generate `src/data/quizQuestions.js`
110
+
111
+ **Per-section quizzes** (for sections with `interactiveType: 'quiz'`):
112
+ ```javascript
113
+ export const quizQuestions = {
114
+ 'section-id': [
115
+ {
116
+ id: 'section-id-q1',
117
+ question: 'Question text?',
118
+ options: ['Option A', 'Option B', 'Option C', 'Option D'],
119
+ correctAnswer: 0, // index
120
+ explanation: 'Why this is correct'
121
+ },
122
+ // 2-4 questions per section
123
+ ]
124
+ }
125
+ ```
126
+
127
+ **Final test** (one question per section):
128
+ ```javascript
129
+ export const finalTestQuestions = [
130
+ {
131
+ id: 'final-section-id',
132
+ sectionId: 'section-id',
133
+ question: 'Comprehensive question about this section?',
134
+ options: ['A', 'B', 'C', 'D'],
135
+ correctAnswer: 1
136
+ },
137
+ // one per section
138
+ ]
139
+ ```
140
+
141
+ ### 4. Generate `src/data/achievements.js`
142
+
143
+ Standard achievement set (adapted to section count N):
144
+
145
+ ```javascript
146
+ export const ACHIEVEMENTS = [
147
+ {
148
+ id: 'first-step',
149
+ title: 'First Step', // Localized
150
+ description: 'Complete your first section',
151
+ icon: 'emoji',
152
+ condition: (state) => Object.keys(state.completedSections).length >= 1
153
+ },
154
+ // Halfway achievement (N/2 sections)
155
+ // Perfectionist (any section 100%)
156
+ // Full course (all N sections)
157
+ // Test passed (final test >= 70%)
158
+ // 3-5 topic-specific achievements
159
+ ]
160
+ ```
161
+
162
+ **Achievement guidelines:**
163
+ - Always include: first-step, halfway, perfectionist, full-course, test-passed
164
+ - Add 3-5 topic-specific achievements based on related section groups
165
+ - Total: 8-12 achievements
166
+ - Icons should be distinct and relevant
167
+
168
+ ## Quality Checks
169
+
170
+ - [ ] Every section in SECTIONS has matching exercise data
171
+ - [ ] Every quiz section has questions in quizQuestions
172
+ - [ ] finalTestQuestions has exactly one entry per section
173
+ - [ ] All IDs are unique and kebab-case
174
+ - [ ] correctAnswer indices are within options array bounds
175
+ - [ ] No duplicate FAQ questions
176
+ - [ ] Achievement conditions reference valid state properties
177
+
178
+ ## Checkpoint
179
+
180
+ ```
181
+ Step 2/7: Data Generation Complete
182
+ Files: sections.js, exercises.js, quizQuestions.js, achievements.js
183
+ Sections: N | Quiz questions: M | Final test: N questions | Achievements: K
184
+
185
+ "ok" to continue | "[feedback]" to adjust
186
+ ```
@@ -0,0 +1,249 @@
1
+ # Step 3: Project Scaffold
2
+
3
+ ## Goal
4
+ Create the project skeleton: package.json, vite config, index.html, CSS theme, ESLint.
5
+
6
+ ## Protocol
7
+
8
+ Read `references/tech-stack.md` for versions and configuration.
9
+
10
+ ### 1. Determine `base` path
11
+
12
+ ```javascript
13
+ // Derive from git remote URL
14
+ // git remote get-url origin → https://github.com/{user}/{repo}.git
15
+ // base = '/{repo}/'
16
+ ```
17
+
18
+ If no git remote, ask user for the GitHub repo name.
19
+
20
+ ### 2. Create `package.json`
21
+
22
+ ```json
23
+ {
24
+ "name": "{repo-name}",
25
+ "private": true,
26
+ "version": "0.0.0",
27
+ "type": "module",
28
+ "scripts": {
29
+ "dev": "vite",
30
+ "build": "vite build",
31
+ "lint": "eslint .",
32
+ "preview": "vite preview"
33
+ },
34
+ "dependencies": {
35
+ "react": "^19.2.0",
36
+ "react-dom": "^19.2.0",
37
+ "react-router-dom": "^7.13.1",
38
+ "zustand": "^5.0.11",
39
+ "@dnd-kit/core": "^6.3.1",
40
+ "@dnd-kit/sortable": "^10.0.0",
41
+ "@dnd-kit/utilities": "^3.2.2"
42
+ },
43
+ "devDependencies": {
44
+ "vite": "^7.3.1",
45
+ "@vitejs/plugin-react": "^5.1.1",
46
+ "tailwindcss": "^4.2.1",
47
+ "@tailwindcss/vite": "^4.2.1",
48
+ "eslint": "^9.39.1",
49
+ "eslint-plugin-react-hooks": "^7.0.1",
50
+ "eslint-plugin-react-refresh": "^0.4.24",
51
+ "globals": "^16.1.0"
52
+ }
53
+ }
54
+ ```
55
+
56
+ ### 3. Create `vite.config.js`
57
+
58
+ ```javascript
59
+ import { defineConfig } from 'vite'
60
+ import react from '@vitejs/plugin-react'
61
+ import tailwindcss from '@tailwindcss/vite'
62
+
63
+ export default defineConfig({
64
+ plugins: [react(), tailwindcss()],
65
+ base: '/{repo-name}/',
66
+ build: {
67
+ outDir: 'dist',
68
+ },
69
+ })
70
+ ```
71
+
72
+ ### 4. Create `index.html`
73
+
74
+ - `lang` attribute matches course language
75
+ - Title = course title
76
+ - SEO meta tags: description, keywords, author
77
+ - Open Graph tags: title, description, type, url, image
78
+ - Twitter Card meta
79
+ - JSON-LD structured data (Course type)
80
+ - Favicon (optional)
81
+ - `<div id="root"></div>`
82
+ - `<script type="module" src="/src/main.jsx"></script>`
83
+
84
+ ### 5. Create `public/robots.txt`
85
+
86
+ ```
87
+ User-agent: *
88
+ Allow: /
89
+ Sitemap: https://{user}.github.io/{repo-name}/sitemap.xml
90
+ ```
91
+
92
+ Replace `{user}` and `{repo-name}` with actual GitHub username and repository name.
93
+
94
+ ### 6. Create `public/sitemap.xml`
95
+
96
+ Generate a sitemap listing all course sections:
97
+
98
+ ```xml
99
+ <?xml version="1.0" encoding="UTF-8"?>
100
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
101
+ <url>
102
+ <loc>https://{user}.github.io/{repo-name}/</loc>
103
+ <lastmod>{build-date}</lastmod>
104
+ <priority>1.0</priority>
105
+ </url>
106
+ <!-- One <url> entry per section -->
107
+ <url>
108
+ <loc>https://{user}.github.io/{repo-name}/#section-{id}</loc>
109
+ <lastmod>{build-date}</lastmod>
110
+ <priority>0.8</priority>
111
+ </url>
112
+ </urlset>
113
+ ```
114
+
115
+ Use ISO 8601 date format for `{build-date}`. Generate one `<url>` entry for each section in the SECTIONS array.
116
+
117
+ ### 7. Create `src/index.css`
118
+
119
+ TailwindCSS v4 configuration with semantic color tokens:
120
+
121
+ ```css
122
+ @import "tailwindcss";
123
+
124
+ @theme {
125
+ --color-primary-50: #eff6ff;
126
+ --color-primary-100: #dbeafe;
127
+ --color-primary-200: #bfdbfe;
128
+ --color-primary-300: #93c5fd;
129
+ --color-primary-400: #60a5fa;
130
+ --color-primary-500: #3b82f6;
131
+ --color-primary-600: #2563eb;
132
+ --color-primary-700: #1d4ed8;
133
+ --color-primary-800: #1e40af;
134
+ --color-primary-900: #1e3a8a;
135
+
136
+ --color-accent-400: #c084fc;
137
+ --color-accent-500: #a855f7;
138
+ --color-accent-600: #9333ea;
139
+
140
+ --color-success-400: #4ade80;
141
+ --color-success-500: #22c55e;
142
+ --color-success-600: #16a34a;
143
+ --color-success-700: #15803d;
144
+
145
+ --color-danger-400: #f87171;
146
+ --color-danger-500: #ef4444;
147
+ --color-danger-600: #dc2626;
148
+ --color-danger-700: #b91c1c;
149
+
150
+ --color-surface: var(--surface);
151
+ --color-card: var(--card);
152
+ --color-text: var(--text);
153
+ --color-text-secondary: var(--text-secondary);
154
+ --color-text-muted: var(--text-muted);
155
+ --color-border: var(--border);
156
+ --color-border-light: var(--border-light);
157
+ --color-bg-secondary: var(--bg-secondary);
158
+ --color-bg-hover: var(--bg-hover);
159
+ }
160
+
161
+ :root {
162
+ --surface: #f8fafc;
163
+ --card: #ffffff;
164
+ --text: #1e293b;
165
+ --text-secondary: #475569;
166
+ --text-muted: #94a3b8;
167
+ --border: #e2e8f0;
168
+ --border-light: #f1f5f9;
169
+ --bg-secondary: #f1f5f9;
170
+ --bg-hover: #f8fafc;
171
+ }
172
+
173
+ .dark {
174
+ --surface: #0f172a;
175
+ --card: #1e293b;
176
+ --text: #e2e8f0;
177
+ --text-secondary: #94a3b8;
178
+ --text-muted: #64748b;
179
+ --border: #334155;
180
+ --border-light: #1e293b;
181
+ --bg-secondary: #1e293b;
182
+ --bg-hover: #334155;
183
+ }
184
+
185
+ body {
186
+ @apply bg-surface text-text min-h-screen;
187
+ }
188
+
189
+ /* Custom animations */
190
+ @keyframes shake {
191
+ 0%, 100% { transform: translateX(0); }
192
+ 20%, 60% { transform: translateX(-5px); }
193
+ 40%, 80% { transform: translateX(5px); }
194
+ }
195
+ @keyframes bounce-in {
196
+ 0% { transform: scale(0.3); opacity: 0; }
197
+ 50% { transform: scale(1.05); }
198
+ 70% { transform: scale(0.9); }
199
+ 100% { transform: scale(1); opacity: 1; }
200
+ }
201
+ @keyframes fade-in-up {
202
+ from { opacity: 0; transform: translateY(10px); }
203
+ to { opacity: 1; transform: translateY(0); }
204
+ }
205
+
206
+ @utility animate-shake { animation: shake 0.5s ease-in-out; }
207
+ @utility animate-bounce-in { animation: bounce-in 0.5s ease-out; }
208
+ @utility animate-fade-in-up { animation: fade-in-up 0.3s ease-out; }
209
+ ```
210
+
211
+ ### 6. Create `eslint.config.js`
212
+
213
+ Standard React + hooks ESLint config.
214
+
215
+ ### 7. Create `src/main.jsx`
216
+
217
+ ```jsx
218
+ import { StrictMode } from 'react'
219
+ import { createRoot } from 'react-dom/client'
220
+ import './index.css'
221
+ import App from './App.jsx'
222
+
223
+ createRoot(document.getElementById('root')).render(
224
+ <StrictMode>
225
+ <App />
226
+ </StrictMode>,
227
+ )
228
+ ```
229
+
230
+ ### 8. Run `npm install`
231
+
232
+ Install all dependencies.
233
+
234
+ ### 9. Create directory structure
235
+
236
+ ```
237
+ mkdir -p src/{components/{layout,interactive,common,sections,final-test},data,store,hooks,pages}
238
+ ```
239
+
240
+ ## Checkpoint
241
+
242
+ ```
243
+ Step 3/7: Project Scaffold Complete
244
+ Base path: /{repo-name}/
245
+ Dependencies installed: yes
246
+ Files: package.json, vite.config.js, index.html, index.css, main.jsx, eslint.config.js
247
+
248
+ "ok" to continue | "[feedback]" to adjust
249
+ ```