Open-source creator outreach platform for GTM Engineering
Quick Start · Docs · Deploy · Contributing
GTM teams manage creator outreach in spreadsheets. Contacts live in one tab, DM drafts in another, follow-up schedules in a third. Nothing talks to each other, nothing is automated, and pipeline visibility is nonexistent.
There is no open-source tool that bridges discovery → outreach → conversion for creator programs. Creator Command Center fills that gap with a purpose-built dashboard, a multi-channel outreach engine, and an API surface designed for both humans and AI agents.
| Problem | How CCC Solves It |
|---|---|
| Scattered contacts across sheets and DMs | Unified CRM with filters, search, and inline editing |
| Manual copy-paste outreach | Template engine with per-platform send (email API, DM automation) |
| No follow-up discipline | Automated follow-up sequences with reply detection |
| Zero pipeline visibility | Real-time funnel analytics and conversion metrics |
| Can't plug into agent workflows | REST API + planned MCP server for AI agent integration |
# Clone and install
git clone https://github.com/0xjitsu/creator-command-center.git
cd creator-command-center
pnpm install
# Configure environment
cp apps/command-center/.env.example apps/command-center/.env.local
# Edit .env.local with your Supabase + Google OAuth credentials
# Seed sample data (144 creators)
cd packages/db && pnpm seed:all
# Start dev server
cd ../.. && pnpm dev
# Open http://localhost:3000| Feature | Status | Description |
|---|---|---|
| Creator CRM | Live | 144 creators with filters, search, bulk actions, inline stage editing, column visibility |
| Outreach Queue | Live | Draft, review, and send personalized messages across platforms |
| DM Focus Mode | Live | One-DM-at-a-time queue with editable textarea, progress bar, rate limit badges |
| Campaign Templates | Live | Cold DM, cold email, and follow-up sequences with archetype-aware variations |
| CSV Import | Live | Upload CSV, map columns, preview, batch insert with deduplication |
| Analytics | Live | Pipeline funnel visualization, platform distribution, conversion metrics |
| Rate Limiter | Live | Per-platform daily caps, warm-up schedule, circuit breaker (auto-pause on high failure rate) |
| Gmail API | Live | OAuth connect/disconnect, RFC 2822 send, token refresh, reply detection |
| Follow-Up Automation | Live | Daily cron job: reply detection, auto-send email follow-ups, queue DM follow-ups as drafts |
| OAuth Connections | Live | Connect Instagram (Meta), TikTok, and Gmail accounts via Settings page |
| Supabase Realtime | Live | Live dashboard updates — creators table and outreach queue auto-refresh on data changes |
| DM Automation Server | Live | Local Playwright HTTP server for automated DM sending from the dashboard UI |
┌──────────────────────────────┐
│ COMMAND CENTER │
│ Next.js 16 + shadcn/ui │
│ │
│ Creators │ Queue │ Analytics │
│ Import │ Settings │ Guide │
└────────────┬─────────────────┘
│
┌────────────▼─────────────────┐
│ OUTREACH ENGINE │
│ Templates → Personalization │
│ → Rate Limiter → Send │
└──┬────┬────┬────┬────────────┘
│ │ │ │
Gmail IG TikTok Twitter
(API) (DM) (DM) (Copy)
│
┌────────────▼─────────────────┐
│ SUPABASE │
│ PostgreSQL + Realtime │
│ │
│ creators · outreach_log │
│ rate_limit_state · oauth │
└──────────────────────────────┘
Prospect → Contacted → Replied → Negotiating → Onboarded → Active
↘ Declined
Each stage transition is driven by the outreach lifecycle state machine — events like initial_sent, reply_detected, and sequence_complete automatically advance both the pipeline stage and DM status on the creator record.
creator-command-center/
├── apps/
│ └── command-center/ # Next.js 16 dashboard
│ └── src/
│ ├── app/ # App Router pages + API routes
│ │ └── api/
│ │ ├── outreach/
│ │ │ ├── send/ # Server-side email send with rate limiter
│ │ │ ├── launch/ # Template-based draft generation
│ │ │ ├── approve/ # Approve/skip outreach drafts
│ │ │ ├── update/ # Edit draft content before sending
│ │ │ └── check-rate/ # Rate limit status per platform
│ │ ├── auth/
│ │ │ └── gmail/ # Gmail OAuth flow + callback
│ │ ├── import/ # Bulk CSV/JSON import
│ │ ├── analytics/ # Pipeline stats + conversion metrics
│ │ └── cron/
│ │ └── follow-ups/ # Daily Vercel Cron (9am UTC)
│ ├── components/ # React components (shadcn/ui)
│ └── lib/
│ ├── outreach-lifecycle.ts # Status state machine
│ ├── gmail.ts # Gmail API client
│ ├── rate-limiter.ts # Token bucket + circuit breaker
│ └── supabase-server.ts # Server Supabase client
├── packages/
│ └── db/ # Database layer
│ ├── migrations/ # SQL schema files
│ └── seed/ # CSV + JSON import scripts
├── campaigns/
│ └── templates/ # Outreach message templates (Mustache-style)
├── scout/ # Creator discovery + automation
│ ├── dm-automator.ts # Playwright DM automation CLI
│ ├── dm-server.ts # Playwright HTTP server (port 4100)
│ └── data/ # JSON batch outputs
├── docs/ # Architecture and setup docs
├── vercel.json # Cron schedule config
└── pnpm-workspace.yaml # Monorepo config
- Create a new Supabase project
- Run migrations in order via the SQL editor:
packages/db/migrations/001_initial.sqlpackages/db/migrations/002_outreach_automation.sql
- Enable Realtime on
creatorsandoutreach_logtables
| Provider | Setup |
|---|---|
| Google (Gmail) | Create OAuth credentials at console.cloud.google.com. Enable Gmail API. Set redirect URI to https://your-app.vercel.app/api/auth/gmail/callback |
| Instagram (Meta) | Create an app at developers.facebook.com. Request instagram_basic and instagram_manage_messages permissions |
| TikTok | Create an app at developers.tiktok.com. Request user.info.basic scope |
| Variable | Required | Description |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL |
Yes | Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
Yes | Supabase anonymous/publishable key |
SUPABASE_SERVICE_ROLE_KEY |
Yes | Supabase service role key (server-side) |
GOOGLE_CLIENT_ID |
Yes | Google OAuth client ID |
GOOGLE_CLIENT_SECRET |
Yes | Google OAuth client secret |
NEXTAUTH_SECRET |
Yes | NextAuth session encryption secret |
NEXTAUTH_URL |
Yes | NextAuth callback URL |
GMAIL_REDIRECT_URI |
Yes | Gmail OAuth callback URL |
META_APP_ID |
No | Meta/Facebook app ID (for Instagram DMs) |
META_APP_SECRET |
No | Meta/Facebook app secret |
META_PAGE_ID |
No | Facebook Page ID connected to Instagram Business |
TIKTOK_CLIENT_KEY |
No | TikTok developer client key |
TIKTOK_CLIENT_SECRET |
No | TikTok developer client secret |
CRON_SECRET |
Yes | Secret token to authenticate Vercel Cron jobs |
Copy .env.example to .env.local and fill in the values.
The DM automation server runs locally alongside the dashboard:
cd scout && npm install && npx playwright install chromium
npm run server
# Server runs at http://localhost:4100Once running, the dashboard auto-detects it and shows automation controls in the DM Focus tab. Session cookies persist at ~/.playwright-dm-session/.
pnpm test:e2e # Playwright end-to-end testsTemplates use Mustache-style {{variable}} placeholders. Located in campaigns/templates/:
| Template | Purpose |
|---|---|
cold-email.md |
Initial email outreach |
cold-dm.md |
Initial DM on social platforms |
follow-up-1.md |
First follow-up (3-5 days after initial) |
follow-up-2.md |
Final follow-up (7-10 days after FU1) |
Available template variables:
| Variable | Source |
|---|---|
{{name}} |
Creator display name |
{{handle}} |
Platform handle |
{{niche}} |
Creator niche/category |
{{specific_hook}} |
Personalized hook for the creator |
{{content_idea}} |
Suggested collaboration idea |
{{sender_name}} |
Your name |
{{product_name}} |
Your product name |
{{product_url}} |
Your product URL |
{{program_name}} |
Your creator program name |
{{value_prop}} |
Value proposition for the creator |
Default stages: Prospect → Contacted → Replied → Negotiating → Onboarded → Active (with Declined as an exit). Modify the stage enum in the database migration and update src/lib/outreach-lifecycle.ts to add custom stages.
| Platform | Daily Cap | Warm-up | Delay |
|---|---|---|---|
| Gmail | 500/day | 20 → 500 over 4 weeks | 1-3s |
| 100/day | 20 → 100 over 4 weeks | 8-15s + jitter | |
| TikTok | 100/day | 20 → 100 over 4 weeks | 8-15s + jitter |
| 50/day | Manual copy | N/A |
Circuit breaker auto-pauses sending if >10% failure rate in the last 25 sends (30-minute cooldown). Adjust caps and warm-up schedules in src/lib/rate-limiter.ts.
- Add OAuth flow in
src/app/api/auth/<platform>/ - Add send logic in
src/app/api/outreach/send/ - Add rate limit config in
src/lib/rate-limiter.ts - Add platform option to the Settings page
Creator Command Center is API-first — every dashboard action has a corresponding REST endpoint, making it straightforward to integrate with AI agents and automation workflows.
| Endpoint | Method | Agent Use Case |
|---|---|---|
/api/import |
POST | Bulk import creators from discovery pipelines |
/api/creators |
GET | Query creators by platform, niche, stage, score |
/api/creators |
POST | Add a new creator from an enrichment agent |
/api/creators/[id] |
PATCH | Update creator fields (stage, notes, score) |
/api/outreach/launch |
POST | Generate draft messages for selected creators |
/api/outreach/approve |
POST | Approve or skip outreach drafts |
/api/outreach/send |
POST | Send email via Gmail API |
/api/outreach/check-rate |
GET | Check rate limit status before sending |
/api/analytics |
GET | Pull pipeline metrics for reporting |
| Feature | Status |
|---|---|
| MCP Server | Planned — expose CCC as a Model Context Protocol server for Claude and other agents |
| Skill Definitions | Planned — pre-built agent skills (discover, enrich, outreach, follow-up) |
| Webhook Events | Planned — emit events on stage transitions for external automation |
| Layer | Technology |
|---|---|
| Framework | |
| Language | |
| Styling | |
| Tables | @tanstack/react-table |
| Database | |
| Automation | |
| Package Manager |
Creator Command Center is open source under the GNU Affero General Public License v3.0.
Dual-license model: Free for the community under AGPL v3. If you need a commercial license for proprietary use (no copyleft obligations), contact us.
See CONTRIBUTING.md for contribution guidelines and CLA information.
From spreadsheets to pipeline. Open-source creator outreach for GTM teams.