@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,98 @@
1
+ # Quality Gates Reference
2
+
3
+ Gates applied to every candidate finding during the harvest process.
4
+ All 8 gates must be evaluated before a finding can be accepted into the toolkit.
5
+ A gate failure is a hard block unless overridden by the user (see Override Protocol).
6
+
7
+ ## Gate Definitions
8
+
9
+ | Gate | Name | Check | Type | Pass Criteria | Failure Message |
10
+ |------|------|-------|------|---------------|-----------------|
11
+ | G1 | When-To-Use | Finding has a "When to use" section or equivalent guidance | deterministic | Section exists and is non-empty | Missing "When to use" guidance |
12
+ | G2 | When-Not-To-Use | Finding has a "When NOT to use" section or equivalent anti-guidance | deterministic | Section exists and is non-empty | Missing "When NOT to use" guidance |
13
+ | G3 | Decontextualized | No project-specific names, paths, slugs, dates, or hardcoded values remain | semantic | Haiku confirms no project-specific references | Project-specific references remain: {details} |
14
+ | G4 | Concrete Example | At least one concrete usage example is provided | semantic | Haiku confirms example is concrete and actionable | No concrete example provided |
15
+ | G5 | Reusability Threshold | Reusability confidence score meets minimum | deterministic | confidence >= 0.5 | Confidence {score} < 0.5 threshold |
16
+ | G6 | Not Duplicate | Finding is not a duplicate of an existing toolkit entry | deterministic | No existing entry with content similarity > 0.85 | Duplicate of existing entry: {existing_name} |
17
+ | G7 | Maturity Label | Finding has a maturity level assigned | deterministic | maturity field is one of: alpha, beta, stable | Missing maturity label |
18
+ | G8 | Brutal Honesty | Finding survives self-critical review — is it genuinely useful or just noise? | semantic | Haiku confirms finding has genuine reuse value beyond the source project | Fails brutal-honesty review: {reason} |
19
+
20
+ ## Gate Types
21
+
22
+ **Deterministic gates** (G1, G2, G5, G6, G7) are checked by the orchestrator without LLM calls.
23
+ They operate on the structured finding JSON: presence of fields, numeric thresholds, set membership.
24
+
25
+ **Semantic gates** (G3, G4, G8) require a haiku LLM call with a focused single-question prompt.
26
+ The prompt must ask for a binary YES/NO answer plus a short explanation (1-2 sentences max).
27
+ Use haiku — these are high-frequency, pattern-matching evaluations that do not require deep reasoning.
28
+
29
+ ## Pass Assignment (which pass each gate belongs to)
30
+
31
+ Gates are evaluated in two passes to minimize unnecessary LLM cost.
32
+
33
+ ### Pass 1 — Deterministic (zero LLM cost)
34
+
35
+ Run all deterministic gates first. If any deterministic gate fails, reject immediately.
36
+ Do NOT proceed to Pass 2 for a rejected finding.
37
+
38
+ Gates in Pass 1 (in evaluation order):
39
+ 1. G7 — Maturity Label (cheapest check: field presence)
40
+ 2. G5 — Reusability Threshold (numeric comparison)
41
+ 3. G1 — When-To-Use (section presence)
42
+ 4. G2 — When-Not-To-Use (section presence)
43
+ 5. G6 — Not Duplicate (similarity comparison against existing entries)
44
+
45
+ ### Pass 2 — Semantic (haiku LLM calls, parallelizable)
46
+
47
+ Run only after all Pass 1 gates pass.
48
+ Gates G3, G4, G8 may be evaluated in parallel (3 concurrent haiku calls).
49
+
50
+ Gates in Pass 2:
51
+ - G3 — Decontextualized
52
+ - G4 — Concrete Example
53
+ - G8 — Brutal Honesty
54
+
55
+ ## Override Protocol
56
+
57
+ A user may override a gate for a specific finding using the syntax:
58
+
59
+ ```
60
+ пропусти G3 для #X
61
+ ```
62
+
63
+ Where `#X` is the finding number (1-indexed, matching the extraction output list).
64
+
65
+ ### Override Rules
66
+
67
+ - Multiple gates may be overridden in a single command using comma-separated syntax: `"пропусти G3,G4 для #14"`.
68
+ - G8 (Brutal Honesty) cannot be overridden. If a finding fails G8, it must be revised or dropped.
69
+ - G6 (Not Duplicate) cannot be overridden. If a finding is a duplicate, either update the existing entry or drop the new one.
70
+ - G5 (Reusability Threshold) can be overridden only if the user provides a rationale explaining why low-confidence is acceptable for this finding.
71
+ - All overrides are logged in the harvest output with the gate ID, finding number, and user rationale.
72
+
73
+ ### Override Log Format
74
+
75
+ When an override is applied, append to the harvest session log:
76
+
77
+ ```
78
+ OVERRIDE: G{N} skipped for finding #{X} — user rationale: "{rationale}"
79
+ ```
80
+
81
+ ## Scoring
82
+
83
+ After all gates are evaluated for a finding:
84
+
85
+ ```
86
+ gate_pass_rate = gates_passed / 8
87
+ ```
88
+
89
+ This score is recorded in the finding's metadata alongside the per-gate pass/fail results.
90
+
91
+ | gate_pass_rate | Interpretation |
92
+ |----------------|----------------|
93
+ | 1.0 | Clean pass — add to toolkit |
94
+ | 0.875 (7/8) | One gate overridden — add with override note |
95
+ | < 0.875 | Rejected — do not add to toolkit |
96
+
97
+ The gate_pass_rate is surfaced in the harvest summary table for each finding.
98
+ It is not used as a quality score for ranking — a finding either passes all required gates or it does not.
@@ -0,0 +1,63 @@
1
+ # Artifact Card Template
2
+
3
+ ## Usage
4
+ This template is rendered once per approved finding during Module 04 (Integrate).
5
+ Replace all {PLACEHOLDER} values with finding data.
6
+
7
+ ## Template
8
+
9
+ ---
10
+
11
+ ### {NAME}
12
+
13
+ **Category:** {CATEGORY}
14
+ **Maturity:** {MATURITY_BADGE} {MATURITY_LEVEL}
15
+ **Reusability Confidence:** {CONFIDENCE}
16
+ **Extracted from:** {SOURCE_PROJECT}
17
+ **Last updated:** {DATE}
18
+
19
+ #### Description
20
+
21
+ {DESCRIPTION}
22
+
23
+ #### When to use
24
+
25
+ {WHEN_TO_USE}
26
+
27
+ #### When NOT to use
28
+
29
+ {WHEN_NOT_TO_USE}
30
+
31
+ #### Example
32
+
33
+ {EXAMPLE}
34
+
35
+ #### Changelog
36
+
37
+ - v1: Initial extraction from {SOURCE_PROJECT} ({DATE})
38
+
39
+ ---
40
+
41
+ ## Placeholder Reference
42
+
43
+ | Placeholder | Source | Example |
44
+ |-------------|--------|---------|
45
+ | {NAME} | finding.title | "Agent Swarm Topology" |
46
+ | {CATEGORY} | finding.category | "patterns" |
47
+ | {MATURITY_BADGE} | maturity-model.md lookup | "🔴" |
48
+ | {MATURITY_LEVEL} | finding.maturity | "Alpha" |
49
+ | {CONFIDENCE} | finding.confidence | "0.85" |
50
+ | {SOURCE_PROJECT} | session.slug | "bank-kc-automation" |
51
+ | {DATE} | current date | "2026-03-03" |
52
+ | {DESCRIPTION} | finding.content (first paragraph) | "..." |
53
+ | {WHEN_TO_USE} | finding.when_to_use | "..." |
54
+ | {WHEN_NOT_TO_USE} | finding.when_not_to_use | "..." |
55
+ | {EXAMPLE} | finding.example | "..." |
56
+
57
+ ## Placement Rules
58
+
59
+ For **skills** category: This template becomes the initial SKILL.md skeleton
60
+ For **commands** category: This template becomes the command .md file body
61
+ For **rules** category: Convert to rule table format (see .claude/rules/ convention)
62
+ For **templates/patterns/snippets** category: This card is appended to TOOLKIT_HARVEST.md under the relevant section
63
+ For **hooks** category: This card is appended to TOOLKIT_HARVEST.md hooks section (or created inline)
@@ -0,0 +1,102 @@
1
+ # Harvest Report Template
2
+
3
+ ## Usage
4
+ Generated at the end of Module 04 (Integrate) to summarize the harvest session.
5
+ All {PLACEHOLDER} values are computed from the findings registry.
6
+
7
+ ## Template
8
+
9
+ ---
10
+
11
+ # Harvest Report: {SESSION_ID}
12
+
13
+ **Date:** {DATE}
14
+ **Target:** {TARGET_PATHS}
15
+ **Scope:** {SCOPE_FILTER_OR_ALL}
16
+ **Steps completed:** {STEPS_COMPLETED} (Extract → Classify → Checkpoint → Gate → Integrate)
17
+
18
+ ## Summary
19
+
20
+ | Metric | Value |
21
+ |--------|-------|
22
+ | Total findings extracted | {TOTAL_EXTRACTED} |
23
+ | After deduplication | {AFTER_DEDUP} |
24
+ | User removals | {USER_REMOVALS} |
25
+ | User merges | {USER_MERGES} |
26
+ | Approved (passed gates) | {APPROVED_COUNT} |
27
+ | Blocked (failed gates) | {BLOCKED_COUNT} |
28
+ | Gate overrides | {OVERRIDE_COUNT} |
29
+ | Placed artifacts | {PLACED_COUNT} |
30
+
31
+ ## Findings by Category
32
+
33
+ | Category | Extracted | Approved | Placed | Destination |
34
+ |----------|-----------|----------|--------|-------------|
35
+ | skills | {N} | {N} | {N} | .claude/skills/ |
36
+ | commands | {N} | {N} | {N} | .claude/commands/ |
37
+ | hooks | {N} | {N} | {N} | TOOLKIT_HARVEST.md |
38
+ | rules | {N} | {N} | {N} | .claude/rules/ |
39
+ | templates | {N} | {N} | {N} | TOOLKIT_HARVEST.md |
40
+ | patterns | {N} | {N} | {N} | TOOLKIT_HARVEST.md |
41
+ | snippets | {N} | {N} | {N} | TOOLKIT_HARVEST.md |
42
+
43
+ ## Quality Gate Results
44
+
45
+ | Gate | Pass | Fail | Override | Pass Rate |
46
+ |------|------|------|----------|-----------|
47
+ | G1 When-To-Use | {N} | {N} | {N} | {%} |
48
+ | G2 When-Not-To-Use | {N} | {N} | {N} | {%} |
49
+ | G3 Decontextualized | {N} | {N} | {N} | {%} |
50
+ | G4 Concrete Example | {N} | {N} | {N} | {%} |
51
+ | G5 Reusability | {N} | {N} | {N} | {%} |
52
+ | G6 Not Duplicate | {N} | {N} | {N} | {%} |
53
+ | G7 Maturity Label | {N} | {N} | {N} | {%} |
54
+ | G8 Brutal Honesty | {N} | {N} | {N} | {%} |
55
+
56
+ ## Coverage Gaps
57
+
58
+ | Item | Reason |
59
+ |------|--------|
60
+ | {SKIPPED_FILES_TABLE_OR_NONE} | |
61
+
62
+ **Failed extractors:** {FAILED_EXTRACTORS_OR_NONE}
63
+
64
+ ## Confidence Distribution
65
+
66
+ | Range | Count | Percentage |
67
+ |-------|-------|------------|
68
+ | 0.9 - 1.0 (Excellent) | {N} | {%} |
69
+ | 0.7 - 0.89 (Good) | {N} | {%} |
70
+ | 0.5 - 0.69 (Acceptable) | {N} | {%} |
71
+ | < 0.5 (Below threshold) | {N} | {%} |
72
+
73
+ ## Memory Integration
74
+
75
+ - Patterns loaded from memory: {MEMORY_PATTERNS_COUNT}
76
+ - Reward stored: {REWARD_SCORE} ({REWARD_LABEL})
77
+ - Dream trigger updated: {YES_NO}
78
+
79
+ ---
80
+
81
+ ## Placeholder Reference
82
+
83
+ | Placeholder | Computation |
84
+ |-------------|-------------|
85
+ | {SESSION_ID} | HarvestSession.session_id |
86
+ | {DATE} | Current date (YYYY-MM-DD) |
87
+ | {TARGET_PATHS} | Directory path(s) scanned |
88
+ | {SCOPE_FILTER_OR_ALL} | Scope filter value or "all categories" |
89
+ | {STEPS_COMPLETED} | Count of pipeline steps that ran successfully |
90
+ | {TOTAL_EXTRACTED} | count(all findings at extraction) |
91
+ | {AFTER_DEDUP} | count(findings after Module 02 dedup) |
92
+ | {USER_REMOVALS} | count(findings removed by user at checkpoint) |
93
+ | {USER_MERGES} | count(findings with non-null merged_from) |
94
+ | {APPROVED_COUNT} | count(findings where status = approved) |
95
+ | {BLOCKED_COUNT} | count(findings where status = blocked) |
96
+ | {OVERRIDE_COUNT} | sum(length of all gate_overrides arrays) |
97
+ | {PLACED_COUNT} | count(findings where status = integrated) |
98
+ | {SKIPPED_FILES_TABLE_OR_NONE} | Table of files skipped (>100KB or binary), or "None" |
99
+ | {FAILED_EXTRACTORS_OR_NONE} | List of failed agent lenses, or "None" |
100
+ | {MEMORY_PATTERNS_COUNT} | count(patterns loaded from memory_query) |
101
+ | {REWARD_SCORE} | User checkpoint response mapped to 0.0-1.0 |
102
+ | {REWARD_LABEL} | excellent/good/needs_work/failed (see reward-learning.md) |
@@ -0,0 +1,287 @@
1
+ # transcript-site-generator — Interactive Transcript Site Generator
2
+
3
+ <!-- Trust Tier: 2 — Validated | BTO Layer 2 Score: 7.82/10 | Promoted: 2026-03-05 -->
4
+
5
+ > Generate a modern, interactive, mobile-friendly, SEO-optimized static website from a transcript or YouTube video link, ready for GitHub Pages deployment. Zero build step required.
6
+
7
+ ## When To Activate
8
+
9
+ Trigger on:
10
+ - "generate transcript site from [content]"
11
+ - "create interactive transcript [topic]"
12
+ - "build transcript website from YouTube [url]"
13
+ - "сгенерируй сайт из транскрипта"
14
+ - "сделай сайт из видео [url]"
15
+ - `/transcript-site [content or YouTube URL]`
16
+
17
+ ## Overview
18
+
19
+ This skill transforms text transcripts, content, or YouTube video links into production-ready interactive websites. The **default output is a pure static site** (single HTML + JS file) that deploys to GitHub Pages with zero build step — no React, no Vite, no npm install needed.
20
+
21
+ ### Features
22
+
23
+ - **Interactive transcript** with section navigation, scroll-spy TOC, full-text search (Ctrl+K)
24
+ - **YouTube embed** with clickable timestamps for video synchronization (if URL provided)
25
+ - **Dark/Light mode** toggle with localStorage persistence
26
+ - **Reading progress bar** and back-to-top button
27
+ - **Copy-quote** buttons per section (copies section text to clipboard)
28
+ - **Reading statistics** (word count, estimated reading time, section count)
29
+ - **SEO optimization** — Open Graph, Twitter Cards, JSON-LD (VideoObject/Article)
30
+ - **Print-friendly** CSS media queries
31
+ - **GitHub Pages** deployment via `docs/` folder (zero build) or GitHub Actions
32
+ - **Mobile-friendly** — responsive layout, hamburger menu, 44px touch targets
33
+ - **Speaker labels** — automatic speaker detection and visual differentiation
34
+
35
+ ## Architecture
36
+
37
+ ```
38
+ .claude/skills/transcript-site-generator/
39
+ ├── SKILL.md <- This file (orchestrator)
40
+ ├── modules/
41
+ │ ├── 00-input-analysis.md <- Step 0: Detect input type, extract transcript
42
+ │ ├── 01-content-parsing.md <- Step 1: Split into sections, extract timestamps
43
+ │ ├── 02-site-generation.md <- Step 2: Generate index.html with all content
44
+ │ ├── 03-interactivity.md <- Step 3: Generate app.js (search, TOC, dark mode)
45
+ │ ├── 04-deploy.md <- Step 4: GitHub Pages config + Actions workflow
46
+ │ └── 05-verification.md <- Step 5: Validate output, open in browser
47
+ ├── references/
48
+ │ ├── tech-stack.md <- Stack: Tailwind CDN, vanilla JS, static HTML
49
+ │ ├── data-schemas.md <- Section data structure, metadata schema
50
+ │ └── component-catalog.md <- HTML sections and JS modules catalog
51
+ └── examples/
52
+ ├── sample-transcript-site.md <- Example: YouTube + Russian podcast
53
+ └── sample-text-only-site.md <- Example: text-only, English, no YouTube
54
+ ```
55
+
56
+ ## Pipeline
57
+
58
+ ```
59
+ Step 0 Step 1 Step 2 Step 3
60
+ INPUT -> PARSE -> GENERATE -> INTERACTIVITY
61
+ (text/URL/ (split into (index.html (app.js:
62
+ yt-dlp) sections + with Tailwind search, TOC,
63
+ timestamps) CDN + content) dark mode)
64
+
65
+ |
66
+ v
67
+ Step 4 Step 5
68
+ DEPLOY -> VERIFY
69
+ (docs/ + (file check
70
+ GH Actions + open)
71
+ workflow)
72
+ ```
73
+
74
+ ## Input Requirements
75
+
76
+ The skill accepts one of:
77
+ 1. **Text transcript** — pasted directly or as a file path
78
+ 2. **YouTube URL** — extracts transcript via `yt-dlp --write-auto-sub --sub-lang ru,en --skip-download`
79
+ 3. **Both** — YouTube URL for embed + custom/edited transcript text
80
+
81
+ Minimum: enough content for 3 sections. No maximum (long transcripts benefit most from navigation).
82
+
83
+ ### YouTube Transcript Extraction
84
+
85
+ When a YouTube URL is provided:
86
+ ```bash
87
+ # Check yt-dlp availability
88
+ which yt-dlp || pip install yt-dlp
89
+
90
+ # Extract auto-generated subtitles (prefer manual, fallback to auto)
91
+ yt-dlp --write-sub --sub-lang ru,en --skip-download --sub-format vtt -o "/tmp/transcript" "<URL>" 2>/dev/null \
92
+ || yt-dlp --write-auto-sub --sub-lang ru,en --skip-download --sub-format vtt -o "/tmp/transcript" "<URL>"
93
+
94
+ # Extract video metadata
95
+ yt-dlp --print title --print channel --print duration --skip-download "<URL>"
96
+ ```
97
+
98
+ If `yt-dlp` is not installed:
99
+ ```
100
+ yt-dlp not found. Install with: pip install yt-dlp
101
+ Alternatively, paste the transcript text directly.
102
+ ```
103
+
104
+ ## Output
105
+
106
+ A **pure static site** in the `docs/` directory — zero build step, deploys directly via GitHub Pages:
107
+
108
+ ```
109
+ <project-root>/
110
+ ├── docs/ <- GitHub Pages source
111
+ │ ├── index.html (99KB+ single-file: HTML + inline Tailwind + SEO)
112
+ │ └── static/
113
+ │ ├── app.js (search, TOC scroll-spy, dark mode, progress bar)
114
+ │ └── style.css (minimal overrides)
115
+ ├── .github/workflows/deploy.yml (GitHub Pages deployment workflow)
116
+ └── README.md (project description + link to live site)
117
+ ```
118
+
119
+ ### index.html Structure
120
+
121
+ The HTML file is self-contained with:
122
+ - **Tailwind CSS via CDN** (`<script src="https://cdn.tailwindcss.com">`) with dark mode config
123
+ - **Font Awesome via CDN** for icons (moon/sun, search, copy, hamburger)
124
+ - **Full SEO head**: Open Graph, Twitter Cards, JSON-LD structured data
125
+ - **Semantic HTML**: `<header>`, `<nav>`, `<main>`, `<article>`, `<section>`, `<footer>`
126
+ - **All transcript content** rendered as HTML sections with anchor IDs
127
+ - **Responsive layout**: fixed sidebar TOC (desktop) + hamburger menu (mobile)
128
+ - **YouTube embed** (if video URL provided): responsive iframe with aspect-ratio container
129
+
130
+ ### app.js Features
131
+
132
+ Vanilla JavaScript (no frameworks) implementing:
133
+ - **Full-text search** — Ctrl+K modal, 300ms debounce, highlighted results with context
134
+ - **TOC scroll-spy** — IntersectionObserver highlights the active section in sidebar
135
+ - **Dark/Light mode** — toggle with localStorage persistence, icon switch (moon/sun)
136
+ - **Reading progress bar** — requestAnimationFrame-based scroll tracking
137
+ - **Back-to-top button** — appears after 500px scroll
138
+ - **Copy-quote** — per-section copy button with "Copied!" feedback
139
+ - **Mobile navigation** — hamburger toggle with slide-out sidebar
140
+ - **Keyboard shortcuts** — Ctrl/Cmd+K (search), Escape (close modal)
141
+ - **Timestamp links** — clickable timestamps that seek YouTube player (if embedded)
142
+
143
+ ## Execution Protocol
144
+
145
+ ### Step 0: Input Analysis
146
+ ```
147
+ Read: modules/00-input-analysis.md
148
+ ```
149
+ - Detect input type (text / YouTube URL / both)
150
+ - If YouTube URL: extract transcript via yt-dlp, get video metadata
151
+ - If text: accept as-is
152
+ - Detect language (Russian / English)
153
+ - **Output:** Raw transcript text + optional video metadata + language
154
+
155
+ ### Step 1: Content Parsing
156
+ ```
157
+ Read: modules/01-content-parsing.md
158
+ ```
159
+ - Split transcript into logical sections (by topic shifts, speaker changes, or markers)
160
+ - Extract timestamps if present (from VTT or inline `[HH:MM:SS]`)
161
+ - Generate section titles from content
162
+ - Detect speakers if multi-speaker transcript
163
+ - Calculate word counts and reading time
164
+ - **Output:** Structured section list with titles, content, timestamps, speakers
165
+
166
+ ### Step 2: Site Generation
167
+ ```
168
+ Read: modules/02-site-generation.md
169
+ Read: references/data-schemas.md
170
+ ```
171
+ - Generate `docs/index.html` — complete self-contained page:
172
+ - Tailwind CSS + Font Awesome via CDN
173
+ - Full SEO meta tags (OG, Twitter, JSON-LD)
174
+ - Header with title, stats, dark mode toggle, search button
175
+ - Sidebar TOC with all section links
176
+ - YouTube embed (if video URL provided)
177
+ - All transcript sections as HTML with anchor IDs
178
+ - Footer with author credits and source link
179
+ - Generate `docs/static/style.css` — minimal CSS overrides
180
+ - **Output:** Complete HTML + CSS files
181
+
182
+ ### Step 3: Interactivity
183
+ ```
184
+ Read: modules/03-interactivity.md
185
+ Read: references/component-catalog.md
186
+ ```
187
+ - Generate `docs/static/app.js` — vanilla JS:
188
+ - Search modal with highlighting and context snippets
189
+ - TOC scroll-spy (IntersectionObserver)
190
+ - Dark mode toggle with localStorage
191
+ - Reading progress bar
192
+ - Back-to-top button
193
+ - Copy-quote buttons
194
+ - Mobile hamburger menu
195
+ - Keyboard shortcuts
196
+ - YouTube timestamp sync (if video embedded)
197
+ - **Output:** Complete JS file
198
+
199
+ ### Step 4: Deployment
200
+ ```
201
+ Read: modules/04-deploy.md
202
+ ```
203
+ - Create `.github/workflows/deploy.yml` for GitHub Pages from `docs/`
204
+ - Create or update `README.md` with project description and live site link
205
+ - Configure GitHub Pages source as `docs/` on `main` branch
206
+ - **Output:** Deploy config + README
207
+
208
+ ### Step 5: Verification
209
+ ```
210
+ Read: modules/05-verification.md
211
+ ```
212
+ - Verify `docs/index.html` exists and has valid HTML structure
213
+ - Verify `docs/static/app.js` exists and has no syntax errors
214
+ - Check all section IDs are unique
215
+ - Check SEO meta tags are present
216
+ - Verify mobile responsiveness classes
217
+ - Check dark mode CSS works
218
+ - **Output:** Verification report
219
+
220
+ ## Customization Points
221
+
222
+ | Parameter | Default | How to specify | Description |
223
+ |-----------|---------|---------------|-------------|
224
+ | Language | auto-detect | "language: en" in prompt | UI language (ru/en) |
225
+ | Theme color | Indigo | "use green theme" in prompt | Primary Tailwind color palette |
226
+ | YouTube URL | none | Include URL in input | Optional video embed with timestamps |
227
+ | Author | from transcript/video | "author: John Doe" in prompt | Attribution in footer |
228
+ | Show timestamps | auto (if available) | "hide timestamps" in prompt | Toggle timestamp display |
229
+ | Show stats | yes | "no stats" in prompt | Word count, reading time in header |
230
+ | Show copy buttons | yes | "no copy buttons" in prompt | Copy-quote per section |
231
+ | Output dir | docs/ | "output to site/" in prompt | Static site output directory |
232
+ | Deploy method | docs/ folder | "use GitHub Actions" in prompt | `docs/` (zero build) or GitHub Actions |
233
+
234
+ Customization is passed via natural language in the user's prompt. The agent parses these from the initial request during Step 0. If the output directory is not `docs/`, update the deploy workflow `path` accordingly.
235
+
236
+ ### Conflict Detection
237
+
238
+ Before writing to the output directory, check if it already exists:
239
+ - If `docs/` has existing content, warn: `"docs/ already exists. Overwrite? (yes/no/use different dir)"`
240
+ - Never silently overwrite existing files
241
+
242
+ ## Large Transcript Strategy
243
+
244
+ For transcripts exceeding 30,000 words (~150 KB HTML output), the generated `index.html` may exceed single-file output limits. In this case:
245
+
246
+ 1. **Generate the HTML shell first** — `<head>`, header, sidebar TOC, search modal, footer (without section content)
247
+ 2. **Generate transcript sections in batches** — 5-10 sections per Write operation, appending to the HTML file
248
+ 3. **Close the HTML** — add closing `</main>`, `</div>`, `</body>`, `</html>` tags
249
+ 4. **Verify integrity** — check that `</html>` appears exactly once and all section IDs are present
250
+
251
+ This chunked approach ensures complete output regardless of transcript length.
252
+
253
+ ## Anti-Patterns
254
+
255
+ | Anti-Pattern | Detection | Fix |
256
+ |-------------|-----------|-----|
257
+ | Using React/Vite for simple transcript | Unnecessary complexity | Use static HTML + vanilla JS (default) |
258
+ | Transcript split into too many files | Multiple HTML pages | Single index.html with anchor navigation |
259
+ | Missing Tailwind CDN script | No styling | Always include `<script src="https://cdn.tailwindcss.com">` |
260
+ | Missing dark mode config in Tailwind | Dark mode broken | Add `tailwind.config = { darkMode: 'class' }` |
261
+ | Too few sections (<3) | Not enough for navigation | Merge more content or split deeper |
262
+ | Giant monolithic section | Section > 3000 words | Split into sub-sections |
263
+ | No search results feedback | Empty search shows nothing | Show "no results" message |
264
+ | Missing print styles | Page breaks mid-section | Add `@media print` rules |
265
+ | No mobile TOC | Desktop-only sidebar | Add hamburger menu for screens < 768px |
266
+ | YouTube embed not responsive | Fixed-width iframe | Use padding-bottom aspect-ratio trick |
267
+ | Missing fallback for yt-dlp | Script crashes if not installed | Check availability, offer text paste |
268
+ | No Font Awesome CDN | Missing icons | Include FA CDN link in `<head>` |
269
+ | Content in separate JS files | Unnecessary indirection for static site | Inline content directly in HTML |
270
+ | Using npm/build step | Over-engineering for static content | Deploy `docs/` directly, zero build |
271
+
272
+ ## Dependencies
273
+
274
+ - **Tech stack:** Pure HTML + Tailwind CSS (CDN) + Vanilla JavaScript
275
+ - **External CDNs:** Tailwind CSS, Font Awesome
276
+ - **Optional:** yt-dlp (for YouTube transcript extraction)
277
+ - **Skills used:** None (standalone skill)
278
+ - **Deployment:** GitHub Pages via `docs/` folder (no build step)
279
+
280
+ ## Checkpoint Protocol
281
+
282
+ After each step, output:
283
+ ```
284
+ Step N/5: [Name] Complete
285
+ Artifacts: [list]
286
+ "ok" to continue | "[feedback]" to adjust
287
+ ```
@@ -0,0 +1,123 @@
1
+ # Example: Text-Only Transcript Site (No YouTube)
2
+
3
+ ## Input
4
+
5
+ ```
6
+ Input type: Pasted text
7
+ Title: "AI in Healthcare: Panel Discussion at TechConf 2025"
8
+ Language: English
9
+ YouTube: none
10
+ ```
11
+
12
+ ## Parsed Sections (Step 1 Output)
13
+
14
+ ```
15
+ Section 1: "Opening Remarks" - 480 words
16
+ Section 2: "Current State of Medical AI" - 1120 words
17
+ Section 3: "Regulatory Challenges" - 890 words
18
+ Section 4: "Patient Data Privacy" - 1050 words
19
+ Section 5: "Clinical Decision Support Systems" - 1340 words
20
+ Section 6: "AI-Assisted Diagnostics in Radiology" - 960 words
21
+ Section 7: "Audience Q&A" - 720 words
22
+ Section 8: "Closing Thoughts" - 410 words
23
+
24
+ Total: 6,970 words, ~35 min read, 3 speakers
25
+ ```
26
+
27
+ ## Generated File Structure
28
+
29
+ ```
30
+ project-root/
31
+ ├── docs/
32
+ │ ├── index.html (52 KB)
33
+ │ └── static/
34
+ │ ├── app.js (9 KB) <- smaller: no YouTube seek code
35
+ │ └── style.css (0.4 KB)
36
+ ├── .github/
37
+ │ └── workflows/
38
+ │ └── deploy.yml
39
+ └── README.md
40
+ ```
41
+
42
+ ## Key Differences from YouTube Example
43
+
44
+ | Aspect | YouTube Example | Text-Only Example |
45
+ |--------|----------------|-------------------|
46
+ | Video embed | Yes (`<iframe>`) | Omitted |
47
+ | Timestamp links | Yes (`seekTo()`) | Omitted |
48
+ | `seekTo` function | In app.js | Not generated |
49
+ | `onYouTubeIframeAPIReady` | In app.js | Not generated |
50
+ | `og:type` | `video.other` | `article` |
51
+ | JSON-LD VideoObject | Yes | Omitted |
52
+ | `og:image` | YouTube thumbnail | Not set (or custom) |
53
+ | app.js size | ~11 KB | ~9 KB |
54
+
55
+ ## Sample Section HTML (No Timestamp)
56
+
57
+ ```html
58
+ <section id="section-regulatory-challenges" class="mb-12 scroll-mt-20">
59
+ <div class="flex items-start justify-between mb-4">
60
+ <h2 class="text-2xl font-bold text-gray-900 dark:text-white">
61
+ 3. Regulatory Challenges
62
+ </h2>
63
+ <button data-copy="section-regulatory-challenges"
64
+ class="copy-btn flex-shrink-0 p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800
65
+ text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 no-print"
66
+ aria-label="Copy">
67
+ <i class="far fa-copy"></i>
68
+ </button>
69
+ </div>
70
+ <div class="mb-3 flex items-center gap-2">
71
+ <span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium
72
+ bg-primary-100 text-primary-800 dark:bg-primary-900 dark:text-primary-200">
73
+ Dr. Sarah Chen &middot; Panelist
74
+ </span>
75
+ </div>
76
+ <div class="prose prose-lg dark:prose-invert max-w-none">
77
+ <p>The FDA's approach to AI-based medical devices has evolved significantly...</p>
78
+ <p>We're seeing a shift from traditional 510(k) pathways to the new PCCP framework...</p>
79
+ </div>
80
+ </section>
81
+ ```
82
+
83
+ ## SEO Head (Article-only, no VideoObject)
84
+
85
+ ```html
86
+ <title>AI in Healthcare: Panel Discussion at TechConf 2025</title>
87
+ <meta name="description" content="Panel discussion transcript covering medical AI, regulatory challenges, patient data privacy, and clinical decision support systems." />
88
+ <meta property="og:type" content="article" />
89
+ <!-- No og:image (no YouTube thumbnail available) -->
90
+ ```
91
+
92
+ ## JSON-LD (Article only)
93
+
94
+ ```json
95
+ {
96
+ "@context": "https://schema.org",
97
+ "@type": "Article",
98
+ "headline": "AI in Healthcare: Panel Discussion at TechConf 2025",
99
+ "author": { "@type": "Organization", "name": "TechConf" },
100
+ "datePublished": "2025-11-15",
101
+ "description": "Panel discussion transcript covering medical AI...",
102
+ "wordCount": 6970
103
+ }
104
+ ```
105
+
106
+ ## Stats Displayed in Header
107
+
108
+ ```
109
+ 35 min read · 6,970 words · 8 sections
110
+ ```
111
+
112
+ ## Verification Results
113
+
114
+ ```
115
+ File checks: 5/5 passed
116
+ HTML structure: 11/11 passed (no YouTube-specific checks)
117
+ Content: 6/6 passed
118
+ Interactivity: 8/8 passed (no seekTo/YouTube checks)
119
+ Responsive: 6/6 passed
120
+ Dark mode: 6/6 passed
121
+ SEO: 5/5 passed (no VideoObject checks)
122
+ Print: 4/4 passed
123
+ ```