appydave-tools 0.15.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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +6 -0
  3. data/AGENTS.md +22 -0
  4. data/CHANGELOG.md +19 -0
  5. data/CLAUDE.md +318 -79
  6. data/README.md +390 -81
  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/subtitle_manager.rb +18 -12
  11. data/bin/subtitle_processor.rb +158 -0
  12. data/bin/sync_from_ssd.rb +236 -0
  13. data/bin/vat +623 -0
  14. data/docs/README.md +169 -0
  15. data/docs/archive/codebase-audit-2025-01.md +424 -0
  16. data/docs/archive/documentation-framework-proposal.md +808 -0
  17. data/docs/archive/purpose-and-philosophy.md +110 -0
  18. data/docs/archive/test-coverage-quick-wins.md +342 -0
  19. data/docs/archive/tool-discovery.md +199 -0
  20. data/docs/archive/tool-documentation-analysis.md +592 -0
  21. data/docs/configuration/.env.example +19 -0
  22. data/docs/configuration/README.md +394 -0
  23. data/docs/configuration/channels.example.json +26 -0
  24. data/docs/configuration/settings.example.json +6 -0
  25. data/docs/development/CODEX-recommendations.md +123 -0
  26. data/docs/development/README.md +100 -0
  27. data/docs/development/cli-architecture-patterns.md +1604 -0
  28. data/docs/development/pattern-comparison.md +284 -0
  29. data/docs/prd-unified-brands-configuration.md +792 -0
  30. data/docs/project-brand-systems-analysis.md +934 -0
  31. data/docs/tools/bank-reconciliation.md +269 -0
  32. data/docs/tools/cli-actions.md +444 -0
  33. data/docs/tools/configuration.md +329 -0
  34. data/docs/{usage → tools}/gpt-context.md +118 -7
  35. data/docs/tools/index.md +324 -0
  36. data/docs/tools/move-images.md +295 -0
  37. data/docs/tools/name-manager.md +322 -0
  38. data/docs/tools/prompt-tools.md +209 -0
  39. data/docs/tools/subtitle-processor.md +242 -0
  40. data/docs/tools/youtube-automation.md +258 -0
  41. data/docs/tools/youtube-manager.md +248 -0
  42. data/docs/vat/dam-vision.md +123 -0
  43. data/docs/vat/session-summary-2025-11-09.md +297 -0
  44. data/docs/vat/usage.md +508 -0
  45. data/docs/vat/vat-testing-plan.md +801 -0
  46. data/lib/appydave/tools/configuration/models/brands_config.rb +238 -0
  47. data/lib/appydave/tools/configuration/models/config_base.rb +7 -0
  48. data/lib/appydave/tools/configuration/models/settings_config.rb +4 -0
  49. data/lib/appydave/tools/{subtitle_manager → subtitle_processor}/clean.rb +1 -1
  50. data/lib/appydave/tools/{subtitle_manager → subtitle_processor}/join.rb +5 -2
  51. data/lib/appydave/tools/vat/config.rb +153 -0
  52. data/lib/appydave/tools/vat/config_loader.rb +91 -0
  53. data/lib/appydave/tools/vat/manifest_generator.rb +239 -0
  54. data/lib/appydave/tools/vat/project_listing.rb +198 -0
  55. data/lib/appydave/tools/vat/project_resolver.rb +132 -0
  56. data/lib/appydave/tools/vat/s3_operations.rb +560 -0
  57. data/lib/appydave/tools/version.rb +1 -1
  58. data/lib/appydave/tools.rb +11 -5
  59. data/package.json +1 -1
  60. metadata +85 -14
  61. data/docs/dam/overview.md +0 -28
  62. data/lib/mj-paste-test/main.rb +0 -35
  63. data/lib/mj-paste-test/prompts.txt +0 -18
  64. data/lib/mj-paste-test/readme-leonardo.md +0 -0
  65. /data/lib/appydave/tools/{subtitle_manager → subtitle_processor}/_doc-clean.md +0 -0
  66. /data/lib/appydave/tools/{subtitle_manager → subtitle_processor}/_doc-join.md +0 -0
  67. /data/lib/appydave/tools/{subtitle_manager → subtitle_processor}/_doc-todo.md +0 -0
data/README.md CHANGED
@@ -1,157 +1,466 @@
1
- # Appydave Tools
1
+ # AppyDave Tools
2
2
 
