@dzhechkov/keysarium 1.4.0 → 1.5.1
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.
- package/README.md +52 -5
- package/README.ru.md +541 -0
- package/bin/cli.js +0 -0
- package/package.json +11 -9
- package/templates/.claude/commands/analyst-manual.md +38 -0
- package/templates/.claude/commands/casarium.md +55 -4
- package/templates/.claude/commands/feature-adr.md +8 -0
- package/templates/.claude/rules/trust-tiers.md +5 -0
- package/templates/.claude/shards/feature-adr.shard.md +64 -10
- package/templates/.claude/shards/phase-ai-factory.shard.md +109 -0
- package/templates/.claude/skills/ai-factory-mapper/README.md +90 -0
- package/templates/.claude/skills/ai-factory-mapper/SKILL.md +309 -0
- package/templates/.claude/skills/ai-factory-mapper/assets/report-template.md +123 -0
- package/templates/.claude/skills/ai-factory-mapper/references/catalog.md +230 -0
- package/templates/.claude/skills/ai-factory-mapper/references/coverage-formula.md +219 -0
- package/templates/.claude/skills/ai-factory-mapper/references/decomposition-checklist.md +183 -0
- package/templates/.claude/skills/ai-factory-mapper/references/pattern-library.md +312 -0
- package/templates/.claude/skills/ai-factory-mapper/scripts/build_docx_report.js +423 -0
- package/templates/.claude/skills/analyst-manual-full/SKILL.md +286 -0
- package/templates/.claude/skills/edu-site-generator/SKILL.md +254 -0
- package/templates/.claude/skills/edu-site-generator/examples/sample-course-structure.md +116 -0
- package/templates/.claude/skills/edu-site-generator/modules/00-content-analysis.md +84 -0
- package/templates/.claude/skills/edu-site-generator/modules/01-course-structure.md +75 -0
- package/templates/.claude/skills/edu-site-generator/modules/02-data-generation.md +186 -0
- package/templates/.claude/skills/edu-site-generator/modules/03-scaffold.md +249 -0
- package/templates/.claude/skills/edu-site-generator/modules/04-components.md +130 -0
- package/templates/.claude/skills/edu-site-generator/modules/05-gamification.md +163 -0
- package/templates/.claude/skills/edu-site-generator/modules/06-deploy.md +88 -0
- package/templates/.claude/skills/edu-site-generator/modules/07-verification.md +97 -0
- package/templates/.claude/skills/edu-site-generator/references/component-templates.md +436 -0
- package/templates/.claude/skills/edu-site-generator/references/data-schemas.md +164 -0
- package/templates/.claude/skills/edu-site-generator/references/exercise-catalog.md +110 -0
- package/templates/.claude/skills/edu-site-generator/references/tech-stack.md +69 -0
- package/templates/.claude/skills/feature-adr/SKILL.md +245 -59
- package/templates/.claude/skills/feature-adr/modules/03-adr.md +43 -0
- package/templates/.claude/skills/feature-adr/modules/03.5-ideation-swarm.md +180 -0
- package/templates/.claude/skills/feature-adr/modules/06-implementation-plan.md +56 -7
- package/templates/.claude/skills/feature-adr/modules/08-qe.md +87 -23
- package/templates/.claude/skills/feature-adr/modules/09-fleet-qe.md +305 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/README.md +143 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/brutal-honesty-review.md +240 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/chaos-engineering-resilience.md +163 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/code-goal-planner.md +446 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/enterprise-integration-testing.md +111 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/mutation-testing.md +236 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/performance-testing.md +315 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qcsd-ideation-swarm.md +126 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qcsd-production-swarm.md +108 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-coverage-analysis.md +193 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-requirements-validation.md +254 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/regression-testing.md +233 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/risk-based-testing.md +212 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/security-testing.md +311 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/shift-left-testing.md +231 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/tdd-london-chicago.md +249 -0
- package/templates/.claude/skills/transcript-site-generator/SKILL.md +287 -0
- package/templates/.claude/skills/transcript-site-generator/examples/sample-text-only-site.md +123 -0
- package/templates/.claude/skills/transcript-site-generator/examples/sample-transcript-site.md +134 -0
- package/templates/.claude/skills/transcript-site-generator/modules/00-input-analysis.md +132 -0
- package/templates/.claude/skills/transcript-site-generator/modules/01-content-parsing.md +117 -0
- package/templates/.claude/skills/transcript-site-generator/modules/02-site-generation.md +293 -0
- package/templates/.claude/skills/transcript-site-generator/modules/03-interactivity.md +406 -0
- package/templates/.claude/skills/transcript-site-generator/modules/04-deploy.md +130 -0
- package/templates/.claude/skills/transcript-site-generator/modules/05-verification.md +155 -0
- package/templates/.claude/skills/transcript-site-generator/references/component-catalog.md +86 -0
- package/templates/.claude/skills/transcript-site-generator/references/data-schemas.md +123 -0
- package/templates/.claude/skills/transcript-site-generator/references/tech-stack.md +132 -0
- package/templates/CLAUDE.md +9 -2
- package/templates/docs/edu-site-generator/01-deployment-guide.md +911 -0
- package/templates/docs/edu-site-generator/02-admin-guide.md +901 -0
- package/templates/docs/edu-site-generator/03-user-guide.md +1008 -0
- package/templates/docs/edu-site-generator/04-infrastructure-requirements.md +489 -0
- package/templates/docs/edu-site-generator/05-architecture.md +902 -0
- package/templates/docs/edu-site-generator/06-user-flows.md +759 -0
- package/templates/docs/transcript-site-generator/01-deployment-guide.md +1042 -0
- package/templates/docs/transcript-site-generator/02-admin-guide.md +918 -0
- package/templates/docs/transcript-site-generator/03-user-guide.md +925 -0
- package/templates/docs/transcript-site-generator/04-infrastructure-requirements.md +482 -0
- package/templates/docs/transcript-site-generator/05-architecture.md +1068 -0
- package/templates/docs/transcript-site-generator/06-user-flows.md +855 -0
|
@@ -0,0 +1,925 @@
|
|
|
1
|
+
# User Guide -- @dzhechkov/skills-transcript-site
|
|
2
|
+
|
|
3
|
+
This guide covers everything you need to use the Transcript Site Generator skill pack for Claude Code. It is intended for anyone who wants to create interactive, searchable transcript websites from text, YouTube videos, or both -- with zero build steps, zero frameworks, and zero infrastructure costs.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Contents
|
|
8
|
+
|
|
9
|
+
1. [Quick Start (5 minutes)](#1-quick-start-5-minutes)
|
|
10
|
+
2. [Input Types](#2-input-types)
|
|
11
|
+
3. [The 6-Step Pipeline](#3-the-6-step-pipeline)
|
|
12
|
+
4. [Customization Options](#4-customization-options)
|
|
13
|
+
5. [YouTube Features](#5-youtube-features)
|
|
14
|
+
6. [Search Functionality](#6-search-functionality)
|
|
15
|
+
7. [Dark Mode and Visual Features](#7-dark-mode-and-visual-features)
|
|
16
|
+
8. [Large Transcript Strategy](#8-large-transcript-strategy)
|
|
17
|
+
9. [Common Scenarios](#9-common-scenarios)
|
|
18
|
+
10. [Tips and Best Practices](#10-tips-and-best-practices)
|
|
19
|
+
11. [FAQ](#11-faq)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 1. Quick Start (5 minutes)
|
|
24
|
+
|
|
25
|
+
Transcript Site Generator gives you three commands. Each can be used independently or as part of the full pipeline.
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
/transcript-site [source] -- Full 6-step pipeline: analyze, parse, generate, add interactivity, deploy, verify
|
|
29
|
+
/transcript-site-generate [source] -- Generate HTML only (steps 1-4)
|
|
30
|
+
/transcript-site-deploy [path] -- Deploy configuration only (steps 5-6)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Your first transcript site
|
|
34
|
+
|
|
35
|
+
The fastest way to see the generator in action is to provide a YouTube URL:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
/transcript-site https://www.youtube.com/watch?v=YOUR_VIDEO_ID
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Within 2-5 minutes you will have a complete interactive website in `docs/index.html` with:
|
|
42
|
+
|
|
43
|
+
- Full transcript text organized into sections
|
|
44
|
+
- YouTube video embed with timestamp synchronization
|
|
45
|
+
- Search functionality (Ctrl+K)
|
|
46
|
+
- Dark mode toggle
|
|
47
|
+
- Table of contents with scroll-spy
|
|
48
|
+
- Copy-quote buttons
|
|
49
|
+
- Reading statistics
|
|
50
|
+
- SEO metadata (Open Graph, Twitter Cards, JSON-LD)
|
|
51
|
+
- Ready for GitHub Pages deployment
|
|
52
|
+
|
|
53
|
+
To preview the result:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
open docs/index.html
|
|
57
|
+
# or
|
|
58
|
+
xdg-open docs/index.html # Linux
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Trigger phrases
|
|
62
|
+
|
|
63
|
+
You can invoke the pipeline with natural language too. These phrases all trigger the same pipeline:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
/transcript-site https://youtube.com/watch?v=...
|
|
67
|
+
/transcript-site Create a transcript site from this YouTube video: https://...
|
|
68
|
+
/transcript-site Generate an interactive transcript page for my podcast episode
|
|
69
|
+
/transcript-site Turn this text into a searchable transcript website
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 2. Input Types
|
|
75
|
+
|
|
76
|
+
The generator accepts four types of input. It auto-detects the type from the argument.
|
|
77
|
+
|
|
78
|
+
### 2.1. YouTube URL
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
/transcript-site https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
82
|
+
/transcript-site https://youtu.be/dQw4w9WgXcQ
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Requires `yt-dlp` installed. The generator extracts:
|
|
86
|
+
- Video title, channel, upload date, duration
|
|
87
|
+
- Auto-generated or manual subtitles
|
|
88
|
+
- Thumbnail URL (for OG image)
|
|
89
|
+
- Video ID (for embed)
|
|
90
|
+
|
|
91
|
+
If subtitles are not available, the generator will ask you to paste the transcript manually.
|
|
92
|
+
|
|
93
|
+
### 2.2. Pasted text
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
/transcript-site
|
|
97
|
+
|
|
98
|
+
[Then paste your transcript text directly in the chat]
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Or provide the text inline:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
/transcript-site <<EOF
|
|
105
|
+
[00:00] Host: Welcome to the show.
|
|
106
|
+
[00:15] Guest: Thanks for having me.
|
|
107
|
+
...
|
|
108
|
+
EOF
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
The generator accepts plain text, timestamped text, and speaker-labeled text. It will detect the format automatically.
|
|
112
|
+
|
|
113
|
+
### 2.3. File path
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
/transcript-site /path/to/transcript.txt
|
|
117
|
+
/transcript-site ./transcripts/episode-42.md
|
|
118
|
+
/transcript-site researches/my-case/06_speaker_script.md
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Any text file or markdown file works. The generator reads the file and proceeds to content parsing.
|
|
122
|
+
|
|
123
|
+
### 2.4. Both (YouTube URL + corrected text)
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
/transcript-site https://youtube.com/watch?v=... --text /path/to/corrected-transcript.txt
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
This uses the YouTube URL for metadata and embed, but the provided text file for the actual transcript content. Useful when auto-generated subtitles are inaccurate and you have a manually corrected version.
|
|
130
|
+
|
|
131
|
+
### Input format detection
|
|
132
|
+
|
|
133
|
+
The generator recognizes several common transcript formats:
|
|
134
|
+
|
|
135
|
+
| Format | Example | Detection |
|
|
136
|
+
|--------|---------|-----------|
|
|
137
|
+
| Plain text | `This is the transcript...` | No timestamps, no speakers |
|
|
138
|
+
| Timestamped | `[00:15] This is the text...` | Square-bracket timestamps |
|
|
139
|
+
| SRT-style | `1\n00:00:15,000 --> 00:00:18,000\nText` | SRT numbering + arrows |
|
|
140
|
+
| VTT-style | `WEBVTT\n\n00:15.000 --> 00:18.000\nText` | WEBVTT header |
|
|
141
|
+
| Speaker-labeled | `Host: Welcome...\nGuest: Thank you...` | Colon-separated speaker labels |
|
|
142
|
+
| Combined | `[00:15] Host: Welcome...` | Timestamps + speaker labels |
|
|
143
|
+
|
|
144
|
+
All formats are normalized internally before site generation.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## 3. The 6-Step Pipeline
|
|
149
|
+
|
|
150
|
+
Each step produces visible output and ends with a checkpoint where you can provide feedback or proceed.
|
|
151
|
+
|
|
152
|
+
### Step 1: Input Analysis
|
|
153
|
+
|
|
154
|
+
**What happens:** The generator determines the source type (YouTube, text, file), extracts metadata, detects language, and prepares the raw transcript for parsing.
|
|
155
|
+
|
|
156
|
+
**For YouTube URLs:**
|
|
157
|
+
- Runs `yt-dlp` to extract metadata and subtitles
|
|
158
|
+
- Detects video language from subtitle metadata
|
|
159
|
+
- Downloads thumbnail URL for SEO
|
|
160
|
+
|
|
161
|
+
**For text/files:**
|
|
162
|
+
- Reads the content
|
|
163
|
+
- Detects language using character frequency analysis
|
|
164
|
+
- Estimates section count from content structure
|
|
165
|
+
|
|
166
|
+
**Expected output:**
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
Step 1/6: INPUT ANALYSIS
|
|
170
|
+
Source type: YouTube URL
|
|
171
|
+
Video ID: abc123
|
|
172
|
+
Title: "My Conference Talk"
|
|
173
|
+
Duration: 45:22
|
|
174
|
+
Language: en
|
|
175
|
+
Words: 6,842
|
|
176
|
+
Estimated sections: 12
|
|
177
|
+
|
|
178
|
+
Checkpoint 1/6: Input Analysis Complete
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**What you can do at this checkpoint:**
|
|
182
|
+
- `ok` -- proceed to Step 2
|
|
183
|
+
- `change language to ru` -- override detected language
|
|
184
|
+
- `use this text instead: [paste]` -- replace extracted transcript
|
|
185
|
+
|
|
186
|
+
### Step 2: Content Parsing
|
|
187
|
+
|
|
188
|
+
**What happens:** The raw transcript is parsed into structured sections with speakers, timestamps, and key quotes.
|
|
189
|
+
|
|
190
|
+
**Section splitting logic:**
|
|
191
|
+
1. If timestamps exist: split at natural topic boundaries (long pauses, topic shifts)
|
|
192
|
+
2. If no timestamps: split at paragraph boundaries or every 500-800 words
|
|
193
|
+
3. Speaker changes always create section boundaries (configurable)
|
|
194
|
+
|
|
195
|
+
**Speaker detection:**
|
|
196
|
+
- Named speakers: `Host:`, `Guest:`, `Dr. Smith:` -- detected from labels
|
|
197
|
+
- Unnamed speakers: `Speaker A`, `Speaker B` -- detected from voice change patterns (YouTube) or paragraph alternation (text)
|
|
198
|
+
|
|
199
|
+
**Expected output:**
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
Step 2/6: CONTENT PARSING
|
|
203
|
+
Sections: 12
|
|
204
|
+
Speakers: 3 (Host, Dr. Smith, Audience Q&A)
|
|
205
|
+
Timestamps: 67 anchor points
|
|
206
|
+
Key quotes: 5
|
|
207
|
+
|
|
208
|
+
Section preview:
|
|
209
|
+
1. Introduction (0:00-2:15) -- 342 words
|
|
210
|
+
2. Background Context (2:15-8:30) -- 1,204 words
|
|
211
|
+
3. Main Findings (8:30-18:45) -- 2,567 words
|
|
212
|
+
...
|
|
213
|
+
|
|
214
|
+
Checkpoint 2/6: Content Parsing Complete
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**What you can do:**
|
|
218
|
+
- `ok` -- proceed
|
|
219
|
+
- `split section 3` -- split a large section into two
|
|
220
|
+
- `merge sections 4 and 5` -- combine small sections
|
|
221
|
+
- `rename speaker "Speaker A" to "Dr. Chen"` -- fix speaker names
|
|
222
|
+
|
|
223
|
+
### Step 3: Site Generation
|
|
224
|
+
|
|
225
|
+
**What happens:** The parsed content is transformed into a complete HTML page with Tailwind CSS styling, SEO meta tags, and structural markup.
|
|
226
|
+
|
|
227
|
+
**Generated structure:**
|
|
228
|
+
- `<head>`: SEO meta tags (OG, Twitter Card, JSON-LD), Tailwind CDN, viewport
|
|
229
|
+
- `<nav>`: Site header with title, dark mode toggle, search button
|
|
230
|
+
- `<aside>`: Table of contents (sidebar on desktop, hamburger on mobile)
|
|
231
|
+
- `<main>`: Transcript content organized by sections
|
|
232
|
+
- `<footer>`: Statistics, credits, print button
|
|
233
|
+
|
|
234
|
+
**Expected output:**
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
Step 3/6: SITE GENERATION
|
|
238
|
+
Template: YouTube transcript (with embed)
|
|
239
|
+
Theme: indigo
|
|
240
|
+
Language: en
|
|
241
|
+
|
|
242
|
+
Generated:
|
|
243
|
+
- HTML5 semantic structure
|
|
244
|
+
- Tailwind CSS CDN loaded
|
|
245
|
+
- YouTube iframe embed (enablejsapi=1)
|
|
246
|
+
- 12-section table of contents
|
|
247
|
+
- 67 timestamp links
|
|
248
|
+
- Speaker color coding (3 speakers)
|
|
249
|
+
- SEO: OG tags + Twitter Card + JSON-LD VideoObject
|
|
250
|
+
|
|
251
|
+
Checkpoint 3/6: Site Generation Complete
|
|
252
|
+
File: docs/index.html (52 KB)
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**What you can do:**
|
|
256
|
+
- `ok` -- proceed
|
|
257
|
+
- `change theme to emerald` -- change color scheme
|
|
258
|
+
- `remove youtube embed` -- generate text-only version
|
|
259
|
+
- `add custom header "My Podcast"` -- customize the header
|
|
260
|
+
|
|
261
|
+
### Step 4: Interactivity
|
|
262
|
+
|
|
263
|
+
**What happens:** Vanilla JavaScript is added to the HTML for all interactive features. No build step, no dependencies, no bundler.
|
|
264
|
+
|
|
265
|
+
**Features added:**
|
|
266
|
+
|
|
267
|
+
| Feature | Trigger | Implementation |
|
|
268
|
+
|---------|---------|---------------|
|
|
269
|
+
| Search | Ctrl+K or click search icon | Debounced input, regex-based matching, highlighted results |
|
|
270
|
+
| Dark mode | Toggle button in header | CSS class on `<html>`, localStorage persistence |
|
|
271
|
+
| Table of Contents | Always visible (desktop) or hamburger (mobile) | IntersectionObserver scroll-spy |
|
|
272
|
+
| Back-to-top | Appears on scroll > 300px | Smooth scroll to top |
|
|
273
|
+
| Copy quote | Click copy button next to quotes | Clipboard API with visual feedback |
|
|
274
|
+
| YouTube sync | Click timestamp link | iframe postMessage seekTo() |
|
|
275
|
+
| Progress bar | Top of page | Scroll position indicator |
|
|
276
|
+
| Reading stats | Below header | Word count, reading time, section count |
|
|
277
|
+
| Print | Print button in footer | Print-optimized stylesheet |
|
|
278
|
+
|
|
279
|
+
**Expected output:**
|
|
280
|
+
|
|
281
|
+
```
|
|
282
|
+
Step 4/6: INTERACTIVITY
|
|
283
|
+
Features added: 9
|
|
284
|
+
+ Search (Ctrl+K)
|
|
285
|
+
+ Dark mode (localStorage)
|
|
286
|
+
+ TOC scroll-spy (IntersectionObserver)
|
|
287
|
+
+ Back-to-top
|
|
288
|
+
+ Copy quote (Clipboard API)
|
|
289
|
+
+ YouTube sync (seekTo)
|
|
290
|
+
+ Progress bar
|
|
291
|
+
+ Reading stats
|
|
292
|
+
+ Print stylesheet
|
|
293
|
+
|
|
294
|
+
Checkpoint 4/6: Interactivity Complete
|
|
295
|
+
File: docs/index.html (updated, 68 KB)
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
**What you can do:**
|
|
299
|
+
- `ok` -- proceed
|
|
300
|
+
- `remove search` -- disable search functionality
|
|
301
|
+
- `remove youtube sync` -- disable timestamp click-to-seek
|
|
302
|
+
- `add keyboard navigation` -- add arrow key navigation between sections
|
|
303
|
+
|
|
304
|
+
### Step 5: Deploy
|
|
305
|
+
|
|
306
|
+
**What happens:** Deployment configuration files are generated. By default, the target is GitHub Pages via the `docs/` folder.
|
|
307
|
+
|
|
308
|
+
**Generated files:**
|
|
309
|
+
- `docs/robots.txt` -- Search engine directives
|
|
310
|
+
- `docs/sitemap.xml` -- Sitemap for SEO
|
|
311
|
+
- GitHub Pages instructions (printed to console, not a file)
|
|
312
|
+
|
|
313
|
+
**Expected output:**
|
|
314
|
+
|
|
315
|
+
```
|
|
316
|
+
Step 5/6: DEPLOY CONFIGURATION
|
|
317
|
+
Target: GitHub Pages (docs/ folder)
|
|
318
|
+
|
|
319
|
+
Files generated:
|
|
320
|
+
docs/robots.txt
|
|
321
|
+
docs/sitemap.xml
|
|
322
|
+
|
|
323
|
+
To deploy:
|
|
324
|
+
1. git add docs/
|
|
325
|
+
2. git commit -m "add transcript site"
|
|
326
|
+
3. git push
|
|
327
|
+
4. Settings > Pages > Source: main, /docs
|
|
328
|
+
|
|
329
|
+
Checkpoint 5/6: Deploy Complete
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
**What you can do:**
|
|
333
|
+
- `ok` -- proceed to verification
|
|
334
|
+
- `custom domain example.com` -- add CNAME file
|
|
335
|
+
- `skip deploy` -- skip this step
|
|
336
|
+
|
|
337
|
+
### Step 6: Verification
|
|
338
|
+
|
|
339
|
+
**What happens:** The generated site is validated across five categories: HTML structure, JavaScript correctness, CSS validity, SEO completeness, and accessibility compliance.
|
|
340
|
+
|
|
341
|
+
**Checks performed:**
|
|
342
|
+
|
|
343
|
+
| Category | Checks | Examples |
|
|
344
|
+
|----------|--------|---------|
|
|
345
|
+
| HTML | 8 | Valid structure, tags closed, no deprecated attrs |
|
|
346
|
+
| JavaScript | 6 | No syntax errors, event delegation, escape functions |
|
|
347
|
+
| CSS | 4 | Tailwind loaded, dark mode classes, print styles |
|
|
348
|
+
| SEO | 5 | OG tags, Twitter Card, JSON-LD, canonical, sitemap |
|
|
349
|
+
| Accessibility | 5 | Skip-nav, ARIA roles, keyboard nav, alt text |
|
|
350
|
+
| Security | 4 | No inline handlers, escapeHtml, SRI, CSP |
|
|
351
|
+
| Performance | 3 | HTML size, DOM nodes, no render-blocking |
|
|
352
|
+
|
|
353
|
+
**Expected output:**
|
|
354
|
+
|
|
355
|
+
```
|
|
356
|
+
Step 6/6: VERIFICATION
|
|
357
|
+
HTML: 8/8 passed
|
|
358
|
+
JavaScript: 6/6 passed
|
|
359
|
+
CSS: 4/4 passed
|
|
360
|
+
SEO: 5/5 passed
|
|
361
|
+
Accessibility: 5/5 passed
|
|
362
|
+
Security: 4/4 passed
|
|
363
|
+
Performance: 3/3 passed
|
|
364
|
+
|
|
365
|
+
All 35 checks passed!
|
|
366
|
+
|
|
367
|
+
PIPELINE COMPLETE
|
|
368
|
+
Output: docs/index.html (68 KB)
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
|
|
373
|
+
## 4. Customization Options
|
|
374
|
+
|
|
375
|
+
### Theme color
|
|
376
|
+
|
|
377
|
+
The default color scheme is indigo. Change it with:
|
|
378
|
+
|
|
379
|
+
```
|
|
380
|
+
/transcript-site [source] --theme emerald
|
|
381
|
+
/transcript-site [source] --theme rose
|
|
382
|
+
/transcript-site [source] --theme amber
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
Available themes correspond to Tailwind color palettes: `slate`, `gray`, `zinc`, `neutral`, `stone`, `red`, `orange`, `amber`, `yellow`, `lime`, `green`, `emerald`, `teal`, `cyan`, `sky`, `blue`, `indigo`, `violet`, `purple`, `fuchsia`, `pink`, `rose`.
|
|
386
|
+
|
|
387
|
+
### Language
|
|
388
|
+
|
|
389
|
+
Override auto-detected language:
|
|
390
|
+
|
|
391
|
+
```
|
|
392
|
+
/transcript-site [source] --lang ru
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
This affects:
|
|
396
|
+
- HTML `lang` attribute
|
|
397
|
+
- UI string translations (search placeholder, button labels, etc.)
|
|
398
|
+
- OG locale tag
|
|
399
|
+
- JSON-LD language field
|
|
400
|
+
|
|
401
|
+
### Timestamps
|
|
402
|
+
|
|
403
|
+
Control timestamp display:
|
|
404
|
+
|
|
405
|
+
```
|
|
406
|
+
/transcript-site [source] --timestamps visible # Show timestamps (default for YouTube)
|
|
407
|
+
/transcript-site [source] --timestamps hidden # Hide timestamps
|
|
408
|
+
/transcript-site [source] --timestamps hover # Show on hover only
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
### Statistics display
|
|
412
|
+
|
|
413
|
+
```
|
|
414
|
+
/transcript-site [source] --stats # Show stats (default)
|
|
415
|
+
/transcript-site [source] --no-stats # Hide stats
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### Copy buttons
|
|
419
|
+
|
|
420
|
+
```
|
|
421
|
+
/transcript-site [source] --copy-buttons # Show copy buttons (default)
|
|
422
|
+
/transcript-site [source] --no-copy-buttons # Hide copy buttons
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
### Output directory
|
|
426
|
+
|
|
427
|
+
```
|
|
428
|
+
/transcript-site [source] --output docs/ # Default
|
|
429
|
+
/transcript-site [source] --output public/
|
|
430
|
+
/transcript-site [source] --output build/transcript/
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### All options combined
|
|
434
|
+
|
|
435
|
+
```
|
|
436
|
+
/transcript-site https://youtube.com/watch?v=abc123 \
|
|
437
|
+
--lang en \
|
|
438
|
+
--theme emerald \
|
|
439
|
+
--timestamps visible \
|
|
440
|
+
--stats \
|
|
441
|
+
--copy-buttons \
|
|
442
|
+
--output docs/my-transcript/ \
|
|
443
|
+
--title "My Conference Talk Transcript"
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
## 5. YouTube Features
|
|
449
|
+
|
|
450
|
+
### 5.1. Timestamp links
|
|
451
|
+
|
|
452
|
+
Every timestamp in the transcript becomes a clickable link. Clicking a timestamp:
|
|
453
|
+
1. Scrolls the YouTube embed into view (if off-screen)
|
|
454
|
+
2. Calls `player.seekTo(seconds)` to jump to that point in the video
|
|
455
|
+
3. Highlights the current section in the table of contents
|
|
456
|
+
|
|
457
|
+
The timestamp links use `data-seek` attributes for event delegation:
|
|
458
|
+
|
|
459
|
+
```html
|
|
460
|
+
<a href="#" data-seek="125" class="timestamp-link">[2:05]</a>
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
### 5.2. YouTube embed
|
|
464
|
+
|
|
465
|
+
The YouTube player is embedded at the top of the page with `enablejsapi=1` for JavaScript control:
|
|
466
|
+
|
|
467
|
+
```html
|
|
468
|
+
<iframe id="yt-player"
|
|
469
|
+
src="https://www.youtube.com/embed/VIDEO_ID?enablejsapi=1&origin=..."
|
|
470
|
+
class="w-full aspect-video rounded-lg shadow-lg"
|
|
471
|
+
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
|
472
|
+
allowfullscreen>
|
|
473
|
+
</iframe>
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
The embed is responsive (100% width, 16:9 aspect ratio) and works on all screen sizes.
|
|
477
|
+
|
|
478
|
+
### 5.3. Sticky player (optional)
|
|
479
|
+
|
|
480
|
+
For long transcripts, you can enable a sticky player that stays visible while scrolling:
|
|
481
|
+
|
|
482
|
+
```
|
|
483
|
+
/transcript-site [URL] --sticky-player
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
The player shrinks to a small floating window in the bottom-right corner when scrolled past.
|
|
487
|
+
|
|
488
|
+
### 5.4. Disabling YouTube features
|
|
489
|
+
|
|
490
|
+
```
|
|
491
|
+
/transcript-site [URL] --no-embed # No YouTube iframe, timestamps as text
|
|
492
|
+
/transcript-site [URL] --no-sync # YouTube iframe present but no seekTo()
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
---
|
|
496
|
+
|
|
497
|
+
## 6. Search Functionality
|
|
498
|
+
|
|
499
|
+
### 6.1. Keyboard shortcut
|
|
500
|
+
|
|
501
|
+
Press `Ctrl+K` (or `Cmd+K` on macOS) to open the search dialog. Press `Escape` to close it.
|
|
502
|
+
|
|
503
|
+
### 6.2. How search works
|
|
504
|
+
|
|
505
|
+
1. User types in the search input
|
|
506
|
+
2. After 300ms of inactivity (debounce), the search executes
|
|
507
|
+
3. Search uses regex matching with `escapeRegex()` for safety
|
|
508
|
+
4. All matching text segments are highlighted with `<mark>` tags
|
|
509
|
+
5. A result count is displayed
|
|
510
|
+
6. The first result is scrolled into view
|
|
511
|
+
|
|
512
|
+
### 6.3. Highlighted results
|
|
513
|
+
|
|
514
|
+
Matching text is wrapped in:
|
|
515
|
+
|
|
516
|
+
```html
|
|
517
|
+
<mark class="bg-yellow-200 dark:bg-yellow-800 rounded px-0.5">matched text</mark>
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
The highlight colors adapt to dark mode automatically.
|
|
521
|
+
|
|
522
|
+
### 6.4. Navigating between results
|
|
523
|
+
|
|
524
|
+
After searching:
|
|
525
|
+
- Press `Enter` or click the down arrow to jump to the next result
|
|
526
|
+
- Press `Shift+Enter` or click the up arrow to jump to the previous result
|
|
527
|
+
- The current result is highlighted with a stronger outline
|
|
528
|
+
|
|
529
|
+
### 6.5. Search limitations
|
|
530
|
+
|
|
531
|
+
- Minimum query length: 2 characters
|
|
532
|
+
- Maximum highlighted results: 50 (for performance on large transcripts)
|
|
533
|
+
- Case-insensitive by default
|
|
534
|
+
- No fuzzy matching -- exact substring match only
|
|
535
|
+
|
|
536
|
+
### 6.6. Clearing search
|
|
537
|
+
|
|
538
|
+
Click the X button in the search input, press `Escape`, or delete all text. All highlights are removed and the page returns to its original state.
|
|
539
|
+
|
|
540
|
+
---
|
|
541
|
+
|
|
542
|
+
## 7. Dark Mode and Visual Features
|
|
543
|
+
|
|
544
|
+
### 7.1. Dark mode
|
|
545
|
+
|
|
546
|
+
Toggle dark mode by clicking the sun/moon icon in the header. The setting is saved in `localStorage` and persists across visits.
|
|
547
|
+
|
|
548
|
+
If your system is set to dark mode (`prefers-color-scheme: dark`) and you have not manually toggled the setting, the site starts in dark mode automatically.
|
|
549
|
+
|
|
550
|
+
### 7.2. Progress bar
|
|
551
|
+
|
|
552
|
+
A thin progress bar at the very top of the page indicates how far you have scrolled through the transcript. It uses the primary theme color and is visible in both light and dark modes.
|
|
553
|
+
|
|
554
|
+
### 7.3. Back-to-top button
|
|
555
|
+
|
|
556
|
+
A floating button appears in the bottom-right corner when you scroll more than 300 pixels down. Clicking it smoothly scrolls to the top of the page.
|
|
557
|
+
|
|
558
|
+
### 7.4. Table of contents scroll-spy
|
|
559
|
+
|
|
560
|
+
The table of contents in the sidebar highlights the currently visible section as you scroll. This uses `IntersectionObserver` to detect which section heading is in the viewport.
|
|
561
|
+
|
|
562
|
+
On mobile, the TOC is hidden behind a hamburger menu button. Tapping the button opens a slide-out drawer with the full table of contents.
|
|
563
|
+
|
|
564
|
+
### 7.5. Reading statistics
|
|
565
|
+
|
|
566
|
+
Below the header, a stats bar shows:
|
|
567
|
+
- Total word count
|
|
568
|
+
- Estimated reading time (assumes 200 words per minute)
|
|
569
|
+
- Number of sections
|
|
570
|
+
- Number of speakers (if detected)
|
|
571
|
+
|
|
572
|
+
### 7.6. Speaker color coding
|
|
573
|
+
|
|
574
|
+
When multiple speakers are detected, each speaker is assigned a distinct color from the theme palette:
|
|
575
|
+
|
|
576
|
+
- Speaker 1: primary-600 (e.g., indigo-600)
|
|
577
|
+
- Speaker 2: emerald-600
|
|
578
|
+
- Speaker 3: amber-600
|
|
579
|
+
- Speaker 4: rose-600
|
|
580
|
+
- Additional speakers cycle through the palette
|
|
581
|
+
|
|
582
|
+
Speaker labels are bold and color-coded:
|
|
583
|
+
|
|
584
|
+
```html
|
|
585
|
+
<span class="font-bold text-indigo-600 dark:text-indigo-400">Host:</span>
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
---
|
|
589
|
+
|
|
590
|
+
## 8. Large Transcript Strategy
|
|
591
|
+
|
|
592
|
+
### 8.1. When to consider chunking
|
|
593
|
+
|
|
594
|
+
| Transcript size | Recommendation |
|
|
595
|
+
|----------------|----------------|
|
|
596
|
+
| Under 5,000 words | Single page, no special treatment |
|
|
597
|
+
| 5,000 - 15,000 words | Single page, default settings work well |
|
|
598
|
+
| 15,000 - 30,000 words | Single page with lazy loading |
|
|
599
|
+
| Over 30,000 words | Multi-page chunking recommended |
|
|
600
|
+
|
|
601
|
+
### 8.2. Single page with lazy loading
|
|
602
|
+
|
|
603
|
+
For transcripts between 15,000 and 30,000 words, the generator automatically enables lazy loading. Sections below the third viewport are loaded on demand as you scroll toward them. The table of contents and search still work across the entire transcript.
|
|
604
|
+
|
|
605
|
+
### 8.3. Multi-page chunking
|
|
606
|
+
|
|
607
|
+
For very long transcripts (over 30,000 words), the generator splits the content into multiple HTML pages:
|
|
608
|
+
|
|
609
|
+
```
|
|
610
|
+
docs/
|
|
611
|
+
index.html -- Landing page with TOC and overview
|
|
612
|
+
section-01.html -- First section
|
|
613
|
+
section-02.html -- Second section
|
|
614
|
+
...
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
Each page includes:
|
|
618
|
+
- Navigation (previous/next section links)
|
|
619
|
+
- Mini table of contents
|
|
620
|
+
- Search (searches current page only)
|
|
621
|
+
- Consistent header and footer
|
|
622
|
+
|
|
623
|
+
To force multi-page mode:
|
|
624
|
+
|
|
625
|
+
```
|
|
626
|
+
/transcript-site [source] --chunking multi
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
To force single-page mode (even for long transcripts):
|
|
630
|
+
|
|
631
|
+
```
|
|
632
|
+
/transcript-site [source] --chunking single
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
### 8.4. Performance characteristics
|
|
636
|
+
|
|
637
|
+
| Feature | Single page (10K words) | Single page (25K words) | Multi-page (50K words) |
|
|
638
|
+
|---------|------------------------|-----------------------|----------------------|
|
|
639
|
+
| HTML size | ~50 KB | ~120 KB | ~50 KB per page |
|
|
640
|
+
| Initial load | < 1 second | 1-2 seconds | < 1 second |
|
|
641
|
+
| Search speed | Instant | ~100ms | Instant (per page) |
|
|
642
|
+
| DOM nodes | ~2,000 | ~5,000 | ~2,000 per page |
|
|
643
|
+
|
|
644
|
+
---
|
|
645
|
+
|
|
646
|
+
## 9. Common Scenarios
|
|
647
|
+
|
|
648
|
+
### Scenario A: Podcast transcript
|
|
649
|
+
|
|
650
|
+
You have a podcast episode and want to create a permanent, searchable transcript page.
|
|
651
|
+
|
|
652
|
+
```
|
|
653
|
+
/transcript-site https://youtube.com/watch?v=PODCAST_EPISODE_ID
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
The generator creates a single-page site with:
|
|
657
|
+
- Episode title and metadata from YouTube
|
|
658
|
+
- Speaker labels (Host, Guest)
|
|
659
|
+
- Timestamp links for easy navigation
|
|
660
|
+
- YouTube embed for listening while reading
|
|
661
|
+
|
|
662
|
+
### Scenario B: Conference talk
|
|
663
|
+
|
|
664
|
+
You recorded a conference talk and want to share the transcript alongside the video.
|
|
665
|
+
|
|
666
|
+
```
|
|
667
|
+
/transcript-site https://youtube.com/watch?v=TALK_ID --title "Building AI Systems at Scale - PyConf 2026"
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
Key features for conference talks:
|
|
671
|
+
- Slide references (if timestamps are provided)
|
|
672
|
+
- Q&A section at the end (auto-detected from speaker changes)
|
|
673
|
+
- Technical terms highlighted (if detected)
|
|
674
|
+
|
|
675
|
+
### Scenario C: Interview
|
|
676
|
+
|
|
677
|
+
You conducted an interview and have a text transcript.
|
|
678
|
+
|
|
679
|
+
```
|
|
680
|
+
/transcript-site /path/to/interview-transcript.txt
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
The generator detects the interview format (two speakers alternating) and applies:
|
|
684
|
+
- Speaker color coding
|
|
685
|
+
- Quote extraction for notable statements
|
|
686
|
+
- Clean two-column layout on desktop
|
|
687
|
+
|
|
688
|
+
### Scenario D: Text-only article
|
|
689
|
+
|
|
690
|
+
You have a long-form article (not a transcript) and want to create an interactive reading experience.
|
|
691
|
+
|
|
692
|
+
```
|
|
693
|
+
/transcript-site /path/to/article.md
|
|
694
|
+
```
|
|
695
|
+
|
|
696
|
+
The generator adapts:
|
|
697
|
+
- No speaker detection (single author)
|
|
698
|
+
- No timestamp links
|
|
699
|
+
- Sections from markdown headers
|
|
700
|
+
- Reading progress bar
|
|
701
|
+
|
|
702
|
+
### Scenario E: Keysarium research artifact
|
|
703
|
+
|
|
704
|
+
You completed a Keysarium case study and want to publish the executive summary.
|
|
705
|
+
|
|
706
|
+
```
|
|
707
|
+
/transcript-site researches/bank-automation/08_executive_summary.md --title "Bank Automation Case Study"
|
|
708
|
+
```
|
|
709
|
+
|
|
710
|
+
The generator treats Keysarium artifacts as text input and creates a clean, publishable website.
|
|
711
|
+
|
|
712
|
+
### Scenario F: Batch generation
|
|
713
|
+
|
|
714
|
+
Generate sites for multiple transcripts:
|
|
715
|
+
|
|
716
|
+
```
|
|
717
|
+
/transcript-site episode-1.txt --output docs/ep1/
|
|
718
|
+
/transcript-site episode-2.txt --output docs/ep2/
|
|
719
|
+
/transcript-site episode-3.txt --output docs/ep3/
|
|
720
|
+
```
|
|
721
|
+
|
|
722
|
+
Each site is independent and can be deployed separately or together under one GitHub Pages domain.
|
|
723
|
+
|
|
724
|
+
### Scenario G: Custom branding
|
|
725
|
+
|
|
726
|
+
Generate a site with custom colors and title for a specific brand:
|
|
727
|
+
|
|
728
|
+
```
|
|
729
|
+
/transcript-site [source] \
|
|
730
|
+
--theme rose \
|
|
731
|
+
--title "Acme Corp Podcast - Episode 42" \
|
|
732
|
+
--description "This week we discuss..." \
|
|
733
|
+
--lang en
|
|
734
|
+
```
|
|
735
|
+
|
|
736
|
+
---
|
|
737
|
+
|
|
738
|
+
## 10. Tips and Best Practices
|
|
739
|
+
|
|
740
|
+
### Provide clean transcripts when possible
|
|
741
|
+
|
|
742
|
+
Auto-generated YouTube subtitles often have errors. If you have a manually corrected transcript, use it:
|
|
743
|
+
|
|
744
|
+
```
|
|
745
|
+
/transcript-site https://youtube.com/watch?v=... --text corrected-transcript.txt
|
|
746
|
+
```
|
|
747
|
+
|
|
748
|
+
The YouTube URL provides metadata and embed, while the text file provides accurate content.
|
|
749
|
+
|
|
750
|
+
### Use speaker labels
|
|
751
|
+
|
|
752
|
+
If your transcript does not have speaker labels, add them. It dramatically improves readability:
|
|
753
|
+
|
|
754
|
+
```
|
|
755
|
+
Host: Welcome to the show.
|
|
756
|
+
Guest: Thank you for having me.
|
|
757
|
+
```
|
|
758
|
+
|
|
759
|
+
The generator color-codes speakers and creates a more visually engaging layout.
|
|
760
|
+
|
|
761
|
+
### Keep sections reasonable
|
|
762
|
+
|
|
763
|
+
Sections of 500-1500 words work best. Very short sections (under 100 words) create too many TOC entries. Very long sections (over 3000 words) make navigation difficult.
|
|
764
|
+
|
|
765
|
+
If the auto-detected sections are not ideal, adjust at Step 2:
|
|
766
|
+
|
|
767
|
+
```
|
|
768
|
+
split section 3
|
|
769
|
+
merge sections 7 and 8
|
|
770
|
+
```
|
|
771
|
+
|
|
772
|
+
### Test locally before deploying
|
|
773
|
+
|
|
774
|
+
Always preview the generated site locally:
|
|
775
|
+
|
|
776
|
+
```bash
|
|
777
|
+
open docs/index.html
|
|
778
|
+
```
|
|
779
|
+
|
|
780
|
+
Check:
|
|
781
|
+
- All sections render correctly
|
|
782
|
+
- YouTube embed loads (if applicable)
|
|
783
|
+
- Search works
|
|
784
|
+
- Dark mode toggles cleanly
|
|
785
|
+
- Mobile layout is acceptable (resize browser window)
|
|
786
|
+
|
|
787
|
+
### Commit generated files to git
|
|
788
|
+
|
|
789
|
+
The generated site files should be committed to your repository:
|
|
790
|
+
|
|
791
|
+
```bash
|
|
792
|
+
git add docs/
|
|
793
|
+
git commit -m "add transcript site: Episode 42"
|
|
794
|
+
git push
|
|
795
|
+
```
|
|
796
|
+
|
|
797
|
+
This enables GitHub Pages deployment and provides version history.
|
|
798
|
+
|
|
799
|
+
### Use descriptive titles
|
|
800
|
+
|
|
801
|
+
The title appears in:
|
|
802
|
+
- The browser tab
|
|
803
|
+
- Open Graph previews (social media shares)
|
|
804
|
+
- Search engine results
|
|
805
|
+
- The site header
|
|
806
|
+
|
|
807
|
+
Make it descriptive and specific:
|
|
808
|
+
|
|
809
|
+
```
|
|
810
|
+
--title "How We Built Our ML Pipeline - Engineering Podcast Ep. 42"
|
|
811
|
+
```
|
|
812
|
+
|
|
813
|
+
Not:
|
|
814
|
+
|
|
815
|
+
```
|
|
816
|
+
--title "Transcript"
|
|
817
|
+
```
|
|
818
|
+
|
|
819
|
+
---
|
|
820
|
+
|
|
821
|
+
## 11. FAQ
|
|
822
|
+
|
|
823
|
+
### Q: Do I need Node.js to view the generated site?
|
|
824
|
+
|
|
825
|
+
No. The generated site is pure static HTML with Tailwind CDN and vanilla JavaScript. Open `docs/index.html` in any modern browser. Node.js is only needed for the `npx` CLI commands during installation.
|
|
826
|
+
|
|
827
|
+
### Q: Can I edit the generated HTML manually?
|
|
828
|
+
|
|
829
|
+
Yes. The HTML is clean, well-structured, and uses standard Tailwind classes. You can edit it with any text editor. The site does not depend on any build tool or preprocessor.
|
|
830
|
+
|
|
831
|
+
### Q: Does the site work offline?
|
|
832
|
+
|
|
833
|
+
If you used `--tailwind inline`, yes -- the site works completely offline. If you used the default Tailwind CDN, the site needs internet access on the first visit (after which the CDN is cached by the browser). The YouTube embed always requires internet access.
|
|
834
|
+
|
|
835
|
+
### Q: Can I use this with a non-YouTube video platform?
|
|
836
|
+
|
|
837
|
+
Currently, only YouTube URLs are supported for automatic metadata and subtitle extraction. For other platforms (Vimeo, Twitch, etc.), download the transcript separately and provide it as text input. You can embed the video manually by editing the HTML after generation.
|
|
838
|
+
|
|
839
|
+
### Q: How do I update a transcript site after editing the transcript?
|
|
840
|
+
|
|
841
|
+
Re-run the pipeline:
|
|
842
|
+
|
|
843
|
+
```
|
|
844
|
+
/transcript-site [updated source] --output docs/ --clean
|
|
845
|
+
```
|
|
846
|
+
|
|
847
|
+
The `--clean` flag removes previously generated files before writing new ones. Alternatively, manually delete `docs/index.html` and re-run.
|
|
848
|
+
|
|
849
|
+
### Q: Can I generate multiple pages from one long transcript?
|
|
850
|
+
|
|
851
|
+
Yes. Use `--chunking multi`:
|
|
852
|
+
|
|
853
|
+
```
|
|
854
|
+
/transcript-site [source] --chunking multi
|
|
855
|
+
```
|
|
856
|
+
|
|
857
|
+
This splits the transcript into separate HTML pages by section.
|
|
858
|
+
|
|
859
|
+
### Q: How do I add Google Analytics or other tracking?
|
|
860
|
+
|
|
861
|
+
Edit the generated `docs/index.html` and add the tracking script to the `<head>` section. The generator does not add tracking by default -- this is intentional for privacy.
|
|
862
|
+
|
|
863
|
+
### Q: The YouTube subtitles are inaccurate. What can I do?
|
|
864
|
+
|
|
865
|
+
Three options:
|
|
866
|
+
1. Download and correct the subtitles, then provide as text: `--text corrected.txt`
|
|
867
|
+
2. Use a transcription service (Whisper, AssemblyAI) and provide the result as text
|
|
868
|
+
3. Correct the HTML manually after generation
|
|
869
|
+
|
|
870
|
+
### Q: Can I change the font?
|
|
871
|
+
|
|
872
|
+
Yes, by editing the Tailwind config in the generated HTML:
|
|
873
|
+
|
|
874
|
+
```html
|
|
875
|
+
<script>
|
|
876
|
+
tailwind.config = {
|
|
877
|
+
theme: {
|
|
878
|
+
fontFamily: {
|
|
879
|
+
sans: ['Inter', 'system-ui', 'sans-serif'],
|
|
880
|
+
mono: ['JetBrains Mono', 'monospace']
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
</script>
|
|
885
|
+
```
|
|
886
|
+
|
|
887
|
+
Add the font import in the `<head>`:
|
|
888
|
+
|
|
889
|
+
```html
|
|
890
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
891
|
+
```
|
|
892
|
+
|
|
893
|
+
### Q: What is the maximum transcript length?
|
|
894
|
+
|
|
895
|
+
There is no hard limit. Single-page mode works well up to 30,000 words (~150 KB HTML). Beyond that, multi-page chunking is recommended. The generator handles transcripts of 100,000+ words with chunking enabled.
|
|
896
|
+
|
|
897
|
+
### Q: Can I deploy to something other than GitHub Pages?
|
|
898
|
+
|
|
899
|
+
Yes. The generated site is static HTML -- it works on any static hosting:
|
|
900
|
+
- Netlify: drag and drop the `docs/` folder
|
|
901
|
+
- Vercel: point to the `docs/` directory in project settings
|
|
902
|
+
- AWS S3: upload `docs/` contents to an S3 bucket with static hosting
|
|
903
|
+
- Any web server: copy `docs/` to your server's document root
|
|
904
|
+
|
|
905
|
+
### Q: Does the site support right-to-left (RTL) languages?
|
|
906
|
+
|
|
907
|
+
The generator sets `dir="rtl"` on the HTML element when it detects an RTL language (Arabic, Hebrew, Persian, Urdu). Tailwind utilities handle the layout adjustments automatically.
|
|
908
|
+
|
|
909
|
+
### Q: How do I remove the "Generated by" footer credit?
|
|
910
|
+
|
|
911
|
+
Edit `docs/index.html` and remove or modify the footer section. The credit is not required -- it is a default that you are free to change.
|
|
912
|
+
|
|
913
|
+
### Q: Can I use this in a CI/CD pipeline?
|
|
914
|
+
|
|
915
|
+
The generation step requires Claude Code (an interactive AI tool), so it cannot run in a headless CI/CD pipeline. However, you can:
|
|
916
|
+
1. Generate the site locally with Claude Code
|
|
917
|
+
2. Commit the output to git
|
|
918
|
+
3. Deploy via GitHub Pages (automatic on push) or CI/CD for the static files
|
|
919
|
+
|
|
920
|
+
### Q: The generated site is too large (over 200 KB). What should I do?
|
|
921
|
+
|
|
922
|
+
1. Enable multi-page chunking: `--chunking multi`
|
|
923
|
+
2. Use inline Tailwind: `--tailwind inline` (removes CDN dependency, smaller CSS)
|
|
924
|
+
3. Check for unusually long sections and split them
|
|
925
|
+
4. Remove features you do not need: `--no-copy-buttons --no-stats`
|