@growthub/cli 0.3.53 → 0.3.54
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/assets/worker-kits/growthub-postiz-social-v1/.env.example +18 -0
- package/assets/worker-kits/growthub-postiz-social-v1/QUICKSTART.md +136 -0
- package/assets/worker-kits/growthub-postiz-social-v1/brands/NEW-CLIENT.md +67 -0
- package/assets/worker-kits/growthub-postiz-social-v1/brands/_template/brand-kit.md +120 -0
- package/assets/worker-kits/growthub-postiz-social-v1/brands/growthub/brand-kit.md +117 -0
- package/assets/worker-kits/growthub-postiz-social-v1/bundles/growthub-postiz-social-v1.json +52 -0
- package/assets/worker-kits/growthub-postiz-social-v1/docs/ai-caption-layer.md +118 -0
- package/assets/worker-kits/growthub-postiz-social-v1/docs/bullmq-queue-layer.md +157 -0
- package/assets/worker-kits/growthub-postiz-social-v1/docs/platform-coverage.md +97 -0
- package/assets/worker-kits/growthub-postiz-social-v1/docs/postiz-fork-integration.md +143 -0
- package/assets/worker-kits/growthub-postiz-social-v1/examples/analytics-brief-sample.md +125 -0
- package/assets/worker-kits/growthub-postiz-social-v1/examples/client-proposal-sample.md +127 -0
- package/assets/worker-kits/growthub-postiz-social-v1/examples/content-calendar-sample.md +75 -0
- package/assets/worker-kits/growthub-postiz-social-v1/examples/social-campaign-sample.md +104 -0
- package/assets/worker-kits/growthub-postiz-social-v1/growthub-meta/README.md +128 -0
- package/assets/worker-kits/growthub-postiz-social-v1/growthub-meta/kit-standard.md +113 -0
- package/assets/worker-kits/growthub-postiz-social-v1/kit.json +104 -0
- package/assets/worker-kits/growthub-postiz-social-v1/output/README.md +56 -0
- package/assets/worker-kits/growthub-postiz-social-v1/output-standards.md +127 -0
- package/assets/worker-kits/growthub-postiz-social-v1/runtime-assumptions.md +159 -0
- package/assets/worker-kits/growthub-postiz-social-v1/setup/check-deps.sh +117 -0
- package/assets/worker-kits/growthub-postiz-social-v1/setup/clone-fork.sh +83 -0
- package/assets/worker-kits/growthub-postiz-social-v1/setup/verify-env.mjs +99 -0
- package/assets/worker-kits/growthub-postiz-social-v1/skills.md +277 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/analytics-brief.md +123 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/caption-copy-deck.md +127 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/client-proposal.md +139 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/content-calendar.md +65 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/platform-publishing-plan.md +112 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/scheduling-manifest.md +83 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/social-campaign-brief.md +111 -0
- package/assets/worker-kits/growthub-postiz-social-v1/validation-checklist.md +79 -0
- package/assets/worker-kits/growthub-postiz-social-v1/workers/postiz-social-operator/CLAUDE.md +287 -0
- package/package.json +1 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Growthub Postiz Social Studio — Environment Config
|
|
2
|
+
# Copy this file to .env and fill in your values.
|
|
3
|
+
# Never commit .env to version control.
|
|
4
|
+
|
|
5
|
+
# Optional override for your local Postiz fork path.
|
|
6
|
+
# Default used by scripts is ~/postiz-app.
|
|
7
|
+
# POSTIZ_FORK_PATH=/path/to/your/postiz-app
|
|
8
|
+
|
|
9
|
+
# Base URL for the local Postiz API.
|
|
10
|
+
POSTIZ_API_URL=http://localhost:3000
|
|
11
|
+
|
|
12
|
+
# Required for scheduling manifest submission.
|
|
13
|
+
# Find this in Postiz Settings > Workspace.
|
|
14
|
+
POSTIZ_WORKSPACE_ID=your_postiz_workspace_id_here
|
|
15
|
+
|
|
16
|
+
# Optional for AI-enhanced caption generation in agent/hybrid mode.
|
|
17
|
+
# Get one at https://console.anthropic.com
|
|
18
|
+
ANTHROPIC_API_KEY=your_anthropic_key_here
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Growthub Postiz Social Media Studio — Quickstart
|
|
2
|
+
|
|
3
|
+
**Kit:** `growthub-postiz-social-v1`
|
|
4
|
+
**Worker:** `postiz-social-operator`
|
|
5
|
+
**Platform:** [Postiz](https://github.com/gitroomhq/postiz-app)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## What This Kit Does
|
|
10
|
+
|
|
11
|
+
The Growthub Postiz Social Media Studio is a self-contained AI agent environment for planning, drafting, scheduling, and analyzing social media campaigns using the Postiz open-source platform. It wraps the self-hosted Postiz workspace to produce:
|
|
12
|
+
|
|
13
|
+
- Social campaign briefs (objective, platforms, audience, KPIs)
|
|
14
|
+
- 30/60/90-day content calendars with theme pillars
|
|
15
|
+
- Platform publishing plans for 28+ social networks
|
|
16
|
+
- Caption copy decks with A/B/C variants per post
|
|
17
|
+
- BullMQ-compatible scheduling manifests for Postiz API
|
|
18
|
+
- Analytics briefings (engagement, reach, growth signals)
|
|
19
|
+
- Client-ready proposals with platform mix and ROI projections
|
|
20
|
+
|
|
21
|
+
Supported platforms include: Instagram, LinkedIn, TikTok, X/Twitter, YouTube, Pinterest, Reddit, Bluesky, Facebook, Mastodon, Slack, Telegram, and 16+ more. See `docs/platform-coverage.md` for the full list.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Setup — 6 Steps
|
|
26
|
+
|
|
27
|
+
### Step 1 — Point Your Working Directory
|
|
28
|
+
|
|
29
|
+
Export this kit to a local folder and point Claude Code's Working Directory at the kit root. All paths in the kit are relative to the kit root.
|
|
30
|
+
|
|
31
|
+
### Step 2 — Copy the Environment File
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
cp .env.example .env
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Fill in your Postiz workspace credentials and API endpoint. No platform OAuth tokens are stored in this kit — those live inside the Postiz admin UI.
|
|
38
|
+
|
|
39
|
+
### Step 3 — Verify the Environment
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
node setup/verify-env.mjs
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
This checks:
|
|
46
|
+
- Whether the Postiz fork is cloned at `POSTIZ_FORK_PATH` (default: `~/postiz-app`)
|
|
47
|
+
- Whether the Postiz API is reachable on port 3000
|
|
48
|
+
- Whether `ANTHROPIC_API_KEY` is valid format (if set for AI caption enhancement)
|
|
49
|
+
- No OAuth tokens are validated here — those are managed inside Postiz
|
|
50
|
+
|
|
51
|
+
### Step 4 — Check Dependencies
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
bash setup/check-deps.sh
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Verifies that `node`, `docker`, `docker compose`, and `git` are available. Checks Node.js version (18+ required). Checks Docker engine is running.
|
|
58
|
+
|
|
59
|
+
### Step 5 — Clone and Start the Postiz Workspace (Local-Fork Mode Only)
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
bash setup/clone-fork.sh
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
This clones `postiz-app` to `~/postiz-app` (or `POSTIZ_FORK_PATH` if set), runs `docker compose up -d` to start Redis, PostgreSQL, and the Postiz API, and waits for the API healthcheck to pass.
|
|
66
|
+
|
|
67
|
+
Skip this step if you are using **agent-only mode** — the operator can plan campaigns, draft captions, and produce content calendars without a running Postiz instance.
|
|
68
|
+
|
|
69
|
+
### Step 6 — Start a Session
|
|
70
|
+
|
|
71
|
+
Open Claude Code, set the Working Directory to this kit root, and start your session. The operator will guide you through the 10-step workflow.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Execution Modes
|
|
76
|
+
|
|
77
|
+
| Mode | Requirements | Use When |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| `local-fork` | Node 18+, Docker, Postiz running | You want to schedule posts via the Postiz API and use multi-workspace features |
|
|
80
|
+
| `agent-only` | Nothing — Claude handles everything | You need campaign planning, content calendars, and caption drafts without a running instance |
|
|
81
|
+
| `hybrid` | ANTHROPIC_API_KEY + Postiz running | Best of both — agent reasoning with live Postiz API scheduling |
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## First Run
|
|
86
|
+
|
|
87
|
+
1. Tell the operator: **"Plan a 30-day Instagram + LinkedIn campaign for [your brand]"**
|
|
88
|
+
2. The operator will ask 4 clarifying questions (client, platforms, objective, cadence)
|
|
89
|
+
3. The operator runs the 10-step workflow and produces all campaign artifacts
|
|
90
|
+
4. Output is saved to `output/<client-slug>/<project-slug>/`
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## New Client Setup
|
|
95
|
+
|
|
96
|
+
See `brands/NEW-CLIENT.md` for instructions on adding a new client brand kit.
|
|
97
|
+
|
|
98
|
+
Quick version:
|
|
99
|
+
```bash
|
|
100
|
+
cp brands/_template/brand-kit.md brands/<client-slug>/brand-kit.md
|
|
101
|
+
# Then fill in the fields in the new file
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Available Commands
|
|
107
|
+
|
|
108
|
+
Tell the operator which you need:
|
|
109
|
+
|
|
110
|
+
| Command | What It Does |
|
|
111
|
+
|---|---|
|
|
112
|
+
| `/postiz campaign` | Full campaign brief + content calendar + publishing plan |
|
|
113
|
+
| `/postiz calendar` | Content calendar only — existing brief provided |
|
|
114
|
+
| `/postiz captions` | Caption copy deck for a specific platform or batch |
|
|
115
|
+
| `/postiz schedule` | Generate BullMQ-compatible scheduling manifest |
|
|
116
|
+
| `/postiz analytics` | Analytics briefing from Postiz API data or provided metrics |
|
|
117
|
+
| `/postiz proposal` | Client-ready proposal with platform mix and ROI projection |
|
|
118
|
+
| `/postiz platforms` | Platform coverage report for a specific client context |
|
|
119
|
+
| `/postiz quick` | 30-second campaign snapshot for a domain or brand |
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Key Files
|
|
124
|
+
|
|
125
|
+
| File | Purpose |
|
|
126
|
+
|---|---|
|
|
127
|
+
| `workers/postiz-social-operator/CLAUDE.md` | Agent operating instructions (start here) |
|
|
128
|
+
| `skills.md` | Full methodology — read at every session |
|
|
129
|
+
| `brands/_template/brand-kit.md` | Blank brand kit template |
|
|
130
|
+
| `brands/growthub/brand-kit.md` | Growthub reference example |
|
|
131
|
+
| `output/README.md` | Output directory structure and naming |
|
|
132
|
+
| `docs/postiz-fork-integration.md` | How this kit integrates with Postiz |
|
|
133
|
+
| `docs/platform-coverage.md` | All 28+ supported platforms with format specs |
|
|
134
|
+
| `docs/ai-caption-layer.md` | AI caption generation methodology |
|
|
135
|
+
| `docs/bullmq-queue-layer.md` | Scheduling manifest format for Postiz API |
|
|
136
|
+
| `validation-checklist.md` | Pre-session checklist |
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Adding a New Client
|
|
2
|
+
|
|
3
|
+
This guide explains how to create a brand kit for a new client in the Postiz Social Media Studio.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Steps
|
|
8
|
+
|
|
9
|
+
### 1. Copy the Template
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
cp brands/_template/brand-kit.md brands/<client-slug>/brand-kit.md
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Replace `<client-slug>` with a lowercase, hyphenated version of the client name. Examples:
|
|
16
|
+
- "Urban Cycle" → `urban-cycle`
|
|
17
|
+
- "Acme SaaS Corp" → `acme-saas`
|
|
18
|
+
- "The Bloom Studio" → `bloom-studio`
|
|
19
|
+
|
|
20
|
+
### 2. Fill in the Brand Kit
|
|
21
|
+
|
|
22
|
+
Open the new file and fill in every section:
|
|
23
|
+
- **Client Identity** — name, slug, industry, website
|
|
24
|
+
- **Social Media Presence** — existing accounts, follower counts, current activity level
|
|
25
|
+
- **Target Audience** — primary and secondary audience profiles
|
|
26
|
+
- **Campaign Objectives** — metrics, targets, and timelines
|
|
27
|
+
- **Brand Voice** — tone, personality, approved/blocked words, emoji usage
|
|
28
|
+
- **Content Theme Pillars** — 3–5 recurring themes with platform assignments
|
|
29
|
+
- **Competitor Reference Accounts** — 2–3 accounts to reference for format benchmarking
|
|
30
|
+
- **Agency Context** — engagement stage, retainer, reporting cadence
|
|
31
|
+
|
|
32
|
+
### 3. Verify the Brand Kit
|
|
33
|
+
|
|
34
|
+
Before using the brand kit in a session, confirm:
|
|
35
|
+
- [ ] `client-slug` in the filename matches the `Client Slug` field in the kit
|
|
36
|
+
- [ ] At least one platform is listed in `Social Media Presence`
|
|
37
|
+
- [ ] At least one campaign objective has a measurable target
|
|
38
|
+
- [ ] Brand voice section is complete — no empty `[fill in]` placeholders
|
|
39
|
+
- [ ] At least 3 content theme pillars are defined
|
|
40
|
+
|
|
41
|
+
### 4. Tell the Operator
|
|
42
|
+
|
|
43
|
+
Start your Claude Code session and say:
|
|
44
|
+
> "Load the brand kit for [client-name] and begin a [campaign objective] campaign."
|
|
45
|
+
|
|
46
|
+
The operator will read the brand kit and ask the 4-question gate before producing any output.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Brand Kit Naming Rules
|
|
51
|
+
|
|
52
|
+
| Rule | Correct | Incorrect |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| Directory name is lowercase kebab-case | `brands/urban-cycle/` | `brands/UrbanCycle/` |
|
|
55
|
+
| Filename is always `brand-kit.md` | `brands/urban-cycle/brand-kit.md` | `brands/urban-cycle/UrbanCycle.md` |
|
|
56
|
+
| Slug contains no spaces | `acme-saas` | `acme saas` |
|
|
57
|
+
| Slug contains no special chars | `bloom-studio` | `bloom/studio` |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Note on Public Brand Kits
|
|
62
|
+
|
|
63
|
+
Brand kits are **not included in kit exports by default**. The only brand kits included in exports are:
|
|
64
|
+
- `brands/_template/brand-kit.md` — the blank template
|
|
65
|
+
- `brands/growthub/brand-kit.md` — the public reference example
|
|
66
|
+
|
|
67
|
+
Client brand kits you create live in your local kit installation only. They are not bundled into the export zip or submitted to any external service.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Brand Kit — [Client Name]
|
|
2
|
+
|
|
3
|
+
<!-- Replace [Client Name] with the actual client name and rename this file to brands/<client-slug>/brand-kit.md -->
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Client Identity
|
|
8
|
+
|
|
9
|
+
| Field | Value |
|
|
10
|
+
|---|---|
|
|
11
|
+
| Client Name | [Client Name] |
|
|
12
|
+
| Client Slug | [client-slug] |
|
|
13
|
+
| Industry | [e.g., SaaS / E-commerce / Hospitality / Fintech] |
|
|
14
|
+
| Website | [https://...] |
|
|
15
|
+
| Primary Contact | [Name, email] |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Social Media Presence
|
|
20
|
+
|
|
21
|
+
| Platform | Handle | Followers | Current Status |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| Instagram | [@handle] | [N] | [Active / Inactive / New] |
|
|
24
|
+
| LinkedIn | [company page URL] | [N followers] | [Active / Inactive] |
|
|
25
|
+
| TikTok | [@handle] | [N] | [Active / Inactive] |
|
|
26
|
+
| X/Twitter | [@handle] | [N] | [Active / Inactive] |
|
|
27
|
+
| [Other] | [handle] | [N] | [Active / Inactive] |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Target Audience
|
|
32
|
+
|
|
33
|
+
### Primary Audience
|
|
34
|
+
|
|
35
|
+
| Attribute | Description |
|
|
36
|
+
|---|---|
|
|
37
|
+
| Age Range | [e.g., 25–40] |
|
|
38
|
+
| Gender | [e.g., 55% female, 45% male] |
|
|
39
|
+
| Location | [e.g., North America, English-speaking markets] |
|
|
40
|
+
| Interests | [e.g., entrepreneurship, productivity, design] |
|
|
41
|
+
| Pain Points | [e.g., too many disconnected tools, manual social media posting] |
|
|
42
|
+
| Content Preferences | [e.g., educational how-tos, success stories, data-driven insights] |
|
|
43
|
+
|
|
44
|
+
### Secondary Audience
|
|
45
|
+
|
|
46
|
+
| Attribute | Description |
|
|
47
|
+
|---|---|
|
|
48
|
+
| Age Range | [e.g., 18–25] |
|
|
49
|
+
| Interests | [e.g., tech, side projects] |
|
|
50
|
+
| Platform | [e.g., TikTok, Reddit] |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Campaign Objectives
|
|
55
|
+
|
|
56
|
+
| Objective | Metric | Target | Timeline |
|
|
57
|
+
|---|---|---|---|
|
|
58
|
+
| [Brand awareness] | [Impressions] | [50,000/month] | [Q2 2026] |
|
|
59
|
+
| [Lead generation] | [Link clicks] | [200/month] | [Q2 2026] |
|
|
60
|
+
| [Community growth] | [Follower growth] | [+500] | [Q2 2026] |
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Brand Voice
|
|
65
|
+
|
|
66
|
+
| Attribute | Spec |
|
|
67
|
+
|---|---|
|
|
68
|
+
| Tone | [e.g., Professional but approachable. Data-driven without being dry. Never salesy.] |
|
|
69
|
+
| Personality | [e.g., Smart, helpful, occasionally witty] |
|
|
70
|
+
| Words to Use | [e.g., "build", "grow", "automate", "team", "results"] |
|
|
71
|
+
| Words to Avoid | [e.g., "hack", "guru", "crush it", "cheap", "amazing"] |
|
|
72
|
+
| Emoji Usage | [e.g., Minimal on LinkedIn; moderate on Instagram; more on TikTok] |
|
|
73
|
+
| CTA Style | [e.g., Direct action verbs: "Start today", "Learn more", "Join the team"] |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Content Theme Pillars
|
|
78
|
+
|
|
79
|
+
| Pillar | Description | Platforms | % of Calendar |
|
|
80
|
+
|---|---|---|---|
|
|
81
|
+
| [Industry Insights] | [What we know that others don't — data, trends, analysis] | [All] | [40%] |
|
|
82
|
+
| [Product Value] | [Feature spotlights, use cases, ROI stories] | [LinkedIn, Instagram] | [30%] |
|
|
83
|
+
| [Social Proof] | [Customer testimonials, case studies, results] | [All] | [20%] |
|
|
84
|
+
| [Community] | [Q&A, behind the scenes, team moments] | [Instagram, TikTok] | [10%] |
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Competitor Reference Accounts
|
|
89
|
+
|
|
90
|
+
| Platform | Account | Why Reference |
|
|
91
|
+
|---|---|---|
|
|
92
|
+
| [Instagram] | [@competitor] | [Strong visual brand, good engagement format] |
|
|
93
|
+
| [LinkedIn] | [competitor company page] | [Industry leader, consistent posting cadence] |
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Agency Context
|
|
98
|
+
|
|
99
|
+
| Field | Value |
|
|
100
|
+
|---|---|
|
|
101
|
+
| Engagement Stage | [Prospect / Onboarding / Retained] |
|
|
102
|
+
| Monthly Retainer | [e.g., $X,XXX/month or "not established"] |
|
|
103
|
+
| Campaign Budget | [e.g., $X,XXX / campaign or "TBD"] |
|
|
104
|
+
| Reporting Cadence | [e.g., Monthly analytics brief] |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## CRM Notes
|
|
109
|
+
|
|
110
|
+
<!-- Internal notes for agency context. Not included in client-facing outputs. -->
|
|
111
|
+
|
|
112
|
+
[Add internal notes here: key contacts, relationship history, upsell opportunities, account health signals]
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## DELIVERABLES LOG
|
|
117
|
+
|
|
118
|
+
<!-- Append a line for each completed deliverable. -->
|
|
119
|
+
|
|
120
|
+
<!-- - YYYY-MM-DD | Social Media Campaign Package v1 — [Project Name] | output/<client-slug>/<project-slug>/ -->
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Brand Kit — Growthub
|
|
2
|
+
|
|
3
|
+
<!-- Reference example for the Postiz Social Media Studio. Use this to understand the expected format and detail level. -->
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Client Identity
|
|
8
|
+
|
|
9
|
+
| Field | Value |
|
|
10
|
+
|---|---|
|
|
11
|
+
| Client Name | Growthub |
|
|
12
|
+
| Client Slug | `growthub` |
|
|
13
|
+
| Industry | Developer tools / AI agent infrastructure / SaaS |
|
|
14
|
+
| Website | https://growthub.ai |
|
|
15
|
+
| Primary Contact | Internal — Growthub marketing team |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Social Media Presence
|
|
20
|
+
|
|
21
|
+
| Platform | Handle | Followers | Current Status |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| X/Twitter | @growthubai | 3,200 | Active |
|
|
24
|
+
| LinkedIn | Growthub (company page) | 1,800 | Active |
|
|
25
|
+
| Bluesky | @growthub.ai | 400 | Growing |
|
|
26
|
+
| GitHub | github.com/Growthub-ai | 2,100 stars | Active (open source) |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Target Audience
|
|
31
|
+
|
|
32
|
+
### Primary Audience
|
|
33
|
+
|
|
34
|
+
| Attribute | Description |
|
|
35
|
+
|---|---|
|
|
36
|
+
| Age Range | 25–45 |
|
|
37
|
+
| Gender | 60% male, 40% female |
|
|
38
|
+
| Location | North America, Europe, English-speaking global |
|
|
39
|
+
| Interests | AI agents, developer tools, automation, indie hacking, SaaS growth |
|
|
40
|
+
| Pain Points | Complex agent orchestration, lack of open-source local-first alternatives, AI tool fatigue |
|
|
41
|
+
| Content Preferences | Technical tutorials, tool comparisons, workflow examples, behind-the-scenes product builds |
|
|
42
|
+
|
|
43
|
+
### Secondary Audience
|
|
44
|
+
|
|
45
|
+
| Attribute | Description |
|
|
46
|
+
|---|---|
|
|
47
|
+
| Age Range | 18–25 |
|
|
48
|
+
| Interests | Open source, hackathons, learning AI development |
|
|
49
|
+
| Platform | GitHub, X/Twitter, Bluesky |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Campaign Objectives
|
|
54
|
+
|
|
55
|
+
| Objective | Metric | Target | Timeline |
|
|
56
|
+
|---|---|---|---|
|
|
57
|
+
| Developer awareness | GitHub stars | +500/quarter | Q2 2026 |
|
|
58
|
+
| Community growth | Twitter/X followers | +200/month | Ongoing |
|
|
59
|
+
| Thought leadership | LinkedIn impressions | 20,000/month | Q2 2026 |
|
|
60
|
+
| Open-source adoption | CLI downloads | +1,000/month | Q2 2026 |
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Brand Voice
|
|
65
|
+
|
|
66
|
+
| Attribute | Spec |
|
|
67
|
+
|---|---|
|
|
68
|
+
| Tone | Direct, technically credible, approachable. We explain without condescending. We ship without bragging. |
|
|
69
|
+
| Personality | Builder-first. We're in the trenches using the tools we build. |
|
|
70
|
+
| Words to Use | "build", "ship", "run", "local", "open", "agent", "workflow", "kit", "workspace" |
|
|
71
|
+
| Words to Avoid | "disruptive", "AI-powered" (use "agent-native" instead), "revolutionary", "hack" |
|
|
72
|
+
| Emoji Usage | Minimal — 0–1 on LinkedIn; 0–2 on X; 2–4 on Instagram |
|
|
73
|
+
| CTA Style | Action verbs with immediate value: "Try it now", "Clone and run", "Read the docs", "Star on GitHub" |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Content Theme Pillars
|
|
78
|
+
|
|
79
|
+
| Pillar | Description | Platforms | % of Calendar |
|
|
80
|
+
|---|---|---|---|
|
|
81
|
+
| Product Builds | Behind-the-scenes of building Growthub features — architecture, decisions, tradeoffs | X, LinkedIn, GitHub | 35% |
|
|
82
|
+
| Developer Tutorials | How to use Growthub kits, commands, and workflows in real workflows | X, LinkedIn, Bluesky | 30% |
|
|
83
|
+
| Open Source | Open-source culture, contributions, partner project spotlights | X, Bluesky, GitHub | 20% |
|
|
84
|
+
| Community | User projects, shoutouts, Q&A, polls | X, LinkedIn | 15% |
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Competitor Reference Accounts
|
|
89
|
+
|
|
90
|
+
| Platform | Account | Why Reference |
|
|
91
|
+
|---|---|---|
|
|
92
|
+
| X/Twitter | @langchain | Strong developer community engagement, technical thread format |
|
|
93
|
+
| LinkedIn | Anthropic company page | Consistent educational posting, thought leadership |
|
|
94
|
+
| X/Twitter | @cursor_ai | Product-led content strategy, community responsiveness |
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Agency Context
|
|
99
|
+
|
|
100
|
+
| Field | Value |
|
|
101
|
+
|---|---|
|
|
102
|
+
| Engagement Stage | Internal — first-party reference kit |
|
|
103
|
+
| Monthly Retainer | N/A (internal) |
|
|
104
|
+
| Campaign Budget | N/A |
|
|
105
|
+
| Reporting Cadence | Monthly analytics brief to marketing team |
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## CRM Notes
|
|
110
|
+
|
|
111
|
+
Internal reference account. Used to demonstrate the kit's brand kit format and example output quality. Not a live client account.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## DELIVERABLES LOG
|
|
116
|
+
|
|
117
|
+
<!-- - YYYY-MM-DD | Social Media Campaign Package v1 — Growthub Q2 2026 Launch | output/growthub/q2-2026-launch/ -->
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"bundle": {
|
|
4
|
+
"id": "growthub-postiz-social-v1",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"kitId": "growthub-postiz-social-v1",
|
|
7
|
+
"workerId": "postiz-social-operator"
|
|
8
|
+
},
|
|
9
|
+
"briefType": "postiz-social-media-campaign",
|
|
10
|
+
"publicExampleBrandPaths": [
|
|
11
|
+
"brands/growthub/brand-kit.md"
|
|
12
|
+
],
|
|
13
|
+
"requiredFrozenAssets": [
|
|
14
|
+
"QUICKSTART.md",
|
|
15
|
+
".env.example",
|
|
16
|
+
"skills.md",
|
|
17
|
+
"output-standards.md",
|
|
18
|
+
"runtime-assumptions.md",
|
|
19
|
+
"validation-checklist.md",
|
|
20
|
+
"workers/postiz-social-operator/CLAUDE.md",
|
|
21
|
+
"brands/_template/brand-kit.md",
|
|
22
|
+
"brands/growthub/brand-kit.md",
|
|
23
|
+
"brands/NEW-CLIENT.md",
|
|
24
|
+
"setup/clone-fork.sh",
|
|
25
|
+
"setup/verify-env.mjs",
|
|
26
|
+
"setup/check-deps.sh",
|
|
27
|
+
"output/README.md",
|
|
28
|
+
"templates/social-campaign-brief.md",
|
|
29
|
+
"templates/content-calendar.md",
|
|
30
|
+
"templates/platform-publishing-plan.md",
|
|
31
|
+
"templates/caption-copy-deck.md",
|
|
32
|
+
"templates/analytics-brief.md",
|
|
33
|
+
"templates/scheduling-manifest.md",
|
|
34
|
+
"templates/client-proposal.md",
|
|
35
|
+
"examples/social-campaign-sample.md",
|
|
36
|
+
"examples/content-calendar-sample.md",
|
|
37
|
+
"examples/analytics-brief-sample.md",
|
|
38
|
+
"examples/client-proposal-sample.md",
|
|
39
|
+
"docs/postiz-fork-integration.md",
|
|
40
|
+
"docs/platform-coverage.md",
|
|
41
|
+
"docs/ai-caption-layer.md",
|
|
42
|
+
"docs/bullmq-queue-layer.md",
|
|
43
|
+
"growthub-meta/README.md",
|
|
44
|
+
"growthub-meta/kit-standard.md"
|
|
45
|
+
],
|
|
46
|
+
"optionalPresets": [],
|
|
47
|
+
"export": {
|
|
48
|
+
"folderName": "growthub-agent-worker-kit-postiz-social-v1",
|
|
49
|
+
"zipFileName": "growthub-agent-worker-kit-postiz-social-v1.zip"
|
|
50
|
+
},
|
|
51
|
+
"activationModes": ["export"]
|
|
52
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# AI Caption Layer
|
|
2
|
+
|
|
3
|
+
**Methodology for AI-assisted caption generation in the Postiz Social Media Operator.**
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
The AI caption layer produces A/B/C caption variants for every post in the content calendar. This document defines the tone profiles, variant construction rules, and quality bar applied to every caption draft.
|
|
10
|
+
|
|
11
|
+
The agent generates captions using:
|
|
12
|
+
1. The brand kit's voice guidelines (`brands/<client-slug>/brand-kit.md`)
|
|
13
|
+
2. The platform tone profiles defined in this document
|
|
14
|
+
3. The theme pillar context from the Social Campaign Brief
|
|
15
|
+
4. The character limits and hashtag rules from `docs/platform-coverage.md`
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Platform Tone Profiles
|
|
20
|
+
|
|
21
|
+
| Platform | Tone | Voice | Avoid |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| Instagram | Visual-first, aspirational, authentic | First-person POV, sensory language, short punchy sentences | Corporate jargon, excessive hashtags, stock-photo clichés |
|
|
24
|
+
| LinkedIn | Professional, insight-driven, confident | Data-backed claims, industry terminology, no jargon | Salesy language, superlatives without proof, informal slang |
|
|
25
|
+
| TikTok | Casual, trend-aware, energetic, hook-first | Gen Z cadence, pattern interrupt, hook in first 2 words | Formal tone, long sentences, no emoji, corporate speak |
|
|
26
|
+
| X/Twitter | Concise, punchy, opinionated | Declarative sentences, take-first, thread-opening hooks | Wishy-washy hedging, long-winded intros, excessive hashtags |
|
|
27
|
+
| Pinterest | Aspirational, instructional, keyword-rich | Descriptive, actionable verbs, lifestyle context | Vague descriptions, missing context, non-searchable language |
|
|
28
|
+
| Facebook | Conversational, community-first, warm | Inclusive "we/our", questions, local/personal context | Overly promotional, algorithm-bait language |
|
|
29
|
+
| Bluesky | Direct, open-web-aware, intellectual | Concise, tech-savvy, first-principles reasoning | Overly polished PR-speak, platform-specific references |
|
|
30
|
+
| Mastodon | Community-focused, inclusive, decentralization-aware | Plain language, CamelCase hashtags for accessibility | Algorithmic optimization language, commercial urgency |
|
|
31
|
+
| Reddit | Authentic, community-native, contribution-first | Reddit idioms where appropriate, value-first, no self-promotion optics | Obvious promotional tone, link dumps without context |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Variant Construction Rules
|
|
36
|
+
|
|
37
|
+
### Variant A — Direct / Factual
|
|
38
|
+
|
|
39
|
+
- Lead with the core fact, data point, or product statement
|
|
40
|
+
- Second sentence: supporting evidence or context
|
|
41
|
+
- Third sentence (if length allows): CTA
|
|
42
|
+
- Tone: confident, no hedging language
|
|
43
|
+
- Use numbers when available: "78% of marketers say..." outperforms "many marketers say..."
|
|
44
|
+
|
|
45
|
+
**Structure template:**
|
|
46
|
+
```
|
|
47
|
+
[Core claim or insight.] [Evidence or context.] [CTA verb phrase.]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Variant B — Storytelling / Narrative
|
|
51
|
+
|
|
52
|
+
- Open with a scene, scenario, or relatable before-state
|
|
53
|
+
- Middle: transition to the insight or product context
|
|
54
|
+
- Close: resolution or CTA
|
|
55
|
+
- Tone: warm, specific, first-person or second-person
|
|
56
|
+
|
|
57
|
+
**Structure template:**
|
|
58
|
+
```
|
|
59
|
+
[Scene/scenario that the audience recognizes.] [Transition: "That's when we realized..." / "Here's what changed..."] [Insight or product context.] [CTA.]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Variant C — Question / Engagement Hook
|
|
63
|
+
|
|
64
|
+
- Open with a direct question or provocative statement
|
|
65
|
+
- The question must be genuinely answerable in comments
|
|
66
|
+
- Follow with 1–2 supporting sentences before the CTA
|
|
67
|
+
- Tone: curious, conversational, invites participation
|
|
68
|
+
|
|
69
|
+
**Structure template:**
|
|
70
|
+
```
|
|
71
|
+
[Question the audience wants to answer?] [Context that makes the question worth answering.] [CTA that directs to comment or click.]
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Character Limit Compliance
|
|
77
|
+
|
|
78
|
+
Every caption variant must be checked against the platform character limit before being considered complete. The agent must note the character count in the Caption Copy Deck entry.
|
|
79
|
+
|
|
80
|
+
| Platform | Hard Limit | Target Range | Notes |
|
|
81
|
+
|---|---|---|---|
|
|
82
|
+
| Instagram | 2,200 | ≤150 (above fold) / up to 500 for educational | First 125 chars are critical — fold cuts here on mobile |
|
|
83
|
+
| LinkedIn | 3,000 | 150–300 for opening hook | Algorithm may suppress posts with very short captions on company pages |
|
|
84
|
+
| TikTok | 2,200 | ≤150 | First 150 chars visible before "more" |
|
|
85
|
+
| X/Twitter | 280 | ≤240 | Leave 40 chars for RT space |
|
|
86
|
+
| Pinterest | 500 | 100–300 | Keyword density matters for discovery |
|
|
87
|
+
| Bluesky | 300 | ≤280 | Hard limit — truncation destroys message |
|
|
88
|
+
| Mastodon | 500 | ≤400 | Instance limits may vary |
|
|
89
|
+
| Reddit | Variable | Long-form (300–1000 words) for text posts | Subreddit rules override; check before drafting |
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Emoji Usage Guidelines
|
|
94
|
+
|
|
95
|
+
| Platform | Usage Level | Notes |
|
|
96
|
+
|---|---|---|
|
|
97
|
+
| Instagram | Moderate (2–5 per caption) | Use as visual separators and tone enhancers |
|
|
98
|
+
| LinkedIn | Minimal (0–2 per post) | Bullets acceptable on company pages; personal posts: 0–1 |
|
|
99
|
+
| TikTok | Liberal (5–10) | Emoji-first hooks are platform-native |
|
|
100
|
+
| X/Twitter | Minimal (0–2) | One emoji at start of tweet is acceptable; more feels crowded |
|
|
101
|
+
| Pinterest | None to minimal (0–2) | Focuses on keyword discoverability |
|
|
102
|
+
| Facebook | Moderate (2–4) | Consistent with casual community tone |
|
|
103
|
+
| Bluesky | Minimal (0–2) | Text-first culture |
|
|
104
|
+
| Mastodon | None to minimal | Accessibility-first: screen readers read emoji alt-text |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## AI Caption Quality Bar
|
|
109
|
+
|
|
110
|
+
A complete caption variant must:
|
|
111
|
+
|
|
112
|
+
1. **Stay within character limits** — hard requirement, not optional
|
|
113
|
+
2. **Have an explicit CTA** — at minimum: "Learn more", "Link in bio", "Comment below", "Drop your thoughts"
|
|
114
|
+
3. **Match platform tone** — LinkedIn caption must not read like a TikTok caption
|
|
115
|
+
4. **Reference the content** — caption must connect to the media asset or post topic
|
|
116
|
+
5. **Not open with "I"** — Instagram algorithm and general best practice: lead with the hook, not the subject
|
|
117
|
+
6. **Avoid placeholder language** — no "[INSERT BRAND NAME]" fragments in the final copy deck
|
|
118
|
+
7. **Be meaningfully different across A/B/C** — changing one word does not constitute a variant
|