3
- > AppyDave YouTube Automation Tools
3
+ > **AppyDave's YouTube productivity toolkit** - Command-line utilities that automate the boring stuff so you can focus on creating content.
4
+
5
+ ## Why This Exists
6
+
7
+ As a YouTuber, I got tired of repetitive tasks eating into my creative time. So I built tools to handle them.
8
+
9
+ Instead of managing dozens of separate repositories, everything lives here - one codebase, easier maintenance, and each tool can be featured in its own video tutorial.
10
+
11
+ **Quick wins:**
12
+ - 🤖 Feed entire codebases to AI assistants in seconds
13
+ - 📹 Batch update YouTube video metadata without clicking through the UI (update 50 videos in 5 minutes)
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)
16
+ - 🖼️ Organize downloaded images into project folders automatically (video asset workflow)
17
+ - ⚙️ Manage multi-channel configurations from the command line (team-shareable JSON configs)
4
18
 
5
19
  ## Installation
6
20
 
7
- Add this line to your application's Gemfile:
21
+ ```bash
22
+ gem install appydave-tools
23
+ ```
24
+
25
+ Or add to your Gemfile:
8
26
 
9
27
  ```ruby
10
28
  gem 'appydave-tools'
11
29
  ```
12
30
 
13
- And then execute:
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:**
14
38
 
15
39
  ```bash
16
- bundle install
40
+ ad_config -c
17
41
  ```
18
42
 
19
- Or install it yourself as:
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**
20
49
 
21
50
  ```bash
22
- gem install appydave-tools
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
23
57
  ```
24
58
 
25
- ## Stories
59
+ Then edit each file and replace placeholders with your actual values.
26
60
 
27
- ### Main Story
61
+ **2. Option B: Edit directly in VS Code**
28
62
 
29
- As a Content Creator, I want accellerate my video creation, so that I can improve speed and quality of my content
63
+ ```bash
64
+ ad_config -e
65
+ ```
30
66
 
31
- See all [stories](./STORIES.md)
67
+ Opens `~/.config/appydave/` for editing.
32
68
 
69
+ **3. Add your values**
33
70
 
34
- ## Usage
71
+ Update the configuration files with your specific paths and settings.
35
72
 
36
- ### CLI Tools
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
+
87
+ ## The Tools
37
88
 
38
- This gem provides several command-line tools for content creation and YouTube automation:
89
+ ### 🤖 GPT Context Gatherer
39
90
 
40
- #### GPT Context Gatherer
41
- Collect and organize project files for AI context analysis:
91
+ **The problem:** AI assistants need context about your code, but copying files is tedious.
92
+
93
+ **The solution:** Automatically collect and format project files for AI context.
42
94
 
43
95
  ```bash
44
- # Basic usage - gather all Ruby files, exclude specs
45
- gpt_context -i '**/*.rb' -e 'spec/**/*' -d -o context.txt
96
+ # Gather all Ruby files, skip tests, save to clipboard
97
+ gpt_context -i '**/*.rb' -e 'spec/**/*' -d
98
+
99
+ # Get project structure as a tree
100
+ gpt_context -i '**/*' -f tree -d
101
+
102
+ # Multiple file types with custom output
103
+ gpt_context -i 'apps/**/*.ts' -i 'apps/**/*.tsx' -e '**/node_modules/**/*' -o context.txt
104
+ ```
105
+
106
+ **Use cases:** Working with ChatGPT, Claude, or any AI assistant on your codebase.
107
+
108
+ [Full documentation →](./docs/usage/gpt-context.md)
109
+
110
+ ---
46
111
 
47
- # Multiple patterns with tree and content output
48
- gpt_context -i 'lib/**/*.rb' -i 'bin/**/*.rb' -f tree,content -d
112
+ ### 📹 YouTube Manager
49
113
 
50
- # Advanced filtering for web projects
51
- gpt_context -i 'apps/**/*.ts' -i 'apps/**/*.tsx' -e '**/node_modules/**/*' -e '**/_generated/**/*' -d -f tree -o typescript-files.txt
114
+ **The problem:** Updating video metadata through YouTube Studio is slow and repetitive, especially for bulk operations.
52
115
 
53
- # Documentation and config files
54
- gpt_context -i 'docs/**/*' -i '**/*.json' -i '**/*.config.*' -e '**/node_modules/**/*' -d -f tree
116
+ **The solution:** Manage YouTube video metadata via API from your terminal - CRUD operations on videos.
117
+
118
+ ```bash
119
+ # Get video details (title, description, tags, category, captions)
120
+ youtube_manager get --video-id YOUR_VIDEO_ID
121
+
122
+ # Update title and description
123
+ youtube_manager update --video-id YOUR_VIDEO_ID \
124
+ --title "New Title" \
125
+ --description "Updated description"
126
+
127
+ # Update tags (replaces existing tags)
128
+ youtube_manager update --video-id YOUR_VIDEO_ID --tags "tutorial,productivity,automation"
129
+
130
+ # Update category
131
+ youtube_manager update --video-id YOUR_VIDEO_ID --category-id 28
55
132
  ```
