@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,65 @@
|
|
|
1
|
+
# Content Calendar
|
|
2
|
+
|
|
3
|
+
<!-- Client: [client-slug] | Project: [project-slug] | Version: v1 | Date: YYYY-MM-DD -->
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Calendar Header
|
|
8
|
+
|
|
9
|
+
| Field | Value |
|
|
10
|
+
|---|---|
|
|
11
|
+
| Client | <!-- client name --> |
|
|
12
|
+
| Campaign | <!-- campaign name --> |
|
|
13
|
+
| Period | <!-- YYYY-MM-DD to YYYY-MM-DD --> |
|
|
14
|
+
| Platforms | <!-- comma-separated --> |
|
|
15
|
+
| Total Posts | <!-- N --> |
|
|
16
|
+
| Generated By | postiz-social-operator |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Posting Cadence Summary
|
|
21
|
+
|
|
22
|
+
| Platform | Posts/Week | Best Times | Content Mix |
|
|
23
|
+
|---|---|---|---|
|
|
24
|
+
| <!-- platform --> | <!-- e.g., 3 --> | <!-- e.g., Mon/Wed/Fri 9am ET --> | <!-- e.g., 50% educational, 30% promotional, 20% community --> |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Content Calendar
|
|
29
|
+
|
|
30
|
+
| Date | Day | Platform | Theme Pillar | Post Type | Caption Preview (first 100 chars) | CTA | Media Notes | Status |
|
|
31
|
+
|---|---|---|---|---|---|---|---|---|
|
|
32
|
+
| <!-- YYYY-MM-DD --> | <!-- Mon --> | <!-- instagram --> | <!-- Industry Insights --> | <!-- image --> | <!-- First 100 characters of caption A... --> | <!-- Link in bio --> | <!-- 1080×1080 static image, brand colors --> | draft |
|
|
33
|
+
| | | | | | | | | |
|
|
34
|
+
| | | | | | | | | |
|
|
35
|
+
| | | | | | | | | |
|
|
36
|
+
| | | | | | | | | |
|
|
37
|
+
|
|
38
|
+
<!-- Add one row per scheduled post. Use platform slugs from docs/platform-coverage.md. -->
|
|
39
|
+
<!-- Status values: draft | approved | scheduled | published -->
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Theme Distribution
|
|
44
|
+
|
|
45
|
+
| Pillar | Posts | % of Calendar |
|
|
46
|
+
|---|---|---|
|
|
47
|
+
| <!-- Industry Insights --> | <!-- 12 --> | <!-- 40% --> |
|
|
48
|
+
| <!-- Product Value --> | <!-- 9 --> | <!-- 30% --> |
|
|
49
|
+
| <!-- Social Proof --> | <!-- 6 --> | <!-- 20% --> |
|
|
50
|
+
| <!-- Community --> | <!-- 3 --> | <!-- 10% --> |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Platform Distribution
|
|
55
|
+
|
|
56
|
+
| Platform | Total Posts | % of Calendar |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| <!-- instagram --> | <!-- --> | <!-- --> |
|
|
59
|
+
| <!-- linkedin --> | <!-- --> | <!-- --> |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Notes
|
|
64
|
+
|
|
65
|
+
<!-- Any campaign-level constraints, blackout dates, or scheduling dependencies. -->
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Platform Publishing Plan
|
|
2
|
+
|
|
3
|
+
<!-- Client: [client-slug] | Project: [project-slug] | Version: v1 | Date: YYYY-MM-DD -->
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
| Field | Value |
|
|
10
|
+
|---|---|
|
|
11
|
+
| Client | <!-- client name --> |
|
|
12
|
+
| Campaign | <!-- campaign name --> |
|
|
13
|
+
| Platforms in Scope | <!-- N platforms --> |
|
|
14
|
+
| Plan Period | <!-- YYYY-MM-DD to YYYY-MM-DD --> |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Per-Platform Publishing Specs
|
|
19
|
+
|
|
20
|
+
<!-- One section per platform. Only include platforms selected in the Social Campaign Brief. -->
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
### Platform: <!-- instagram -->
|
|
25
|
+
|
|
26
|
+
| Attribute | Spec |
|
|
27
|
+
|---|---|
|
|
28
|
+
| Platform ID | <!-- instagram --> |
|
|
29
|
+
| Posting Frequency | <!-- e.g., 5x per week --> |
|
|
30
|
+
| Best Posting Times | <!-- e.g., Mon/Wed/Fri: 9am–11am ET; Tue/Thu: 6pm–8pm ET --> |
|
|
31
|
+
| Primary Content Format | <!-- e.g., Static image (80%), Reel (20%) --> |
|
|
32
|
+
| Character Limit | <!-- 2,200 (aim for ≤150 above fold) --> |
|
|
33
|
+
| Hashtag Count | <!-- 3–5 primary hashtags --> |
|
|
34
|
+
| Caption Tone | <!-- e.g., Visual-first, story-driven, aspirational --> |
|
|
35
|
+
| Link Strategy | <!-- e.g., Link in bio only; rotate per campaign phase --> |
|
|
36
|
+
| Media Specs (Image) | <!-- 1080×1080 (square), 1080×1350 (portrait); ≤30MB, JPG/PNG --> |
|
|
37
|
+
| Media Specs (Video) | <!-- 1080×1920 (Reels); max 90 seconds; MP4 preferred --> |
|
|
38
|
+
| Media Specs (Carousel) | <!-- Up to 10 slides; 1080×1080 each --> |
|
|
39
|
+
| Account | <!-- @account_handle --> |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
### Platform: <!-- linkedin -->
|
|
44
|
+
|
|
45
|
+
| Attribute | Spec |
|
|
46
|
+
|---|---|
|
|
47
|
+
| Platform ID | <!-- linkedin --> |
|
|
48
|
+
| Posting Frequency | <!-- e.g., 3x per week --> |
|
|
49
|
+
| Best Posting Times | <!-- e.g., Tue/Wed/Thu: 8am–10am ET --> |
|
|
50
|
+
| Primary Content Format | <!-- e.g., Text + image (60%), Document/carousel (30%), Video (10%) --> |
|
|
51
|
+
| Character Limit | <!-- 3,000 (optimal engagement: 150–300 chars for opening hook) --> |
|
|
52
|
+
| Hashtag Count | <!-- 3–5 relevant professional hashtags --> |
|
|
53
|
+
| Caption Tone | <!-- e.g., Professional, insight-driven, no jargon --> |
|
|
54
|
+
| Link Strategy | <!-- e.g., Link in first comment (reduces algorithmic suppression of link posts) --> |
|
|
55
|
+
| Media Specs (Image) | <!-- 1200×627 (landscape), PNG/JPG; ≤5MB --> |
|
|
56
|
+
| Media Specs (Document) | <!-- PDF up to 300 pages, 100MB max --> |
|
|
57
|
+
| Account | <!-- company page or personal profile --> |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### Platform: <!-- tiktok -->
|
|
62
|
+
|
|
63
|
+
| Attribute | Spec |
|
|
64
|
+
|---|---|
|
|
65
|
+
| Platform ID | <!-- tiktok --> |
|
|
66
|
+
| Posting Frequency | <!-- e.g., 5x per week --> |
|
|
67
|
+
| Best Posting Times | <!-- e.g., Mon–Fri: 7am–9am ET and 7pm–9pm ET --> |
|
|
68
|
+
| Primary Content Format | <!-- Video only --> |
|
|
69
|
+
| Character Limit | <!-- 2,200 (optimal: first 150 characters before "more" fold) --> |
|
|
70
|
+
| Hashtag Count | <!-- 3–6 hashtags mixing trending and niche --> |
|
|
71
|
+
| Caption Tone | <!-- Casual, trend-aware, authentic, hook-first --> |
|
|
72
|
+
| Link Strategy | <!-- Bio link only (Linktree or equivalent) --> |
|
|
73
|
+
| Media Specs (Video) | <!-- 1080×1920 (9:16); 15 seconds – 10 minutes; MP4/MOV; ≤500MB --> |
|
|
74
|
+
| Account | <!-- @tiktok_handle --> |
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### Platform: <!-- twitter (X) -->
|
|
79
|
+
|
|
80
|
+
| Attribute | Spec |
|
|
81
|
+
|---|---|
|
|
82
|
+
| Platform ID | <!-- twitter --> |
|
|
83
|
+
| Posting Frequency | <!-- e.g., daily --> |
|
|
84
|
+
| Best Posting Times | <!-- e.g., 8am–10am ET and 12pm–2pm ET on weekdays --> |
|
|
85
|
+
| Primary Content Format | <!-- Text (50%), Text + image (40%), Thread (10%) --> |
|
|
86
|
+
| Character Limit | <!-- 280 characters (aim ≤240 for RT space) --> |
|
|
87
|
+
| Hashtag Count | <!-- 1–2 hashtags maximum --> |
|
|
88
|
+
| Caption Tone | <!-- Concise, punchy, opinion-forward, conversation-sparking --> |
|
|
89
|
+
| Link Strategy | <!-- Direct URL in tweet --> |
|
|
90
|
+
| Media Specs (Image) | <!-- 1200×675 (landscape) or 1200×1200 (square); ≤5MB; JPG/PNG/GIF --> |
|
|
91
|
+
| Account | <!-- @twitter_handle --> |
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Content Mix by Platform
|
|
96
|
+
|
|
97
|
+
| Platform | Educational | Promotional | Community | Entertainment |
|
|
98
|
+
|---|---|---|---|---|
|
|
99
|
+
| <!-- instagram --> | <!-- 40% --> | <!-- 30% --> | <!-- 20% --> | <!-- 10% --> |
|
|
100
|
+
| <!-- linkedin --> | <!-- 50% --> | <!-- 30% --> | <!-- 20% --> | <!-- 0% --> |
|
|
101
|
+
| <!-- tiktok --> | <!-- 30% --> | <!-- 20% --> | <!-- 10% --> | <!-- 40% --> |
|
|
102
|
+
| <!-- twitter --> | <!-- 40% --> | <!-- 20% --> | <!-- 30% --> | <!-- 10% --> |
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Cross-Platform Coordination
|
|
107
|
+
|
|
108
|
+
<!-- Describe how content is adapted across platforms rather than duplicated. -->
|
|
109
|
+
|
|
110
|
+
| Source Content | Instagram Adaptation | LinkedIn Adaptation | TikTok Adaptation | X Adaptation |
|
|
111
|
+
|---|---|---|---|---|
|
|
112
|
+
| <!-- Blog post / case study --> | <!-- Visual pull quote card --> | <!-- Professional insight thread --> | <!-- Talking head video summary --> | <!-- 3-tweet thread with key stats --> |
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Scheduling Manifest
|
|
2
|
+
|
|
3
|
+
<!-- Client: [client-slug] | Project: [project-slug] | Version: v1 | Date: YYYY-MM-DD -->
|
|
4
|
+
<!-- Execution Mode: local-fork | agent-only (dry-run) -->
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Manifest Overview
|
|
9
|
+
|
|
10
|
+
| Field | Value |
|
|
11
|
+
|---|---|
|
|
12
|
+
| Client | <!-- client name --> |
|
|
13
|
+
| Campaign | <!-- campaign name --> |
|
|
14
|
+
| Workspace ID | <!-- Postiz workspace UUID or "placeholder" for dry-run --> |
|
|
15
|
+
| Postiz API URL | <!-- http://localhost:3000 or hosted URL --> |
|
|
16
|
+
| Total Posts | <!-- N --> |
|
|
17
|
+
| Schedule Period | <!-- YYYY-MM-DD to YYYY-MM-DD --> |
|
|
18
|
+
| Generated By | postiz-social-operator |
|
|
19
|
+
| Dry Run | <!-- true / false --> |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## How to Submit (Local-Fork Mode)
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Submit manifest to Postiz API
|
|
27
|
+
curl -X POST http://localhost:3000/api/v1/posts/bulk \
|
|
28
|
+
-H "Content-Type: application/json" \
|
|
29
|
+
-H "Authorization: Bearer <your-postiz-jwt-token>" \
|
|
30
|
+
-d @scheduling-manifest.json
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## scheduling-manifest.json
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"postizSchedulingManifest": {
|
|
40
|
+
"version": "1.0",
|
|
41
|
+
"workspaceId": "<postiz-workspace-uuid>",
|
|
42
|
+
"generatedAt": "<ISO-8601-timestamp>",
|
|
43
|
+
"dryRun": false,
|
|
44
|
+
"posts": [
|
|
45
|
+
{
|
|
46
|
+
"postId": "<client-slug>-<YYYYMMDD>-<platform>-001",
|
|
47
|
+
"platform": "<postiz-platform-id>",
|
|
48
|
+
"scheduledAt": "<ISO-8601-timestamp-with-timezone>",
|
|
49
|
+
"content": "<selected caption variant — full text>",
|
|
50
|
+
"mediaAssets": [],
|
|
51
|
+
"tags": ["<hashtag1>", "<hashtag2>"],
|
|
52
|
+
"status": "pending"
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Post Schedule Table
|
|
62
|
+
|
|
63
|
+
| Post ID | Platform | Scheduled At | Caption Variant | Media Assets | Status |
|
|
64
|
+
|---|---|---|---|---|---|
|
|
65
|
+
| <!-- client-slug-20260415-instagram-001 --> | <!-- instagram --> | <!-- 2026-04-15T09:00:00-05:00 --> | <!-- A --> | <!-- none / [asset-filename.jpg] --> | pending |
|
|
66
|
+
| | | | | | |
|
|
67
|
+
| | | | | | |
|
|
68
|
+
|
|
69
|
+
<!-- One row per post. postId must follow: <client-slug>-<YYYYMMDD>-<platform>-<sequence> -->
|
|
70
|
+
<!-- scheduledAt must be ISO 8601 with timezone: YYYY-MM-DDTHH:MM:SS±HH:MM -->
|
|
71
|
+
<!-- Platform IDs from docs/platform-coverage.md -->
|
|
72
|
+
<!-- Caption variant references the selected variant (A/B/C) from the Caption Copy Deck -->
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Post-Submission Verification
|
|
77
|
+
|
|
78
|
+
After submitting the manifest to the Postiz API:
|
|
79
|
+
|
|
80
|
+
1. Confirm all posts appear in the Postiz admin UI → Calendar view
|
|
81
|
+
2. Verify `scheduledAt` timestamps match the content calendar exactly
|
|
82
|
+
3. Check that media assets are linked correctly (if applicable)
|
|
83
|
+
4. Set status to `scheduled` in the Content Calendar for each confirmed post
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Social Campaign Brief
|
|
2
|
+
|
|
3
|
+
<!-- Client: [client-slug] | Project: [project-slug] | Version: v1 | Date: YYYY-MM-DD -->
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Project Overview
|
|
8
|
+
|
|
9
|
+
| Field | Value |
|
|
10
|
+
|---|---|
|
|
11
|
+
| Client | <!-- client name --> |
|
|
12
|
+
| Campaign Name | <!-- campaign name --> |
|
|
13
|
+
| Campaign Objective | <!-- brand awareness / lead generation / engagement / product launch / community growth --> |
|
|
14
|
+
| Campaign Window | <!-- YYYY-MM-DD to YYYY-MM-DD --> |
|
|
15
|
+
| Total Duration | <!-- e.g., 30 days --> |
|
|
16
|
+
| Posting Cadence | <!-- e.g., 3x per week per platform --> |
|
|
17
|
+
| Target Platforms | <!-- comma-separated list --> |
|
|
18
|
+
| Execution Mode | <!-- local-fork / agent-only / hybrid --> |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Campaign Objective
|
|
23
|
+
|
|
24
|
+
<!-- One paragraph stating the primary goal, what success looks like, and what problem the campaign solves for the client. -->
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Target Platforms
|
|
29
|
+
|
|
30
|
+
| Platform | Audience Fit | Content Format | Primary Goal |
|
|
31
|
+
|---|---|---|---|
|
|
32
|
+
| <!-- platform --> | <!-- why this platform fits the audience --> | <!-- image / video / carousel / text --> | <!-- specific platform goal --> |
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Audience Profile
|
|
37
|
+
|
|
38
|
+
### Primary Audience
|
|
39
|
+
|
|
40
|
+
| Attribute | Description |
|
|
41
|
+
|---|---|
|
|
42
|
+
| Age Range | <!-- e.g., 25–40 --> |
|
|
43
|
+
| Interests | <!-- e.g., entrepreneurship, SaaS, productivity --> |
|
|
44
|
+
| Platforms Most Active | <!-- e.g., LinkedIn, X --> |
|
|
45
|
+
| Pain Points | <!-- what they struggle with --> |
|
|
46
|
+
| Content Preferences | <!-- educational / entertaining / inspirational / promotional --> |
|
|
47
|
+
|
|
48
|
+
### Secondary Audience
|
|
49
|
+
|
|
50
|
+
| Attribute | Description |
|
|
51
|
+
|---|---|
|
|
52
|
+
| Age Range | <!-- --> |
|
|
53
|
+
| Interests | <!-- --> |
|
|
54
|
+
| Platforms Most Active | <!-- --> |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## KPI Targets
|
|
59
|
+
|
|
60
|
+
| Metric | Target | Measurement Method |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| Impressions | <!-- e.g., 50,000 / month --> | Platform native analytics |
|
|
63
|
+
| Engagement Rate | <!-- e.g., ≥3% --> | (likes + comments + shares) / impressions |
|
|
64
|
+
| Follower Growth | <!-- e.g., +500 net new followers --> | Platform native |
|
|
65
|
+
| Link Clicks | <!-- e.g., 200 clicks to landing page --> | UTM tracking / bio link |
|
|
66
|
+
| Conversions | <!-- e.g., 20 demo requests --> | CRM / tracking pixel |
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Content Theme Pillars
|
|
71
|
+
|
|
72
|
+
<!-- Define 3–5 recurring themes that anchor the content calendar. Each pillar should be a distinct topic area that aligns with the campaign objective. -->
|
|
73
|
+
|
|
74
|
+
| Pillar | Theme | Content Mix | Example Topics |
|
|
75
|
+
|---|---|---|---|
|
|
76
|
+
| 1 | <!-- e.g., Industry Insights --> | <!-- % of calendar --> | <!-- e.g., "Top 5 trends in...", "What the data shows..." --> |
|
|
77
|
+
| 2 | <!-- e.g., Product Value --> | <!-- % --> | <!-- --> |
|
|
78
|
+
| 3 | <!-- e.g., Social Proof --> | <!-- % --> | <!-- --> |
|
|
79
|
+
| 4 | <!-- e.g., Behind the Scenes --> | <!-- % --> | <!-- --> |
|
|
80
|
+
| 5 | <!-- e.g., Community Engagement --> | <!-- % --> | <!-- optional --> |
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Brand Voice
|
|
85
|
+
|
|
86
|
+
| Attribute | Spec |
|
|
87
|
+
|---|---|
|
|
88
|
+
| Tone | <!-- e.g., Professional but approachable, data-driven, never salesy --> |
|
|
89
|
+
| Words to Use | <!-- e.g., "build", "grow", "automate", "team" --> |
|
|
90
|
+
| Words to Avoid | <!-- e.g., "cheap", "hack", "guru" --> |
|
|
91
|
+
| Emoji Usage | <!-- e.g., Minimal — max 2 per caption on LinkedIn; more casual on Instagram --> |
|
|
92
|
+
| CTA Style | <!-- e.g., Direct verbs: "Start today", "Learn more", "Join us" --> |
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Competitor Reference Accounts
|
|
97
|
+
|
|
98
|
+
| Platform | Account | Why Reference |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| <!-- --> | <!-- --> | <!-- e.g., strong engagement format, industry leader --> |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Deliverables Scope
|
|
105
|
+
|
|
106
|
+
- [ ] Content Calendar (<!-- N --> posts over <!-- N --> days)
|
|
107
|
+
- [ ] Platform Publishing Plan
|
|
108
|
+
- [ ] Caption Copy Deck (A/B/C variants per post)
|
|
109
|
+
- [ ] Scheduling Manifest
|
|
110
|
+
- [ ] Analytics Brief (end of campaign)
|
|
111
|
+
- [ ] Client Proposal
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Validation Checklist — growthub-postiz-social-v1
|
|
2
|
+
|
|
3
|
+
**Run through this checklist before starting every operator session and before delivering any artifact package.**
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Pre-Session Checklist
|
|
8
|
+
|
|
9
|
+
### Environment Gate
|
|
10
|
+
|
|
11
|
+
- [ ] Node.js 18+ is installed (`node --version` returns 18+)
|
|
12
|
+
- [ ] Docker is installed and running (`docker --version`)
|
|
13
|
+
- [ ] `docker compose` command is available
|
|
14
|
+
- [ ] Git is installed (`git --version`)
|
|
15
|
+
|
|
16
|
+
### Local-Fork Mode (skip if agent-only)
|
|
17
|
+
|
|
18
|
+
- [ ] Postiz fork is cloned at `POSTIZ_FORK_PATH` (default: `~/postiz-app`)
|
|
19
|
+
- [ ] `docker compose ps` shows `postiz`, `postiz-postgres`, `postiz-redis` all running
|
|
20
|
+
- [ ] `curl http://localhost:3000/api/healthcheck` returns a 200 response
|
|
21
|
+
- [ ] At least one platform integration is connected and authorized in the Postiz admin UI
|
|
22
|
+
- [ ] `POSTIZ_WORKSPACE_ID` is set in `.env` (required for scheduling manifest submission)
|
|
23
|
+
|
|
24
|
+
### Agent-Only Mode (skip if local-fork)
|
|
25
|
+
|
|
26
|
+
- [ ] Mode is confirmed with the user and documented as `agent-only` at the top of all outputs
|
|
27
|
+
- [ ] Scheduling manifests are marked as `dry-run: true` in the manifest header
|
|
28
|
+
|
|
29
|
+
### Context
|
|
30
|
+
|
|
31
|
+
- [ ] Brand kit exists for the active client (`brands/<client-slug>/brand-kit.md`)
|
|
32
|
+
- [ ] Campaign objective is confirmed (one of: brand awareness / lead generation / engagement / product launch / community growth)
|
|
33
|
+
- [ ] Target platforms are confirmed and in the supported list (`docs/platform-coverage.md`)
|
|
34
|
+
- [ ] Campaign timeframe and posting cadence are confirmed
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Pre-Delivery Checklist
|
|
39
|
+
|
|
40
|
+
### Content Calendar
|
|
41
|
+
|
|
42
|
+
- [ ] All calendar rows have dates within the campaign window
|
|
43
|
+
- [ ] All platform slugs match `docs/platform-coverage.md`
|
|
44
|
+
- [ ] All post types are valid for their target platform
|
|
45
|
+
- [ ] Every row has a non-empty CTA
|
|
46
|
+
- [ ] Media asset notes are present for all image/video/carousel posts
|
|
47
|
+
|
|
48
|
+
### Caption Copy Deck
|
|
49
|
+
|
|
50
|
+
- [ ] All 3 variants (A/B/C) are present for every post entry
|
|
51
|
+
- [ ] All captions respect platform character limits
|
|
52
|
+
- [ ] Hashtag counts are within platform-recommended ranges
|
|
53
|
+
- [ ] No placeholder text remains (no `[INSERT CAPTION HERE]` style fragments)
|
|
54
|
+
|
|
55
|
+
### Scheduling Manifest
|
|
56
|
+
|
|
57
|
+
- [ ] All `scheduledAt` timestamps are ISO 8601 format with timezone offset
|
|
58
|
+
- [ ] All `postId` values follow the naming convention
|
|
59
|
+
- [ ] `workspaceId` is present (or `"placeholder"` with `dry-run: true` in agent-only mode)
|
|
60
|
+
- [ ] Every post in the manifest has a corresponding entry in the ContentCalendar
|
|
61
|
+
|
|
62
|
+
### Output Files
|
|
63
|
+
|
|
64
|
+
- [ ] All files follow the naming convention (`ClientSlug_OutputType_v<N>_<YYYYMMDD>.md`)
|
|
65
|
+
- [ ] All files are saved to `output/<client-slug>/<project-slug>/`
|
|
66
|
+
- [ ] Deliverable is logged in the brand kit DELIVERABLES LOG
|
|
67
|
+
- [ ] No API keys, tokens, or credentials appear in any output file
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Kit Integrity Checklist (run after kit changes)
|
|
72
|
+
|
|
73
|
+
- [ ] `kit.json` is valid JSON with `schemaVersion: 2`
|
|
74
|
+
- [ ] All paths in `frozenAssetPaths` exist on disk
|
|
75
|
+
- [ ] All paths in `outputStandard.requiredPaths` exist on disk
|
|
76
|
+
- [ ] Bundle manifest `bundles/growthub-postiz-social-v1.json` exists and matches kit.json
|
|
77
|
+
- [ ] `bundle.kitId` in bundle manifest matches `kit.id` in kit.json
|
|
78
|
+
- [ ] `bundle.workerId` in bundle manifest matches `entrypoint.workerId` in kit.json
|
|
79
|
+
- [ ] All paths in `requiredFrozenAssets` in bundle manifest exist on disk
|