Skip to content

Vellocity Media Automation Tools

Scripts and templates for mechanizing the media growth strategy.

Quick Start

1. Daily Content Briefing (OpenClaw cron — 8 AM CT)

node daily-briefing.js              # Today's briefing
node daily-briefing.js --day Tuesday # Preview a specific day
node daily-briefing.js --json        # JSON for Telegram bot integration

Deploy to OpenClaw:

# Copy to OpenClaw workspace
scp daily-briefing.js content-calendar.json openclaw:/home/node/openclaw/media-tools/

# Add cron job (via OpenClaw admin or config)
# Schedule: 8 AM CT daily, isolated session
# Command: node /home/node/openclaw/media-tools/daily-briefing.js
# Action: Send output to Telegram

2. Content Buffer Monitor (OpenClaw cron — Mondays 9 AM CT)

node buffer-monitor.js                    # Full status report
node buffer-monitor.js --log youtube 2    # Log 2 YouTube videos published
node buffer-monitor.js --log tiktok 3     # Log 3 TikToks published
node buffer-monitor.js --set-start 2026-04-07  # Set campaign start date
node buffer-monitor.js --json             # JSON for Telegram
node buffer-monitor.js --reset            # New campaign

Deploy to OpenClaw:

scp buffer-monitor.js openclaw:/home/node/openclaw/media-tools/

# Cron: Mondays 9 AM CT, isolated session
# Command: node /home/node/openclaw/media-tools/buffer-monitor.js
# Also: OpenClaw can accept "log youtube 2" commands via Telegram to update counts

3. YouTube Script → Substack Draft (Claude dispatch)

claude dispatch -p "$(cat dispatch-substack.md)

---
SCRIPT:
$(cat path/to/youtube-script.txt)

PILLAR: Cloud Marketplace GTM Mastery
EPISODE_TITLE: Why 90% of Marketplace Listings Never Generate Pipeline
"

4. YouTube Script → SEO Metadata (Claude dispatch)

claude dispatch -p "$(cat dispatch-youtube-seo.md)

---
SCRIPT:
$(cat path/to/youtube-script.txt)

TARGET_KEYWORD: cloud marketplace GTM strategy
SERIES: Marketplace GTM Playbook
EPISODE_NUMBER: 1
PILLAR: Cloud Marketplace GTM Mastery
"

5. Full Repurposing Pipeline — 1 Script → 8 Assets (Claude cowork)

./repurpose-pipeline.sh path/to/script.txt \
  "Cloud Marketplace GTM Mastery" \
  "Why 90% of Marketplace Listings Never Generate Pipeline" \
  "cloud marketplace GTM strategy"

Launches 8 parallel Claude agents. Output goes to ./output/<date>-<slug>/: - substack-article.md — Newsletter draft - youtube-seo.md — Title, description, tags, thumbnail brief - clip-suggestions.md — 3-4 TikTok/Reels timestamps + captions - linkedin-carousel.md — 8-slide carousel text - instagram-carousel.md — 7-slide carousel text - linkedin-polls-text-threads.md — Poll + 2 text posts + Threads versions - thumbnail-brief.md — 3-element thumbnail spec - podcast-show-notes.md — Episode notes + audiogram suggestions

6. LinkedIn → Threads Cross-Post Queue (OpenClaw cron — daily 10 AM CT)

node crosspost-threads.js --add "Your LinkedIn text post here"
node crosspost-threads.js --add-from-file posts.txt   # --- separated
node crosspost-threads.js --list                        # Queue status
node crosspost-threads.js --dry-run                     # Preview
node crosspost-threads.js                               # Post next item
node crosspost-threads.js --mark-posted <id>            # Manual confirmation

Environment variables (for API mode):

export THREADS_USER_ID=your_user_id
export THREADS_ACCESS_TOKEN=your_token

Without API credentials, the script outputs the post text for manual copy-paste and tracks status via --mark-posted.

Deploy to OpenClaw:

scp crosspost-threads.js openclaw:/home/node/openclaw/media-tools/

# Cron: Daily 10 AM CT (Threads rush hour per Metricool 2026)
# Command: node /home/node/openclaw/media-tools/crosspost-threads.js

File Overview

File Purpose Runs on
content-calendar.json Weekly schedule, cadence targets, milestones Data file
daily-briefing.js Daily "what to post today" briefing OpenClaw (8 AM cron)
buffer-monitor.js Track published vs. target cadence OpenClaw (Mon 9 AM cron)
dispatch-substack.md Prompt template: script → Substack article Claude dispatch
dispatch-youtube-seo.md Prompt template: script → SEO metadata Claude dispatch
repurpose-pipeline.sh 1 script → 8 assets via parallel agents Local (claude cowork)
crosspost-threads.js Queue-based LinkedIn → Threads cross-posting OpenClaw (10 AM cron)
email-monitor.js Poll agent01@vell.ai inbox via IMAP OpenClaw (every 5 min cron)

OpenClaw Cron Summary

Job Schedule Command
Daily briefing 8 AM CT, 7 days/week node media-tools/daily-briefing.js
Buffer monitor Monday 9 AM CT node media-tools/buffer-monitor.js
Threads cross-post Daily 10 AM CT node media-tools/crosspost-threads.js
Email monitor Every 5 minutes node media-tools/email-monitor.js

7. Email Monitor (OpenClaw cron — every 5 minutes)

node email-monitor.js                    # Check for unread emails
node email-monitor.js --summary          # Quick inbox status
node email-monitor.js --json             # JSON for Telegram
node email-monitor.js --mark-read <uid>  # Mark a message as read
node email-monitor.js --since 48h        # Emails from last 48 hours
node email-monitor.js --test             # Test IMAP connection

Environment variables:

export GMAIL_IMAP_USER=agent01@vell.ai
export GMAIL_IMAP_PASSWORD=<app-password>  # Google App Password, NOT account password

Setup: 1. Enable IMAP: Google Workspace Admin > Apps > Gmail > IMAP access > ON 2. Enable 2-Step Verification for agent01@vell.ai 3. Generate App Password: myaccount.google.com > Security > App Passwords 4. Install dependency on OpenClaw: npm install imapflow

Deploy to OpenClaw:

scp email-monitor.js openclaw:/home/node/openclaw/media-tools/

# Cron: Every 5 minutes
# Command: node /home/node/openclaw/media-tools/email-monitor.js
# Action: Send output to Telegram (only when new emails found)

Integration with Repurpose Pipeline

The repurpose pipeline's linkedin-polls-text-threads.md output includes Threads-ready text. Feed it directly into the cross-post queue:

# After running repurpose-pipeline.sh, extract Threads posts and queue them
# (Manual for now — can be automated with a post-processing script)
node crosspost-threads.js --add-from-file output/2026-04-07-episode-slug/threads-posts.txt