56
133
 
57
- See detailed usage guide: [GPT Context Gatherer](./docs/usage/gpt-context.md)
134
+ **Specific use cases:**
135
+ - **Post-rebrand updates**: Changed channel name? Update 50 video descriptions in minutes
136
+ - **Tag standardization**: Ensure consistent tagging across your entire catalog
137
+ - **Metadata retrieval**: Export video details for analysis or backup
138
+ - **Batch corrections**: Fix typos in titles across multiple videos
139
+ - **Category changes**: Recategorize videos when YouTube updates categories
140
+ - **Series updates**: Add series links to descriptions across episode batches
141
+
142
+ **What it does:**
143
+ - **Get**: Retrieves complete video metadata including captions
144
+ - **Update**: Modifies title, description, tags, or category via YouTube Data API v3
145
+ - **Authorization**: Handles OAuth2 flow with local callback server
146
+ - **Reporting**: Generates detailed reports of video metadata
147
+
148
+ **Why use this vs YouTube Studio:**
149
+ - **Speed**: Update 20 videos in 5 minutes vs 30+ minutes clicking through UI
150
+ - **Scriptable**: Integrate into automation workflows
151
+ - **Bulk operations**: Loop through video IDs from a CSV
152
+ - **Version control**: Track metadata changes in Git
153
+ - **Backup**: Export all video metadata as JSON
154
+
155
+ ---
156
+
157
+ ### 📝 Subtitle Processor
158
+
159
+ **The problem:** Raw subtitle files need cleanup, and multi-part recordings need merged subtitles.
160
+
161
+ **The solution:** Process and transform SRT files - clean formatting, merge duplicates, synchronize timelines.
58
162
 
59
- #### YouTube Manager
60
163
  ```bash
61
- # Get video details
62
- bin/youtube_manager.rb get [options]
164
+ # Clean auto-generated subtitles (removes HTML tags, merges duplicates, normalizes spacing)
165
+ subtitle_processor clean -f input.srt -o cleaned.srt
166
+
167
+ # Merge multiple subtitle files with timeline synchronization
168
+ subtitle_processor join -d ./parts -f "*.srt" -o final.srt
63
169
 
64
- # Update video metadata
65
- bin/youtube_manager.rb update [options]
170
+ # Custom time buffer between merged sections (in milliseconds)
171
+ subtitle_processor join -f "part1.srt,part2.srt" -b 200 -o merged.srt
66
172
  ```
67
173
 
68
- #### Subtitle Manager
174
+ **What it does:**
175
+ - **Clean**: Removes `<u>` tags, merges duplicate entries, normalizes line breaks and spacing
176
+ - **Join**: Parses multiple SRT files, adjusts timestamps with buffers, merges into single timeline
177
+
178
+ **Use cases:** Cleaning messy YouTube auto-captions, merging FliVideo multi-part recording subtitles.
179
+
180
+ **Note:** CLI command is `subtitle_processor` (renamed from `subtitle_manager` for accuracy - this tool *processes* files, not manages state).
181
+
182
+ ---
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
+
69
190
  ```bash
70
- # Clean subtitle files
71
- bin/subtitle_manager.rb clean [options]
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
72
205
 
73
- # Join multiple subtitle parts
74
- bin/subtitle_manager.rb join [options]
206
+ # Clean up S3 after project completion
207
+ vat s3-cleanup appydave b65 --force
75
208
  ```
76
209
 
77
- #### Prompt Tools
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
+
234
+ ### 🎯 Prompt Tools *(Experimental - Not actively used)*
235
+
236
+ **The problem:** Running OpenAI prompts with placeholder substitution and output management.
237
+
238
+ **The solution:** Execute OpenAI completion API calls with template support.
239
+
78
240
  ```bash
79
- # Run AI prompt completion
80
- bin/prompt_tools.rb completion [options]
241
+ # Run prompt from text
242
+ prompt_tools completion -p "Your prompt here" -o output.txt
243
+
244
+ # Run prompt from file with placeholders
245
+ prompt_tools completion -f prompt_template.md -k topic=Ruby,style=tutorial -c
246
+
247
+ # Options:
248
+ # -p, --prompt Inline prompt text
249
+ # -f, --file Prompt template file
250
+ # -k, --placeholders Key-value pairs for {placeholder} substitution
251
+ # -o, --output Save to file
252
+ # -c, --clipboard Copy to clipboard
253
+ # -m, --model OpenAI model to use
81
254
  ```
