appydave-tools 0.16.0 → 0.17.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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +6 -0
  3. data/AGENTS.md +22 -0
  4. data/CHANGELOG.md +12 -0
  5. data/CLAUDE.md +206 -51
  6. data/README.md +144 -11
  7. data/bin/archive_project.rb +249 -0
  8. data/bin/configuration.rb +21 -1
  9. data/bin/generate_manifest.rb +357 -0
  10. data/bin/sync_from_ssd.rb +236 -0
  11. data/bin/vat +623 -0
  12. data/docs/README.md +169 -0
  13. data/docs/configuration/.env.example +19 -0
  14. data/docs/configuration/README.md +394 -0
  15. data/docs/configuration/channels.example.json +26 -0
  16. data/docs/configuration/settings.example.json +6 -0
  17. data/docs/development/CODEX-recommendations.md +123 -0
  18. data/docs/development/README.md +100 -0
  19. data/docs/development/cli-architecture-patterns.md +1604 -0
  20. data/docs/development/pattern-comparison.md +284 -0
  21. data/docs/prd-unified-brands-configuration.md +792 -0
  22. data/docs/project-brand-systems-analysis.md +934 -0
  23. data/docs/vat/dam-vision.md +123 -0
  24. data/docs/vat/session-summary-2025-11-09.md +297 -0
  25. data/docs/vat/usage.md +508 -0
  26. data/docs/vat/vat-testing-plan.md +801 -0
  27. data/lib/appydave/tools/configuration/models/brands_config.rb +238 -0
  28. data/lib/appydave/tools/configuration/models/config_base.rb +7 -0
  29. data/lib/appydave/tools/configuration/models/settings_config.rb +4 -0
  30. data/lib/appydave/tools/vat/config.rb +153 -0
  31. data/lib/appydave/tools/vat/config_loader.rb +91 -0
  32. data/lib/appydave/tools/vat/manifest_generator.rb +239 -0
  33. data/lib/appydave/tools/vat/project_listing.rb +198 -0
  34. data/lib/appydave/tools/vat/project_resolver.rb +132 -0
  35. data/lib/appydave/tools/vat/s3_operations.rb +560 -0
  36. data/lib/appydave/tools/version.rb +1 -1
  37. data/lib/appydave/tools.rb +9 -1
  38. data/package.json +1 -1
  39. metadata +57 -3
  40. data/docs/dam/overview.md +0 -28
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dfc47ae2c891b47ff973f7f5605c18f0d05f98f44045c7b40590d03d63fdf276
4
- data.tar.gz: cd97470ff0937e41972b1777eabaaaf2da3321e2f0a8d1cd6845125b8a15d705
3
+ metadata.gz: '0819e2db66666e4729144ba1a8dac0032a5b323f4475f9cdc84459aa9309cd49'
4
+ data.tar.gz: ce1185ecbf19793175fa91f4a5c3e401df36394349ec454c7c47fa38e2193727
5
5
  SHA512:
6
- metadata.gz: c2ce45fd490af1172db2e274e733fdb329d9ef143078ada86f90aadc1cc4860bdde91c4ca19cf781dffd128de909118271ce9087657edfd6a7ad98c38ba68b94
7
- data.tar.gz: 931ca82db8f193bb2b6f581d1691893ac8912949d37384d1a7f2baea35cf7fc90343c2234a259f73f69489a9405bd07c984699c0dc7716416103c65b9e8406bf
6
+ metadata.gz: d1c6e936fa7d41f160152cf3e037485c9c0e509377f81970df9295cb38bdcc33bfea489da5ab666baa87042d645d609f35048b96826241bc636097c192525015
7
+ data.tar.gz: b4accc9229eda2cd3777f6828e2a3b6988208033a1a5df55f5c487519321a76845cf908fac1056598231973c26d8a9866ab311307157b30dcac472534d42465f
data/.rubocop.yml CHANGED
@@ -127,6 +127,12 @@ RSpec/PendingWithoutReason:
127
127
  RSpec/MultipleMemoizedHelpers:
128
128
  Enabled: false
129
129
 
