@growthub/cli 0.3.56 → 0.3.58

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 (37) hide show
  1. package/assets/worker-kits/growthub-zernio-social-v1/QUICKSTART.md +209 -0
  2. package/assets/worker-kits/growthub-zernio-social-v1/brands/NEW-CLIENT.md +74 -0
  3. package/assets/worker-kits/growthub-zernio-social-v1/brands/_template/brand-kit.md +131 -0
  4. package/assets/worker-kits/growthub-zernio-social-v1/brands/growthub/brand-kit.md +141 -0
  5. package/assets/worker-kits/growthub-zernio-social-v1/bundles/growthub-zernio-social-v1.json +55 -0
  6. package/assets/worker-kits/growthub-zernio-social-v1/docs/ai-caption-layer.md +132 -0
  7. package/assets/worker-kits/growthub-zernio-social-v1/docs/local-adapters.md +123 -0
  8. package/assets/worker-kits/growthub-zernio-social-v1/docs/platform-coverage.md +112 -0
  9. package/assets/worker-kits/growthub-zernio-social-v1/docs/postiz-ui-shell-integration.md +166 -0
  10. package/assets/worker-kits/growthub-zernio-social-v1/docs/posts-and-queues-layer.md +208 -0
  11. package/assets/worker-kits/growthub-zernio-social-v1/docs/zernio-api-integration.md +265 -0
  12. package/assets/worker-kits/growthub-zernio-social-v1/examples/analytics-brief-sample.md +97 -0
  13. package/assets/worker-kits/growthub-zernio-social-v1/examples/client-proposal-sample.md +106 -0
  14. package/assets/worker-kits/growthub-zernio-social-v1/examples/content-calendar-sample.md +74 -0
  15. package/assets/worker-kits/growthub-zernio-social-v1/examples/social-campaign-sample.md +105 -0
  16. package/assets/worker-kits/growthub-zernio-social-v1/growthub-meta/README.md +146 -0
  17. package/assets/worker-kits/growthub-zernio-social-v1/growthub-meta/kit-standard.md +120 -0
  18. package/assets/worker-kits/growthub-zernio-social-v1/kit.json +104 -0
  19. package/assets/worker-kits/growthub-zernio-social-v1/output/README.md +63 -0
  20. package/assets/worker-kits/growthub-zernio-social-v1/output-standards.md +132 -0
  21. package/assets/worker-kits/growthub-zernio-social-v1/runtime-assumptions.md +170 -0
  22. package/assets/worker-kits/growthub-zernio-social-v1/setup/check-deps.mjs +117 -0
  23. package/assets/worker-kits/growthub-zernio-social-v1/setup/check-deps.sh +86 -0
  24. package/assets/worker-kits/growthub-zernio-social-v1/setup/install-mcp.mjs +177 -0
  25. package/assets/worker-kits/growthub-zernio-social-v1/setup/setup.mjs +247 -0
  26. package/assets/worker-kits/growthub-zernio-social-v1/setup/verify-env.mjs +138 -0
  27. package/assets/worker-kits/growthub-zernio-social-v1/skills.md +332 -0
  28. package/assets/worker-kits/growthub-zernio-social-v1/templates/analytics-brief.md +101 -0
  29. package/assets/worker-kits/growthub-zernio-social-v1/templates/caption-copy-deck.md +105 -0
  30. package/assets/worker-kits/growthub-zernio-social-v1/templates/client-proposal.md +98 -0
  31. package/assets/worker-kits/growthub-zernio-social-v1/templates/content-calendar.md +70 -0
  32. package/assets/worker-kits/growthub-zernio-social-v1/templates/platform-publishing-plan.md +86 -0
  33. package/assets/worker-kits/growthub-zernio-social-v1/templates/scheduling-manifest.md +92 -0
  34. package/assets/worker-kits/growthub-zernio-social-v1/templates/social-campaign-brief.md +102 -0
  35. package/assets/worker-kits/growthub-zernio-social-v1/validation-checklist.md +85 -0
  36. package/assets/worker-kits/growthub-zernio-social-v1/workers/zernio-social-operator/CLAUDE.md +307 -0
  37. package/package.json +1 -1