82
255
 
256
+ **What it does:**
257
+ - Sends prompts to OpenAI Completion API (older GPT-3 models)
258
+ - Supports template files with `{placeholder}` substitution
259
+ - Outputs to file, clipboard, or stdout
83
260
 
84
- ## Development
261
+ **Current status:** ⚠️ **Not in active use** - Uses deprecated OpenAI Completion API (`davinci-codex`). Modern alternative: Use ChatGPT or Claude directly, or migrate to Chat API.
262
+
263
+ **Potential use cases:** Template-based content generation, automated prompt workflows (if migrated to Chat API).
85
264
 
86
- Checkout the repo
265
+ ---
266
+
267
+ ### ⚡ YouTube Automation *(Internal/Experimental)*
268
+
269
+ **The problem:** Video content creation workflows involve multiple steps: research → scripting → production.
270
+
271
+ **The solution:** Run predefined prompt sequences against OpenAI API to automate research and content generation steps.
87
272
 
88
273
  ```bash
89
- git clone https://github.com/appydave/appydave-tools
274
+ # Run automation sequence (requires configuration)
275
+ youtube_automation -s 01-1
276
+
277
+ # With debug output
278
+ youtube_automation -s 01-1 -d
90
279
  ```
91
280
 
92
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests.
281
+ **What it does:**
282
+ - Loads sequence configuration from `~/.config/appydave/youtube_automation.json`
283
+ - Reads prompt templates from Dropbox (`_common/raw_prompts/`)
284
+ - Executes OpenAI API calls for each sequence step
285
+ - Saves responses to output files
286
+
287
+ **Configuration required:**
288
+ - Sequence definitions in `youtube_automation.json`
289
+ - Prompt template files in configured Dropbox path
290
+ - `OPENAI_ACCESS_TOKEN` environment variable
291
+
292
+ **Current status:** ⚠️ **Internal tool** - Hardcoded Dropbox paths, uses deprecated Completion API, not documented for external use.
293
+
294
+ **Relationship to other tools:** This is separate from **Move Images** tool (which organizes downloaded images into video project asset folders).
295
+
296
+ **Use cases:** Automated content research, script outline generation, multi-step prompt workflows.
297
+
298
+ ---
299
+
300
+ ### ⚙️ Configuration Manager
93
301
 
94
- You can also run `bin/console` for an interactive prompt that will allow you to experiment.
302
+ **The problem:** Managing settings for multiple YouTube channels, project paths, and automation sequences gets messy.
303
+
304
+ **The solution:** Centralized JSON-based configuration stored in `~/.config/appydave/`.
95
305
 
96
306
  ```bash
97
- bin/console
307
+ # List all configurations
308
+ ad_config -l
309
+
310
+ # Create missing config files (safe - won't overwrite existing files)
311
+ ad_config -c
312
+
313
+ # Edit configurations in VS Code
314
+ ad_config -e
315
+
316
+ # View specific configuration values
317
+ ad_config -p settings,channels
318
+
319
+ # View all configurations
320
+ ad_config -p
321
+ ```
322
+
323
+ **What it manages:**
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.
352
+
353
+ **Use cases:**
354
+ - **Multi-channel management**: Switch between different YouTube channels
355
+ - **Team collaboration**: Share configuration structure via Git (each developer customizes paths)
356
+ - **Workflow standardization**: Consistent channel codes/names across team
357
+ - **Automation setup**: Define reusable prompt sequences
98
358
 
99
- Appydave::Tools::VERSION
100
- # => "0.14.0"
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
101
363
 
102
- # Access configuration
103
- config = Appydave::Tools::Configuration::Config.new
104
- # => #<Appydave::Tools::Configuration::Config:...>
364
+ **Full configuration guide:** [docs/configuration/README.md](./docs/configuration/README.md)
365
+
366
+ ---
367
+
368
+ ### 🖼️ Move Images *(Development tool)*
369
+
370
+ **The problem:** Downloaded images need organizing with proper naming.
371
+
372
+ **The solution:** Batch move and rename to project folders.
373
+
374
+ ```bash
375
+ # Organize intro images for video project
376
+ bin/move_images.rb -f b40 intro b40
377
+ # Result: b40-intro-1.jpg, b40-intro-2.jpg in assets/intro/
105
378
  ```