130
+ RSpec/MessageSpies:
131
+ Enabled: false
132
+
133
+ RSpec/StubbedMock:
134
+ Enabled: false
135
+
130
136
  Metrics/AbcSize:
131
137
  Max: 25
132
138
  Exclude:
data/AGENTS.md ADDED
@@ -0,0 +1,22 @@
1
+ # Repository Guidelines
2
+
3
+ ## Project Structure & Module Organization
4
+ Core Ruby code lives in `lib/appydave/tools/` with one folder per CLI (gpt_context, youtube_manager, subtitle_processor, etc.). Executables in `bin/` are for development helpers, while packaged entrypoints reside in `exe/`. Specs mirror the library layout under `spec/`, supported by sample data in `spec/samples/`. Shared docs and walkthroughs are collected under `docs/`. Temporary or generated artifacts (`coverage/`, `tmp/`, `transient/`) should stay out of commits.
5
+
6
+ ## Build, Test, and Development Commands
7
+ `bin/setup` installs gem dependencies and any Node helpers declared in `package.json`. Run `bundle exec rake spec` (aliased as `rake spec`) for the full test suite, and keep `guard` running during feature work to auto-rerun specs. Use `bundle exec rubocop` to enforce lint rules, and `bin/console` for an interactive Pry session preloaded with the gem. CLI binaries can be invoked directly, e.g., `bin/gpt_context.rb -i '**/*.rb' -d`.
8
+
9
+ ## Coding Style & Naming Conventions
10
+ The codebase targets Ruby 2.7 with two-space indentation and descriptive method names. Follow `.rubocop.yml`: 200-character line limit, relaxed metrics inside `spec/`, and RuboCop RSpec/Rake plugins enabled. Namespaces follow `AppyDave::Tools::<Feature>` inside `lib/`, and CLI filenames stay snake_case (`bin/move_images.rb`). Prefer keyword args, early returns, and guard clauses over deeply nested conditionals.
11
+
12
+ ## Testing Guidelines
13
+ RSpec is the canonical framework. Name files `*_spec.rb` that mirror lib paths (e.g., `spec/gpt_context/collector_spec.rb`). Isolate behavior with `describe '#method'` blocks, keep helpers in `spec/support`, and favor `let`/`let!` over global state. Run focused tests via `bundle exec rspec spec/path/to/file_spec.rb` when iterating, then finish with `rake spec`. Add regression tests for every bug fix to keep CLI behavior stable.
14
+
15
+ ## Commit & Pull Request Guidelines
16
+ Commits follow conventional commits consumed by semantic-release (`feat:`, `fix:`, `chore:`, `feat!:`, etc.). Scope messages to a single tool when possible (`fix(subtitle_processor): correct offset buffer`). Before opening a PR, ensure `rake spec` and `rubocop` pass, summarize the change, link issues or YouTube scripts, and include CLI output or screenshots if user-facing behavior shifts. Leave follow-up tasks in checklists so reviewers can track outstanding work.
17
+
18
+ ## Agent Coordination
19
+ Claude is the primary automation agent; align with the collaboration notes in `CLAUDE.md` before introducing new flows or prompt templates. When scripting repeatable tasks (gpt_context runs, metadata syncs), document the expected Claude inputs/outputs so the agent can reproduce them. Flag breaking CLI changes in PR descriptions with a dedicated **Claude Impact** subsection to keep downstream automations in sync.
20
+
21
+ ## Security & Configuration Tips
22
+ Keep API keys and OAuth secrets in `.env` or `~/.config/appydave/` (managed via `ad_config`). Never commit those files; `.gitignore` already excludes them. Validate YouTube API changes against a test channel before touching production content, and rotate credentials when machines change owners.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # [0.16.0](https://github.com/appydave/appydave-tools/compare/v0.15.0...v0.16.0) (2025-11-08)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * fix cops ([6c1d59b](https://github.com/appydave/appydave-tools/commit/6c1d59bd870af519825556f7304d6ca1677d8649))
7
+
8
+
9
+ ### Features
10
+
11
+ * update documentation and general purpose rename and fixes via claude ([027c3df](https://github.com/appydave/appydave-tools/commit/027c3dff11e572359e6f2d1ebc17010dc3b8d7ee))
12
+
1
13
  # [0.15.0](https://github.com/appydave/appydave-tools/compare/v0.14.1...v0.15.0) (2025-11-08)
2
14
 
3
15
 
data/CLAUDE.md CHANGED
@@ -60,6 +60,7 @@ bin/console # Interactive Ruby console for experimentation
60
60
  | **GPT Context** | `gpt_context` | Collect project files for AI context | ⭐ PRIMARY |
61
61
  | **YouTube Manager** | `youtube_manager` | CRUD operations on YouTube video metadata | ✅ ACTIVE |
62
62
  | **Subtitle Processor** | `subtitle_processor` | Transform SRT files (clean/merge) | ✅ ACTIVE |
63
+ | **VAT (Video Asset Tools)** | `vat` | Multi-tenant video project storage orchestration | ✅ ACTIVE |
63
64
  | **Configuration** | `ad_config` | Manage JSON configs (channels, paths, sequences) | ✅ ACTIVE |
64
65
  | **Move Images** | N/A (dev only) | Organize video asset images | ✅ ACTIVE |
65
66
  | **Prompt Tools** | `prompt_tools` | OpenAI Completion API wrapper | ⚠️ DEPRECATED API |
@@ -142,7 +143,73 @@ bin/subtitle_processor.rb join -d ./subs -f "*.srt" -s inferred -b 200 -o output
142
143
 
143
144
  **Note:** Renamed from `subtitle_manager` to `subtitle_processor` (accurate - processes files, doesn't manage state)
144
145
 
145
- #### 4. Prompt Tools (`bin/prompt_tools.rb`) ⚠️ DEPRECATED API
146
+ #### 4. VAT - Video Asset Tools (`bin/vat`)
147
+ Multi-tenant video project storage orchestration:
148
+
149
+ ```bash
150
+ # List all brands
151
+ vat list
152
+
153
+ # List projects for a brand
154
+ vat list appydave
155
+ vat list appydave 'b6*' # Pattern matching
156
+
157
+ # Upload to S3 (collaboration)
158
+ vat s3-up appydave b65
159
+ vat s3-up voz boy-baker --dry-run
160
+
161
+ # Download from S3
162
+ vat s3-down appydave b65
163
+ vat s3-down --dry-run # Auto-detect from PWD
164
+
165
+ # Check sync status
166
+ vat s3-status appydave b65
167
+
168
+ # Clean up S3
169
+ vat s3-cleanup appydave b65 --force
170
+
171
+ # Archive to SSD
172
+ vat archive appydave b63
173
+
174
+ # Sync from SSD
175
+ vat sync-ssd appydave
176
+ ```
177
+
178
+ **Core Features:**
179
+ - **Multi-tenant**: Manages 6 brands (appydave, voz, aitldr, kiros, joy, ss)
180
+ - **Smart sync**: MD5-based file comparison (skips unchanged files)
181
+ - **Pattern matching**: `'b6*'` expands to b60-b69 projects
182
+ - **Short names**: `b65` → `b65-guy-monroe-marketing-plan` (FliVideo pattern)
183
+ - **Auto-detection**: Detects brand/project from current directory
184
+ - **Hybrid storage**: Local → S3 (90-day collaboration) → SSD (archive)
185
+
186
+ **Brand Shortcuts:**
187
+ - `appydave` → `v-appydave`
188
+ - `voz` → `v-voz`
189
+ - `aitldr` → `v-aitldr`
190
+ - `kiros` → `v-kiros`
191
+ - `joy` → `v-beauty-and-joy`
192
+ - `ss` → `v-supportsignal`
193
+
194
+ **Workflows:**
195
+ - **FliVideo** (AppyDave): Sequential chapter recording, short name support (`b65`)
196
+ - **Storyline** (VOZ, AITLDR): Script-first content, full project names (`boy-baker`)
197
+
198
+ **Use cases:**
199
+ - Collaborate on video edits with team (upload → edit → download)
200
+ - Archive completed projects to external SSD
201
+ - Quick project discovery across multiple brands
202
+ - Manage 50GB+ video files with smart sync
203
+
204
+ **Configuration:**
205
+ - System: `video-projects-root` in `~/.config/appydave/settings.json` (**required**)
206
+ - Per-brand: `.video-tools.env` (AWS credentials, S3 bucket, SSD path)
207
+
208
+ **Migration note:** The old `~/.vat-config` file is deprecated. VAT now uses `settings.json`. See [Configuration Management](#configuration-management) section below.
209
+
210
+ See detailed usage guide: [docs/usage/vat.md](./docs/usage/vat.md)
211
+
212
+ #### 5. Prompt Tools (`bin/prompt_tools.rb`) ⚠️ DEPRECATED API
146
213
  OpenAI Completion API wrapper with template support:
147
214
 
148
215
  ```bash
@@ -266,10 +333,12 @@ Bank transaction reconciliation tool - **DEPRECATED, DO NOT USE**
266
333
  ```bash
267
334
  rake spec # Run all RSpec tests
268
335
  rake # Default task: compile, spec (clobber compile spec)
269
- guard # Watch files and auto-run tests + rubocop on changes
336
+ RUBYOPT="-W0" guard # Watch files and auto-run tests + rubocop (suppress Ruby 3.4 warnings)
270
337
  bundle exec rspec -f doc # Run tests with detailed documentation format
271
338
  ```
272
339
 
340
+ **Note:** Ruby 3.4.2 shows platform constant warnings from Bundler. Use `RUBYOPT="-W0"` to suppress them.
341
+
273
342
  ### Linting & Style
274
343
  ```bash
275
344
  rubocop # Run RubyGem style checks
@@ -365,94 +434,180 @@ gem build # Build gemspec into .gem file
365
434
  ## Configuration Management
366
435
 
367
436
  ### Configuration Overview
368
- The gem uses JSON configuration files for managing YouTube channels, OpenAI settings, and automation workflows.
437
+ The gem uses JSON configuration files for managing YouTube channels, settings, and automation workflows. All configuration files are stored in `~/.config/appydave/`.
369
438
 
370
- **Configuration Tool:** `bin/configuration.rb`
439
+ **Configuration Tool:** `bin/configuration.rb` (installed as `ad_config`)
371
440
 
372
- ### Setting Up Configuration
441
+ **Complete configuration guide:** [docs/configuration/README.md](./docs/configuration/README.md)
373
442
 
374
- 1. **List available configurations:**
375
- ```bash
376
- bin/configuration.rb -l
377
- ```
443
+ ### Quick Start
378
444
 
379
- 2. **Create missing configuration files:**
445
+ **First-time setup:**
380
446
  ```bash
447
+ # Create empty configuration files (safe - won't overwrite existing files)
381
448
  bin/configuration.rb -c
449
+
450
+ # Copy example files
451
+ cp docs/configuration/settings.example.json ~/.config/appydave/settings.json
452
+ cp docs/configuration/channels.example.json ~/.config/appydave/channels.json
453
+ cp docs/configuration/.env.example .env
454
+
455
+ # Edit your values
456
+ bin/configuration.rb -e
382
457
  ```
383
458
 
384
- 3. **View configuration values:**
459
+ ### Configuration Commands
460
+
385
461
  ```bash
462
+ # List all configurations
463
+ bin/configuration.rb -l
464
+
465
+ # Create missing configuration files (safe - won't overwrite)
466
+ bin/configuration.rb -c
467
+
468
+ # View configuration values
386
469
  bin/configuration.rb -p settings,channels,youtube_automation
387
- ```
388
470
 
389
- 4. **Edit configurations in VS Code:**
390
- ```bash
471
+ # Edit configurations in VS Code
391
472
  bin/configuration.rb -e
392
473
  ```
393
474
 
394
475
  ### Configuration Types
395
476
 
396
- #### 1. Settings Config
397
- General application settings and paths.
477
+ #### 1. Settings Config (`~/.config/appydave/settings.json`)
478
+ General application settings and paths (non-secret configuration).
398
479
 
399
- **Typical structure:**
480
+ **Structure:**
400
481
  ```json
401
482
  {
402
- "project_paths": {
403
- "content": "/path/to/content",
404
- "video": "/path/to/video",
405
- "published": "/path/to/published",
406
- "abandoned": "/path/to/abandoned"
407
- }
483
+ "video-projects-root": "/Users/yourname/dev/video-projects",
484
+ "ecamm-recording-folder": "/Users/yourname/ecamm",
485
+ "download-folder": "/Users/yourname/Downloads",
486
+ "download-image-folder": "/Users/yourname/Downloads/images"
408
487
  }
409
488
  ```
410
489
 
411
- #### 2. Channels Config
490
+ **Key Settings:**
491
+
492
+ | Key | Purpose | Used By | Required |
493
+ |-----|---------|---------|----------|
494
+ | `video-projects-root` | Root directory for all video projects | VAT commands | ✅ For VAT |
495
+ | `ecamm-recording-folder` | Where Ecamm Live saves recordings | Move Images | Optional |
496
+ | `download-folder` | General downloads directory | Move Images | Optional |
497
+ | `download-image-folder` | Image downloads (defaults to `download-folder`) | Move Images | Optional |
498
+
499
+ **Safe to:**
500
+ - ✅ Version control (after removing personal paths)
501
+ - ✅ Share with team (as template)
502
+ - ✅ Commit to git (as `.example` file)
503
+
504
+ #### 2. Channels Config (`~/.config/appydave/channels.json`)
412
505
  YouTube channel definitions for multi-channel management.
413
506
 
414
- **Typical structure:**
507
+ **Structure:**
415
508
  ```json
416
509
  {
417
- "channels": [
418
- {
419
- "code": "main",
420
- "name": "Main Channel",
421
- "youtube_handle": "@channelhandle"
510
+ "channels": {
511
+ "appydave": {
512
+ "code": "ad",
513
+ "name": "AppyDave",
514
+ "youtube_handle": "@appydave",
515
+ "locations": {
516
+ "content_projects": "/path/to/content",
517
+ "video_projects": "/Users/yourname/dev/video-projects/v-appydave",
518
+ "published_projects": "/path/to/published",
519
+ "abandoned_projects": "/path/to/abandoned"
520
+ }
422
521
  }
423
- ]
522
+ }
424
523
  }
425
524
  ```
426
525
 
427
- #### 3. YouTube Automation Config
428
- Automation workflow configurations and sequences.
526
+ **Channel Properties:**
429
527
 
430
- #### 4. OpenAI Config (via dotenv)
431
- OpenAI API integration settings managed through environment variables:
528
+ | Property | Description | Example |
529
+ |----------|-------------|---------|
530
+ | `key` | Internal identifier (object key) | `"appydave"` |
531
+ | `code` | Short code for project naming | `"ad"` |
532
+ | `name` | Display name | `"AppyDave"` |
533
+ | `youtube_handle` | YouTube @ handle | `"@appydave"` |
432
534
 
433
- ```bash
434
- # .env file
435
- OPENAI_API_KEY=your_api_key_here
436
- ```
535
+ **Location Properties:**
437
536
 
438
- ### Configuration Locations
439
- Configuration files are typically stored in:
440
- - `~/.config/appydave-tools/` (user-level)
441
- - Or project-specific locations as defined in settings
537
+ | Location | Purpose | Can Use "NOT-SET" |
538
+ |----------|---------|-------------------|
539
+ | `content_projects` | Content planning/scripts | ✅ Yes |
540
+ | `video_projects` | Active video projects | ❌ No (required) |
541
+ | `published_projects` | Published video archives | ✅ Yes |
542
+ | `abandoned_projects` | Abandoned projects | ✅ Yes |
442
543
 
443
- ### Environment Variables
444
- The gem uses `dotenv` for environment variable management. Create a `.env` file in your project root:
544
+ Use `"NOT-SET"` as a placeholder for unconfigured locations.
545
+
546
+ **Safe to:**
547
+ - ✅ Version control structure (remove personal paths first)
548
+ - ⚠️ Each developer customizes paths locally
549
+ - ✅ Share channel definitions (codes, names, handles)
550
+
551
+ #### 3. YouTube Automation Config (`~/.config/appydave/youtube_automation.json`)
552
+ Automation workflow configurations and sequences (internal use).
553
+
554
+ #### 4. Environment Variables (`.env` file - project root)
555
+ **⚠️ CRITICAL: Secrets and API keys stored here, NEVER commit to version control!**
445
556
 
446
557
  ```bash
447
- # Required for YouTube API
448
- GOOGLE_CLIENT_ID=your_client_id
449
- GOOGLE_CLIENT_SECRET=your_client_secret
558
+ # OpenAI API Configuration (required for prompt_tools and youtube_automation)
559
+ # Get your API key from: https://platform.openai.com/api-keys
560
+ OPENAI_ACCESS_TOKEN=sk-your-actual-api-key-here
561
+ OPENAI_ORGANIZATION_ID=org-your-actual-org-id
450
562
 
451
- # Required for OpenAI features
452
- OPENAI_API_KEY=your_openai_api_key
563
+ # Enable OpenAI tools (set to 'true' to enable)
564
+ TOOLS_ENABLED=false
453
565
  ```
454
566
 
455
- **IMPORTANT:** Never commit `.env` files to version control. Ensure `.env` is in your `.gitignore`.
567
+ **Environment Variables:**
568
+
569
+ | Variable | Purpose | Required For | Secret? |
570
+ |----------|---------|--------------|---------|
571
+ | `OPENAI_ACCESS_TOKEN` | OpenAI API key | prompt_tools, youtube_automation | ✅ SECRET |
572
+ | `OPENAI_ORGANIZATION_ID` | OpenAI org ID | prompt_tools, youtube_automation | ✅ SECRET |
573
+ | `TOOLS_ENABLED` | Enable OpenAI configuration | Optional | ❌ No |
574
+
575
+ **Safe to:**
576
+ - ❌ **NEVER** version control
577
+ - ❌ **NEVER** share
578
+ - ❌ **NEVER** commit to git
579
+ - ✅ Keep local only
580
+ - ✅ Share `.env.example` template
581
+
582
+ ### Safety Features
583
+
584
+ **Automatic Backups:**
585
+ - Every config save creates timestamped backup: `filename.backup.YYYYMMDD-HHMMSS`
586
+ - Backups stored alongside config files in `~/.config/appydave/`
587
+ - Restore from backup: `cp settings.json.backup.20251109-203015 settings.json`
588
+
589
+ **Safe Configuration Creation:**
590
+ - `ad_config -c` only creates missing files, never overwrites existing ones
591
+ - Prevents accidental data loss from running setup commands
592
+
593
+ **Secrets Separation:**
594
+ - API keys stored in `.env` files (gitignored), not in JSON configs
595
+ - Configuration files can be safely version-controlled (after removing personal paths)
596
+
597
+ ### Migration from Legacy Config
598
+
599
+ **From `~/.vat-config` (DEPRECATED):**
600
+
601
+ The old `~/.vat-config` file is no longer used. VAT now uses `settings.json`.
602
+
603
+ **Migration steps:**
604
+ 1. Check your old config: `cat ~/.vat-config`
605
+ 2. Add value to settings.json: `ad_config -e`
606
+ 3. Add: `"video-projects-root": "/your/path/from/vat/config"`
607
+ 4. Test VAT still works: `vat list`
608
+ 5. Delete old file: `rm ~/.vat-config`
609
+
610
+ **Note:** The `vat init` command is deprecated. Use `ad_config -c` instead.
456
611
 
457
612
  ## Git Hooks & Security
458
613
 
data/README.md CHANGED
@@ -12,6 +12,7 @@ Instead of managing dozens of separate repositories, everything lives here - one
12
12
  - 🤖 Feed entire codebases to AI assistants in seconds
13
13
  - 📹 Batch update YouTube video metadata without clicking through the UI (update 50 videos in 5 minutes)
14
14
  - 📝 Process subtitle files - clean formatting, merge multi-part recordings, synchronize timelines
15
+ - 🎬 Manage video projects across local/S3/SSD storage with smart sync (collaborate on 50GB+ projects)
15
16
  - 🖼️ Organize downloaded images into project folders automatically (video asset workflow)
16
17
  - ⚙️ Manage multi-channel configurations from the command line (team-shareable JSON configs)
17
18
 
@@ -27,6 +28,62 @@ Or add to your Gemfile:
27
28
  gem 'appydave-tools'
28
29
  ```
29
30
 
31
+ ## Quick Start: Configuration
32
+
33
+ Most tools work out of the box, but some features (VAT, YouTube Manager, OpenAI tools) require configuration.
34
+
35
+ ### First-Time Setup
36
+
37
+ **1. Create configuration files:**
38
+
39
+ ```bash
40
+ ad_config -c
41
+ ```
42
+
43
+ This creates empty configuration files at `~/.config/appydave/`:
44
+ - `settings.json` - Paths and preferences
45
+ - `channels.json` - YouTube channel definitions
46
+ - `youtube-automation.json` - Automation workflows
47
+
48
+ **2. Option A: Copy example files**
49
+
50
+ ```bash
51
+ # Copy examples to your config directory
52
+ cp docs/configuration/settings.example.json ~/.config/appydave/settings.json
53
+ cp docs/configuration/channels.example.json ~/.config/appydave/channels.json
54
+
55
+ # Copy .env to project root (for API keys)
56
+ cp docs/configuration/.env.example .env
57
+ ```
58
+
59
+ Then edit each file and replace placeholders with your actual values.
60
+
61
+ **2. Option B: Edit directly in VS Code**
62
+
63
+ ```bash
64
+ ad_config -e
65
+ ```
66
+
67
+ Opens `~/.config/appydave/` for editing.
68
+
69
+ **3. Add your values**
70
+
71
+ Update the configuration files with your specific paths and settings.
72
+
73
+ **Required for VAT (Video Asset Tools):**
74
+ ```json
75
+ {
76
+ "video-projects-root": "/path/to/your/video-projects"
77
+ }
78
+ ```
79
+
80
+ **Required for OpenAI tools:**
81
+ ```bash
82
+ OPENAI_ACCESS_TOKEN=sk-your-actual-api-key
83
+ ```
84
+
85
+ **Full configuration guide:** [docs/configuration/README.md](./docs/configuration/README.md)
86
+
30
87
  ## The Tools
31
88
 
32
89
  ### 🤖 GPT Context Gatherer
@@ -124,6 +181,56 @@ subtitle_processor join -f "part1.srt,part2.srt" -b 200 -o merged.srt
124
181
 
125
182
  ---
126
183
 
184
+ ### 🎬 VAT (Video Asset Tools)
185
+
186
+ **The problem:** Managing large video files across local storage, cloud collaboration (S3), and archival storage (SSD) is complex and error-prone.
187
+
188
+ **The solution:** Unified CLI for multi-tenant video project management with smart sync, pattern matching, and workflow automation.
189
+
190
+ ```bash
191
+ # List all brands
192
+ vat list
193
+
194
+ # List projects for AppyDave brand
195
+ vat list appydave
196
+
197
+ # Upload files to S3 for collaboration
198
+ vat s3-up appydave b65
199
+
200
+ # Download collaborator's edits from S3
201
+ vat s3-down appydave b65
202
+
203
+ # Check sync status
204
+ vat s3-status appydave b65
205
+
206
+ # Clean up S3 after project completion
207
+ vat s3-cleanup appydave b65 --force
208
+ ```
209
+
210
+ **Configuration required:** Add `video-projects-root` to `settings.json` (see [Quick Start](#quick-start-configuration) above).
211
+
212
+ **Key Features:**
213
+ - **Multi-tenant**: Manages 6 brands (appydave, voz, aitldr, kiros, joy, ss)
214
+ - **Smart sync**: MD5-based file comparison (skip unchanged files)
215
+ - **Pattern matching**: `vat list appydave 'b6*'` (lists b60-b69)
216
+ - **Short names**: `b65` → `b65-guy-monroe-marketing-plan` (FliVideo workflow)
217
+ - **Auto-detection**: Run commands from project directory without args
218
+ - **Hybrid storage**: Local → S3 (collaboration) → SSD (archive)
219
+
220
+ **Workflows:**
221
+ - **FliVideo** (AppyDave): Sequential chapter-based recording with short name support
222
+ - **Storyline** (VOZ, AITLDR): Script-first narrative content with full project names
223
+
224
+ **Use cases:**
225
+ - Collaborate on video edits with team members via S3
226
+ - Archive completed projects to external SSD
227
+ - Manage video assets across multiple brands/clients
228
+ - Quick project discovery with pattern matching
229
+
230
+ [Full documentation →](./docs/usage/vat.md)
231
+
232
+ ---
233
+
127
234
  ### 🎯 Prompt Tools *(Experimental - Not actively used)*
128
235
 
129
236
  **The problem:** Running OpenAI prompts with placeholder substitution and output management.
@@ -200,7 +307,7 @@ youtube_automation -s 01-1 -d
200
307
  # List all configurations
201
308
  ad_config -l
202
309
 
203
- # Create missing config files with templates
310
+ # Create missing config files (safe - won't overwrite existing files)
204
311
  ad_config -c
205
312
 
206
313
  # Edit configurations in VS Code
@@ -214,21 +321,47 @@ ad_config -p
214
321
  ```
215
322
 
216
323
  **What it manages:**
217
- - **settings.json**: Project folder paths (content, video, published, abandoned)
218
- - **channels.json**: YouTube channel definitions (code, name, youtube_handle)
219
- - **youtube_automation.json**: Automation sequence configurations
324
+
325
+ | File | Purpose | Safe to Version Control? |
326
+ |------|---------|-------------------------|
327
+ | `settings.json` | Paths and preferences (video-projects-root, download folders, etc.) | ✅ Yes (after removing personal paths) |
328
+ | `channels.json` | YouTube channel definitions (code, name, youtube_handle, locations) | ✅ Yes (share structure, customize paths locally) |
329
+ | `youtube_automation.json` | Automation workflow configurations | ✅ Yes (if no sensitive data) |
330
+ | `.env` | **Secrets and API keys** | ❌ **NEVER** (gitignored) |
331
+
332
+ **Key Settings:**
333
+
334
+ - **video-projects-root** - Root directory for all video projects (required for VAT)
335
+ - **ecamm-recording-folder** - Where Ecamm Live saves recordings
336
+ - **download-folder** - General downloads directory
337
+ - **download-image-folder** - Image downloads (defaults to download-folder)
338
+
339
+ **Channel Configuration:**
340
+
341
+ Each channel defines:
342
+ - **code** - Short code for project naming (e.g., "ad" for AppyDave)
343
+ - **name** - Display name
344
+ - **youtube_handle** - YouTube @ handle
345
+ - **locations** - Four project location types:
346
+ - `content_projects` - Content planning/scripts
347
+ - `video_projects` - Active video projects (**required**)
348
+ - `published_projects` - Published video archives
349
+ - `abandoned_projects` - Abandoned projects
350
+
351
+ Use `"NOT-SET"` as a placeholder for unconfigured locations.
220
352
 
221
353
  **Use cases:**
222
354
  - **Multi-channel management**: Switch between different YouTube channels
223
- - **Team collaboration**: Share configuration files via Git/Dropbox (excluding secrets)
224
- - **Workflow standardization**: Consistent paths across team members
355
+ - **Team collaboration**: Share configuration structure via Git (each developer customizes paths)
356
+ - **Workflow standardization**: Consistent channel codes/names across team
225
357
  - **Automation setup**: Define reusable prompt sequences
226
358
 
227
- **Team collaboration notes:**
228
- - Configuration files can be version-controlled (they contain no secrets)
229
- - Each team member can maintain their own `~/.config/appydave/` directory
230
- - Paths can be customized per developer machine
231
- - Secrets (API keys) stored separately in `.env` files (gitignored)
359
+ **Safety Features:**
360
+ - **Automatic backups**: Every config save creates timestamped backup (`.backup.YYYYMMDD-HHMMSS`)
361
+ - **Safe creation**: `ad_config -c` only creates missing files, never overwrites existing ones
362
+ - **Secrets separation**: API keys stored in `.env` files (gitignored), not in configs
363
+
364
+ **Full configuration guide:** [docs/configuration/README.md](./docs/configuration/README.md)
232
365
 
233
366
  ---
234
367