@@ -0,0 +1,332 @@
1
+ # Zernio Social Media Operator — Master Skill Doc
2
+
3
+ **Source of truth for methodology. Read this file completely before beginning any task.**
4
+
5
+ ---
6
+
7
+ ## QUICK REFERENCE TABLE
8
+
9
+ | Resource | Path |
10
+ |---|---|
11
+ | Agent operating law | `workers/zernio-social-operator/CLAUDE.md` |
12
+ | Brand kit template | `brands/_template/brand-kit.md` |
13
+ | Growthub example brand kit | `brands/growthub/brand-kit.md` |
14
+ | Output contract | `output-standards.md` |
15
+ | Runtime assumptions | `runtime-assumptions.md` |
16
+ | Zernio API integration | `docs/zernio-api-integration.md` |
17
+ | Platform coverage | `docs/platform-coverage.md` |
18
+ | AI caption layer | `docs/ai-caption-layer.md` |
19
+ | Posts + queues layer | `docs/posts-and-queues-layer.md` |
20
+ | Postiz UI shell integration | `docs/postiz-ui-shell-integration.md` |
21
+ | Social campaign brief | `templates/social-campaign-brief.md` |
22
+ | Content calendar | `templates/content-calendar.md` |
23
+ | Platform publishing plan | `templates/platform-publishing-plan.md` |
24
+ | Caption copy deck | `templates/caption-copy-deck.md` |
25
+ | Analytics brief | `templates/analytics-brief.md` |
26
+ | Scheduling manifest | `templates/scheduling-manifest.md` |
27
+ | Client proposal | `templates/client-proposal.md` |
28
+ | Sample campaign | `examples/social-campaign-sample.md` |
29
+ | Sample calendar | `examples/content-calendar-sample.md` |
30
+ | Sample analytics | `examples/analytics-brief-sample.md` |
31
+ | Sample proposal | `examples/client-proposal-sample.md` |
32
+
33
+ ---
34
+
35
+ ## STEP 0 — BEFORE ANY TASK, ANSWER THESE QUESTIONS
36
+
37
+ Before producing anything, confirm:
38
+
39
+ 1. Which client or brand is this campaign for?
40
+ 2. Which platforms are in scope (select from `docs/platform-coverage.md`)?
41
+ 3. What is the campaign objective: brand awareness / lead generation / engagement / product launch / community growth?
42
+ 4. What is the campaign timeframe and posting cadence?
43
+ 5. Is `ZERNIO_API_KEY` present and valid (`api-live` or `hybrid` mode) or is this `agent-only`?
44
+ 6. Which `ZERNIO_PROFILE_ID` owns the target social accounts?
45
+
46
+ If any of these are unknown after the 4-question gate in CLAUDE.md, stop and ask.
47
+
48
+ ---
49
+
50
+ ## STEP 1 — LOAD THE BRAND KIT
51
+
52
+ Read `brands/<client-slug>/brand-kit.md` if it exists. Otherwise start from `brands/_template/brand-kit.md`.
53
+
54
+ Extract:
55
+
56
+ - client identity (name, slug, industry)
57
+ - target platforms and primary audience demographics
58
+ - content themes and messaging guardrails
59
+ - campaign objectives and KPI targets
60
+ - competitor accounts for reference
61
+ - agency context (prospect stage, retainer range)
62
+ - existing deliverables log
63
+
64
+ The brand kit drives all output naming, tone calibration, platform selection, and proposal pricing context.
65
+
66
+ ---
67
+
68
+ ## STEP 2 — CHECK THE WORKING SUBSTRATE
69
+
70
+ If the user has a valid `ZERNIO_API_KEY`, inspect the live account before planning anything.
71
+
72
+ ### Source-of-truth checks against the Zernio API
73
+
74
+ 1. `GET /api/v1/profiles` — confirm the API key authenticates and list available profiles
75
+ 2. `GET /api/v1/profiles/<ZERNIO_PROFILE_ID>` — confirm the target profile exists
76
+ 3. `GET /api/v1/accounts?profileId=<id>` — list connected platforms on that profile
77
+ 4. `GET /api/v1/queues?profileId=<id>` — check for existing recurring queues and time slots
78
+ 5. `GET /api/v1/posts?profileId=<id>&status=scheduled` — inspect currently scheduled posts to avoid collisions
79
+
80
+ All calls use header `Authorization: Bearer ${ZERNIO_API_KEY}`.
81
+
82
+ ### What to verify before planning
83
+
84
+ - Which platform integrations are connected and authorized on the profile
85
+ - What the profile's default posting timezone is
86
+ - Whether any queues already exist and are actively publishing
87
+ - Whether the API key has `read-write` permission (required for scheduling) or only `read`
88
+
89
+ If the API cannot be reached, use the frozen assumptions in `runtime-assumptions.md` and label outputs `assumption-based` and `dryRun: true`.
90
+
91
+ ---
92
+
93
+ ## STEP 3 — COMMAND SELECTION LOGIC
94
+
95
+ Select the narrowest command that satisfies the real job.
96
+
97
+ | Command | Primary Use | Scheduling? | AI Captions? |
98
+ |---|---|---|---|
99
+ | `/zernio campaign` | Full campaign from scratch — brief + calendar + publishing plan + captions | Optional | Yes |
100
+ | `/zernio calendar` | Content calendar for an existing brief | No | Partial |
101
+ | `/zernio captions` | Caption copy deck only — batch or single platform | No | Yes |
102
+ | `/zernio schedule` | Scheduling manifest from an existing calendar | Yes | No |
103
+ | `/zernio queue` | Define or update a recurring queue (time slots) | Yes (recurring) | No |
104
+ | `/zernio analytics` | Analytics briefing from API data or provided metrics | No | No |
105
+ | `/zernio inbox` | Draft replies for DMs, comments, reviews via unified inbox | No | Yes |
106
+ | `/zernio proposal` | Client-ready proposal with platform mix and ROI | No | No |
107
+ | `/zernio platforms` | Platform coverage report for client context | No | No |
108
+ | `/zernio quick` | 30-second campaign snapshot for a domain or brand | No | Minimal |
109
+
110
+ Default selection rules:
111
+
112
+ - "Build a campaign" → `/zernio campaign`
113
+ - "Draft captions for my posts" → `/zernio captions`
114
+ - "Schedule my content calendar" → `/zernio schedule`
115
+ - "Set up a recurring posting plan" → `/zernio queue`
116
+ - "How did my posts perform?" → `/zernio analytics`
117
+ - "Reply to my DMs and comments" → `/zernio inbox`
118
+ - "Pitch this to the client" → `/zernio proposal`
119
+ - "What platforms should I be on?" → `/zernio platforms`
120
+
121
+ ---
122
+
123
+ ## STEP 4 — PLATFORM SELECTION LOGIC
124
+
125
+ Select platforms based on: audience demographics, campaign objective, content format, and client capacity.
126
+
127
+ ### Primary platform selection rules
128
+
129
+ | Objective | Recommended Primary Platforms |
130
+ |---|---|
131
+ | Brand awareness | Instagram, TikTok, YouTube |
132
+ | Lead generation | LinkedIn, X/Twitter, Facebook |
133
+ | Community growth | Reddit, Threads, Bluesky |
134
+ | Product launch | Instagram, TikTok, X/Twitter, YouTube |
135
+ | Thought leadership | LinkedIn, X/Twitter, Bluesky |
136
+ | Local business | Facebook, Instagram, Google Business |
137
+ | Direct conversation | Telegram, WhatsApp |
138
+
139
+ ### Platform capacity rules
140
+
141
+ - Limit active platforms to 5 per campaign unless client explicitly has team capacity for more
142
+ - Always check `docs/platform-coverage.md` for per-platform format constraints before assigning content types
143
+ - Carousel posts: available on Instagram, LinkedIn, Pinterest, Facebook — not TikTok, X, or Bluesky
144
+ - Long-form video (>10 min): YouTube only — short-form elsewhere
145
+ - Thread format: X/Twitter, Bluesky, Threads
146
+ - Local-only: Google Business (tie to physical location verified inside Zernio)
147
+ - Messaging-only: Telegram, WhatsApp (require follower opt-in through the Zernio-connected account)
148
+
149
+ ---
150
+
151
+ ## STEP 5 — CAPTION GENERATION LOGIC
152
+
153
+ Apply the AI caption layer for every content calendar entry.
154
+
155
+ ### Caption workflow
156
+
157
+ 1. Extract key message from content theme pillar
158
+ 2. Identify platform tone profile from `docs/ai-caption-layer.md`
159
+ 3. Draft 3 variants (A/B/C):
160
+ - Variant A: Direct and factual
161
+ - Variant B: Storytelling or narrative
162
+ - Variant C: Question or engagement-hook opening
163
+ 4. Apply platform character limits (full table in `docs/platform-coverage.md`):
164
+ - X/Twitter: 280 characters (aim for ≤240 for re-share space)
165
+ - LinkedIn: 3,000 characters (optimal engagement at 150–300 for opening)
166
+ - Instagram: 2,200 characters (optimal: ≤150 above "more" fold)
167
+ - TikTok: 2,200 characters (engagement hook in first 150)
168
+ - Pinterest: 500 character description
169
+ - Reddit: Variable by subreddit — default to long-form
170
+ - Bluesky: 300 characters
171
+ - Threads: 500 characters
172
+ - Google Business: 1,500 characters
173
+ - Telegram: 4,096 characters
174
+ - WhatsApp: 1,024 characters
175
+ 5. Add hashtag sets (platform-appropriate quantity):
176
+ - Instagram: 3–5 primary hashtags
177
+ - LinkedIn: 3–5 relevant professional hashtags
178
+ - TikTok: 3–6 mixing trending and niche
179
+ - Pinterest: 2–3 keyword-focused
180
+ - X/Twitter: 1–2 maximum
181
+ - Bluesky / Threads: none required (use in context only)
182
+ - Google Business / Telegram / WhatsApp: none — discouraged by platform
183
+ 6. Flag any captions that require visual assets with specific format requirements
184
+
185
+ ---
186
+
187
+ ## STEP 6 — CONTENT CALENDAR STRUCTURE
188
+
189
+ The content calendar template produces one row per scheduled post.
190
+
191
+ ### Required columns
192
+
193
+ | Column | Content | Rules |
194
+ |---|---|---|
195
+ | Date | YYYY-MM-DD | Must fall within campaign window |
196
+ | Day | Weekday name | Include for readability |
197
+ | Platform | Zernio platform slug (from coverage doc) | Must be in approved platform list |
198
+ | Account | Zernio account id or handle | Must match an account under the active profile |
199
+ | Content Theme | Theme pillar name | Must be one of 3–5 defined pillars |
200
+ | Post Type | image / video / carousel / text / reel / short / story | Must be valid for that platform |
201
+ | Caption Preview | First 100 characters of selected variant | Do not paste full caption |
202
+ | CTA | Call-to-action phrase | Required — never "N/A" |
203
+ | Media Notes | Asset requirements, dimensions, duration | Required for image/video/carousel |
204
+ | Status | draft / approved / scheduled / published | Default: draft |
205
+
206
+ ### Cadence rules
207
+
208
+ - Minimum 3 posts per week per platform for meaningful growth signal
209
+ - Maximum 3 posts per day per platform to avoid feed fatigue
210
+ - Space multi-platform posts by at least 30 minutes to avoid simultaneous publishing optics
211
+ - Reserve weekends for engagement/community posts rather than promotional content unless client specifies otherwise
212
+
213
+ ---
214
+
215
+ ## STEP 7 — SCHEDULING MANIFEST FORMAT
216
+
217
+ See `docs/posts-and-queues-layer.md` for full format specification. Every manifest is shaped to be a valid body for one or many `POST https://zernio.com/api/v1/posts` calls (one Zernio post per manifest entry; each post fans out to one or more platform+account tuples).
218
+
219
+ Quick format reference:
220
+
221
+ ```json
222
+ {
223
+ "zernioSchedulingManifest": {
224
+ "version": "1.0",
225
+ "profileId": "<ZERNIO_PROFILE_ID>",
226
+ "timezone": "America/New_York",
227
+ "dryRun": false,
228
+ "generatedAt": "<ISO-8601-timestamp>",
229
+ "posts": [
230
+ {
231
+ "clientPostId": "<client-slug>-<YYYYMMDD>-<sequence>",
232
+ "content": "<selected-caption-variant>",
233
+ "scheduledFor": "<ISO-8601-timestamp>",
234
+ "timezone": "America/New_York",
235
+ "media": [{ "mediaId": "<zernio-media-id>" }],
236
+ "platforms": [
237
+ { "platform": "twitter", "accountId": "<zernio-account-id>" },
238
+ { "platform": "linkedin", "accountId": "<zernio-account-id>" }
239
+ ],
240
+ "status": "pending"
241
+ }
242
+ ]
243
+ }
244
+ }
245
+ ```
246
+
247
+ In `agent-only` mode, set `dryRun: true` and use placeholder `accountId` values tagged with the account handle for the user to resolve later.
248
+
249
+ Every `POST /api/v1/posts` request must carry an `Idempotency-Key` header set to the entry's `clientPostId`. This makes re-submitting the manifest safe after partial failures.
250
+
251
+ ---
252
+
253
+ ## STEP 8 — RECURRING QUEUE FORMAT
254
+
255
+ Zernio also supports recurring posting queues — time slots on a profile that auto-schedule added posts. Use `/zernio queue` to manage them.
256
+
257
+ Minimum queue definition the operator must produce (see `docs/posts-and-queues-layer.md` for full format):
258
+
259
+ ```json
260
+ {
261
+ "zernioQueue": {
262
+ "profileId": "<ZERNIO_PROFILE_ID>",
263
+ "name": "<queue-name>",
264
+ "timezone": "America/New_York",
265
+ "slots": [
266
+ { "day": "mon", "time": "09:00", "platforms": ["twitter", "linkedin"] },
267
+ { "day": "wed", "time": "12:30", "platforms": ["instagram"] },
268
+ { "day": "fri", "time": "17:00", "platforms": ["bluesky", "threads"] }
269
+ ]
270
+ }
271
+ }
272
+ ```
273
+
274
+ Queues target `POST /api/v1/queues` (create) or `PUT /api/v1/queues/<queueId>` (update). Posts attached to a queue are scheduled into the next available slot — `scheduledFor` is omitted from the post body.
275
+
276
+ ---
277
+
278
+ ## STEP 9 — ANALYTICS BRIEFING LOGIC
279
+
280
+ When analytics data is provided (from `GET /api/v1/analytics` or client-provided metrics):
281
+
282
+ ### Required metrics to collect per platform
283
+
284
+ | Metric | Source | Notes |
285
+ |---|---|---|
286
+ | Impressions | Zernio analytics or platform export | Total times content was displayed |
287
+ | Reach | Platform native via Zernio pass-through | Unique accounts that saw the content |
288
+ | Engagement rate | Calculated: (likes + comments + shares) / impressions × 100 | Platform-normalized |
289
+ | Follower growth | Platform native via Zernio | Net new followers during period |
290
+ | Link clicks | Zernio UTM tracking or platform bio links | Only for platforms with link support |
291
+ | Top posts | By engagement rate, not raw likes | Surface the 3 best-performing posts |
292
+ | Inbox activity | `GET /api/v1/inbox` | Open conversations, response rate |
293
+
294
+ ### Analytics briefing structure
295
+
296
+ 1. Period summary (date range, total posts published, platforms)
297
+ 2. Per-platform performance table (all collected metrics)
298
+ 3. Top 3 performing posts (with engagement rate, format, theme pillar)
299
+ 4. Bottom 3 performing posts (with failure mode hypothesis)
300
+ 5. Recommendations (3–5 actionable items for next period)
301
+ 6. Benchmark comparison (if industry benchmarks are available from brand kit)
302
+
303
+ ---
304
+
305
+ ## STEP 10 — OUTPUT ORDER
306
+
307
+ Produce artifacts in this strict order:
308
+
309
+ 1. Social Campaign Brief (`templates/social-campaign-brief.md`)
310
+ 2. Content Calendar (`templates/content-calendar.md`)
311
+ 3. Platform Publishing Plan (`templates/platform-publishing-plan.md`)
312
+ 4. Caption Copy Deck (`templates/caption-copy-deck.md`)
313
+ 5. Scheduling Manifest (`templates/scheduling-manifest.md`) — only if scheduling requested
314
+ 6. Analytics Brief (`templates/analytics-brief.md`) — only if analytics data available
315
+ 7. Client Proposal (`templates/client-proposal.md`) — only if requested
316
+
317
+ ---
318
+
319
+ ## QUALITY BAR
320
+
321
+ Good output looks like this:
322
+
323
+ - All platform IDs match the official list in `docs/platform-coverage.md` — no invented platform slugs
324
+ - All caption variants respect the character limits for their target platform
325
+ - Content calendar rows contain no empty CTAs — every post must have an explicit call to action
326
+ - Scheduling manifest timestamps are in ISO 8601 format with timezone, and fall within the campaign window
327
+ - Every platform referenced in the manifest is backed by a real Zernio account id (or a clearly-placeholdered handle in `dryRun: true` mode)
328
+ - Analytics briefings derive all metrics from provided data — no invented engagement rates
329
+ - Client proposals ground ROI projections in documented platform benchmark data
330
+ - Every output file can be handed to an operator or client and acted on immediately
331
+ - No filler paragraphs — every sentence either presents data, explains a constraint, or specifies an action
332
+ - No secrets in outputs: `ZERNIO_API_KEY`, `ANTHROPIC_API_KEY`, or OAuth tokens are never rendered into deliverables
@@ -0,0 +1,101 @@
1
+ # Analytics Brief — [Client Name] · [Project Name]
2
+
3
+ **Kit:** `growthub-zernio-social-v1`
4
+ **Generated:** [YYYY-MM-DD]
5
+ **Mode:** [api-live | agent-only | hybrid]
6
+ **Version:** `v1`
7
+
8
+ ---
9
+
10
+ ## Period Summary
11
+
12
+ | Field | Value |
13
+ |---|---|
14
+ | Period | [YYYY-MM-DD] → [YYYY-MM-DD] |
15
+ | Total posts published | [N] |
16
+ | Platforms in scope | [comma-separated Zernio slugs] |
17
+ | Data source | [Zernio `GET /api/v1/analytics` | client-provided CSV | hybrid] |
18
+ | Zernio profile id | [prof_... or `placeholder`] |
19
+
20
+ ---
21
+
22
+ ## Per-Platform Performance
23
+
24
+ | Platform | Posts | Impressions | Reach | Engagement rate | Follower growth | Link clicks |
25
+ |---|---|---|---|---|---|---|
26
+ | `instagram` | [N] | [N] | [N] | [N%] | [+N] | [N] |
27
+ | `linkedin` | [N] | [N] | [N] | [N%] | [+N] | [N] |
28
+ | `twitter` | [N] | [N] | [N] | [N%] | [+N] | [N] |
29
+
30
+ Engagement rate = (likes + comments + shares) / impressions × 100. Platform-normalized.
31
+
32
+ ---
33
+
34
+ ## Top 3 Posts
35
+
36
+ | clientPostId | Platform | Date | Engagement rate | Why it worked |
37
+ |---|---|---|---|---|
38
+ | [id] | `instagram` | YYYY-MM-DD | [N%] | [one-sentence hypothesis] |
39
+ | [id] | `linkedin` | YYYY-MM-DD | [N%] | [hypothesis] |
40
+ | [id] | `twitter` | YYYY-MM-DD | [N%] | [hypothesis] |
41
+
42
+ ---
43
+
44
+ ## Bottom 3 Posts
45
+
46
+ | clientPostId | Platform | Date | Engagement rate | Hypothesis |
47
+ |---|---|---|---|---|
48
+ | [id] | `tiktok` | YYYY-MM-DD | [N%] | [hypothesis] |
49
+ | [id] | `pinterest` | YYYY-MM-DD | [N%] | [hypothesis] |
50
+ | [id] | `threads` | YYYY-MM-DD | [N%] | [hypothesis] |
51
+
52
+ ---
53
+
54
+ ## Inbox Activity (optional)
55
+
56
+ If `/zernio inbox` was pulled:
57
+
58
+ | Metric | Value |
59
+ |---|---|
60
+ | Open conversations (period start) | [N] |
61
+ | Open conversations (period end) | [N] |
62
+ | Avg first-response time | [minutes] |
63
+ | Replies sent | [N] |
64
+ | Unresolved threads > 48h | [N] |
65
+
66
+ ---
67
+
68
+ ## Recommendations
69
+
70
+ 3–5 specific, actionable items. Each must name platform, format, posting time, and expected impact.
71
+
72
+ 1. [Recommendation]
73
+ 2. [Recommendation]
74
+ 3. [Recommendation]
75
+ 4. [Recommendation]
76
+ 5. [Recommendation]
77
+
78
+ ---
79
+
80
+ ## Benchmark Comparison (optional)
81
+
82
+ If industry benchmarks are provided in the brand kit:
83
+
84
+ | Platform | Our engagement rate | Benchmark | Delta |
85
+ |---|---|---|---|
86
+ | `instagram` | [N%] | [N%] | [+/- N pts] |
87
+ | `linkedin` | [N%] | [N%] | [+/- N pts] |
88
+
89
+ ---
90
+
91
+ ## Source Queries
92
+
93
+ For reproducibility, log the Zernio queries that produced this brief:
94
+
95
+ ```
96
+ GET /api/v1/analytics/posts?profileId=<id>&from=<date>&to=<date>
97
+ GET /api/v1/analytics/accounts?profileId=<id>&from=<date>&to=<date>
98
+ GET /api/v1/inbox?profileId=<id>
99
+ ```
100
+
101
+ Never render raw response payloads in this file — summarize only.
@@ -0,0 +1,105 @@
1
+ # Caption Copy Deck — [Client Name] · [Project Name]
2
+
3
+ **Kit:** `growthub-zernio-social-v1`
4
+ **Generated:** [YYYY-MM-DD]
5
+ **Mode:** [api-live | agent-only | hybrid]
6
+ **Version:** `v1`
7
+
8
+ ---
9
+
10
+ ## Usage
11
+
12
+ One entry per scheduled post. Each entry carries exactly three variants (A direct, B narrative, C question). The operator selects one variant per post for the scheduling manifest; all three variants remain in this deck for client review.
13
+
14
+ Every variant must:
15
+
16
+ - Respect the platform's hard character limit (`docs/platform-coverage.md`)
17
+ - Match the brand voice guardrails (from the brand kit)
18
+ - Carry an explicit CTA
19
+ - Reference a real or clearly-placeholdered media asset when the post is image/video/carousel/reel/short/story
20
+
21
+ ---
22
+
23
+ ## Post Entry Template
24
+
25
+ ### Post: [clientPostId — e.g., urban-cycle-20260501-001]
26
+
27
+ | Field | Value |
28
+ |---|---|
29
+ | clientPostId | `urban-cycle-20260501-001` |
30
+ | Date | [YYYY-MM-DD] |
31
+ | Platform | `instagram` |
32
+ | Account | [@handle or accountId] |
33
+ | Theme pillar | [Pillar name] |
34
+ | Post type | [image / video / carousel / text / reel / short / story] |
35
+ | Media | [mediaId or placeholder, with asset path reference] |
36
+ | CTA | [selected CTA] |
37
+
38
+ **Variant A — Direct**
39
+
40
+ ```
41
+ [Direct-hook opening line. Declarative. Leads with benefit or fact.]
42
+
43
+ [Body — 1–2 sentences of supporting detail.]
44
+
45
+ [CTA] · [1–2 hashtags if platform allows]
46
+ ```
47
+
48
+ Character count: [N]
49
+
50
+ **Variant B — Narrative**
51
+
52
+ ```
53
+ [Story-beat opening. Anecdote or "we used to..." / "last week..."]
54
+
55
+ [Body — 1–2 sentences, keep the narrative voice.]
56
+
57
+ [CTA] · [hashtags if applicable]
58
+ ```
59
+
60
+ Character count: [N]
61
+
62
+ **Variant C — Question / Hook**
63
+
64
+ ```
65
+ [Question or provocation as opener.]
66
+
67
+ [Body — short answer or frame.]
68
+
69
+ [CTA] · [hashtags if applicable]
70
+ ```
71
+
72
+ Character count: [N]
73
+
74
+ **Selection:** Variant [A/B/C] — [One-line reason for selection]
75
+
76
+ ---
77
+
78
+ ### Post: [next clientPostId]
79
+
80
+ [Repeat the block above for every entry in the Content Calendar.]
81
+
82
+ ---
83
+
84
+ ## Hashtag Reference
85
+
86
+ | Platform | Count rule | Notes |
87
+ |---|---|---|
88
+ | `instagram` | 3–5 | Mix branded + niche |
89
+ | `linkedin` | 3–5 | Professional only |
90
+ | `tiktok` | 3–6 | Trending + niche |
91
+ | `twitter` | 1–2 | One branded max |
92
+ | `bluesky` | 0 | No hashtags |
93
+ | `threads` | 0–1 | Sparse |
94
+
95
+ Full hashtag rules: `docs/ai-caption-layer.md`.
96
+
97
+ ---
98
+
99
+ ## Quality Checks
100
+
101
+ - [ ] All three variants per post are meaningfully different (not minor word swaps)
102
+ - [ ] Every variant ≤ the platform hard limit
103
+ - [ ] Every variant contains the selected CTA
104
+ - [ ] No `[INSERT CAPTION HERE]` style fragments remain
105
+ - [ ] No secrets, API keys, or internal references leaked into copy
@@ -0,0 +1,98 @@
1
+ # Client Proposal — [Client Name] · [Campaign Name]
2
+
3
+ **Kit:** `growthub-zernio-social-v1`
4
+ **Generated:** [YYYY-MM-DD]
5
+ **Mode:** [api-live | agent-only | hybrid]
6
+ **Version:** `v1`
7
+
8
+ ---
9
+
10
+ ## Campaign Overview
11
+
12
+ | Field | Value |
13
+ |---|---|
14
+ | Client | [Client Name] |
15
+ | Campaign | [Campaign Name] |
16
+ | Window | [YYYY-MM-DD] → [YYYY-MM-DD] |
17
+ | Primary objective | [brand awareness | lead generation | engagement | product launch | community growth] |
18
+ | Platforms in scope | [comma-separated Zernio slugs] |
19
+
20
+ ---
21
+
22
+ ## Platform Mix Rationale
23
+
24
+ | Platform | Role in this campaign | Why selected |
25
+ |---|---|---|
26
+ | `instagram` | [Primary visual channel] | [Audience fit + content format fit] |
27
+ | `linkedin` | [B2B thought leadership] | [Rationale] |
28
+ | `twitter` | [Real-time voice + community] | [Rationale] |
29
+
30
+ ---
31
+
32
+ ## Content Strategy
33
+
34
+ - Theme pillars: [list]
35
+ - Format mix: [Per platform]
36
+ - Cadence: [Summary table reference to Platform Publishing Plan]
37
+ - Caption approach: A/B/C variants per post — see Caption Copy Deck
38
+
39
+ ---
40
+
41
+ ## Deliverables Scope
42
+
43
+ | Deliverable | Included | Notes |
44
+ |---|---|---|
45
+ | Social Campaign Brief | Yes | One per campaign |
46
+ | Content Calendar | Yes | 30 / 60 / 90 day |
47
+ | Platform Publishing Plan | Yes | One per campaign |
48
+ | Caption Copy Deck | Yes | A/B/C variants for every scheduled post |
49
+ | Scheduling Manifest | Yes | Zernio-shaped JSON + submission to `POST /api/v1/posts` |
50
+ | Recurring Queue | Optional | Only when campaign uses evergreen slots |
51
+ | Analytics Brief | Monthly | Pulled from Zernio API |
52
+ | Inbox reply coverage | Optional | DMs + comments + reviews via unified inbox |
53
+
54
+ ---
55
+
56
+ ## Pricing Tiers
57
+
58
+ | Tier | Scope | Monthly |
59
+ |---|---|---|
60
+ | Starter | 2 platforms, 3 posts/week, monthly analytics | $[X] |
61
+ | Growth | 4 platforms, daily posts, biweekly analytics, inbox coverage | $[X] |
62
+ | Scale | 6+ platforms, daily posts with queues, weekly analytics, priority inbox | $[X] |
63
+
64
+ All tiers include the full deliverable set scoped to the platform count.
65
+
66
+ ---
67
+
68
+ ## ROI Projection
69
+
70
+ Ground every number in documented platform benchmarks (see brand kit and `docs/platform-coverage.md`). Never invent metrics.
71
+
72
+ | KPI | Tier 1 target | Tier 2 target | Tier 3 target |
73
+ |---|---|---|---|
74
+ | Impressions / month | [N] | [N] | [N] |
75
+ | Engagement rate | [N%] | [N%] | [N%] |
76
+ | Follower growth | [+N] | [+N] | [+N] |
77
+ | Link clicks | [N] | [N] | [N] |
78
+
79
+ ---
80
+
81
+ ## Onboarding Plan
82
+
83
+ 1. Connect target social accounts inside Zernio (`/api/v1/connect/<platform>`)
84
+ 2. Confirm `ZERNIO_PROFILE_ID` and scope of the API key
85
+ 3. Review Content Theme Pillars in the Social Campaign Brief
86
+ 4. Approve the Platform Publishing Plan and cadence
87
+ 5. Approve the Caption Copy Deck (A/B/C variants)
88
+ 6. Submit the Scheduling Manifest to Zernio with `Idempotency-Key` per post
89
+ 7. Cadence review at week 4 alongside the first Analytics Brief
90
+
91
+ ---
92
+
93
+ ## Terms
94
+
95
+ - Ownership of all content stays with the client
96
+ - API key and account credentials stay inside the client's Zernio account
97
+ - The operator never stores raw Zernio API keys or OAuth tokens
98
+ - Cancellation: [standard terms from retainer agreement]