106
379
 
107
- `appydave-tools` is setup with Guard, run `guard`, this will watch development file changes and run tests automatically, if successful, it will then run rubocop for style quality.
380
+ **Use cases:** B-roll organization, thumbnail preparation.
381
+
382
+ ---
383
+
384
+ ## Philosophy
108
385
 
109
- To release a new version, update the version number in `version.rb`, build the gem and push the `.gem` file to [rubygems.org](https://rubygems.org).
386
+ **One codebase, multiple tools.** Easier to maintain than dozens of repos.
387
+
388
+ **Single-purpose utilities.** Each tool does one thing well.
389
+
390
+ **YouTube workflow focus.** Built for content creators who code.
391
+
392
+ **Language-agnostic.** Currently Ruby, but could be rewritten if needed.
393
+
394
+ [Read the full philosophy →](./docs/purpose-and-philosophy.md)
395
+
396
+ ---
397
+
398
+ ## Development
110
399
 
111
400
  ```bash
112
- rake publish
113
- rake clean
401
+ # Clone the repo
402
+ git clone https://github.com/appydave/appydave-tools
403
+
404
+ # Setup
405
+ bin/setup
406
+
407
+ # Run tests
408
+ rake spec
409
+
410
+ # Auto-run tests on file changes
411
+ guard
412
+
413
+ # Interactive console
414
+ bin/console
114
415
  ```
115
416
 
116
- ## Git helpers used by this project
417
+ ### Semantic Versioning
117
418
 
118
- Add the follow helpers to your `alias` file
419
+ This project uses **automated versioning** via semantic-release. Don't manually edit version files.
119
420
 
421
+ **Commit message format:**
120
422
  ```bash
121
- function kcommit()
122
- {
123
- echo 'git add .'
124
- git add .
125
- echo "git commit -m "$1""
126
- git commit -m "$1"
127
- echo 'git pull'
128
- git pull
129
- echo 'git push'
130
- git push
131
- sleep 3
132
- run_id="$(gh run list --limit 1 | grep -Eo "[0-9]{9,11}")"
133
- gh run watch $run_id --exit-status && echo "run completed and successful" && git pull && git tag | sort -V | tail -1
134
- }
135
- function kchore () { kcommit "chore: $1" }
136
- function kdocs () { kcommit "docs: $1" }
137
- function kfix () { kcommit "fix: $1" }
138
- function kfeat () { kcommit "feat: $1" }
139
- function ktest () { kcommit "test: $1" }
140
- function krefactor () { kcommit "refactor: $1" }
423
+ feat: add new feature # Minor version bump
424
+ fix: bug fix # Patch version bump
425
+ chore: maintenance # No version bump
426
+
427
+ # Breaking changes
428
+ feat!: breaking change
141
429
  ```
142
430
 
431
+ CI/CD automatically handles versioning, changelog, and RubyGems publishing.
432
+
433
+ ---
434
+
143
435
  ## Contributing
144
436
 
145
- Bug reports and pull requests are welcome on GitHub at https://github.com/appydave/appydave-tools. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
437
+ **Welcome:**
438
+ - 🐛 Bug fixes
439
+ - 📝 Documentation improvements
440
+ - ⚡ Performance enhancements
441
+ - 🎯 New single-purpose tools that fit the workflow
442
+
443
+ **Not looking for:**
444
+ - ❌ Framework-style architectures
445
+ - ❌ Tools that create dependencies between utilities
446
+ - ❌ Enterprise complexity
447
+
448
+ [Code of Conduct →](./CODE_OF_CONDUCT.md)
449
+
450
+ ---
146
451
 
147
452
  ## License
148
453
 
149
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
454
+ MIT License - Copyright (c) David Cruwys
455
+
456
+ See [LICENSE.txt](LICENSE.txt) for details.
150
457
 
151
- ## Code of Conduct
458
+ ---
152
459
 
153
- Everyone interacting in the Appydave Tools project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/appydave/appydave-tools/blob/master/CODE_OF_CONDUCT.md).
460
+ ## Connect
154
461
 
155
- ## Copyright
462
+ - 🌐 Website: [appydave.com](http://appydave.com)
463
+ - 📺 YouTube: [@AppyDave](https://youtube.com/@appydave)
464
+ - 🐙 GitHub: [appydave](https://github.com/appydave)
156
465
 
157
- Copyright (c) David Cruwys. See [MIT License](LICENSE.txt) for further details.
466
+ Built with by [David Cruwys](https://davidcruwys.com)