@growthub/cli 0.3.53 → 0.3.55

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 (141) hide show
  1. package/assets/worker-kits/growthub-ai-website-cloner-v1/.env.example +7 -0
  2. package/assets/worker-kits/growthub-ai-website-cloner-v1/QUICKSTART.md +116 -0
  3. package/assets/worker-kits/growthub-ai-website-cloner-v1/brands/NEW-CLIENT.md +22 -0
  4. package/assets/worker-kits/growthub-ai-website-cloner-v1/brands/_template/brand-kit.md +27 -0
  5. package/assets/worker-kits/growthub-ai-website-cloner-v1/brands/growthub/brand-kit.md +26 -0
  6. package/assets/worker-kits/growthub-ai-website-cloner-v1/bundles/growthub-ai-website-cloner-v1.json +53 -0
  7. package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/ai-website-cloner-fork-integration.md +118 -0
  8. package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/design-token-system.md +135 -0
  9. package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/multi-phase-pipeline.md +129 -0
  10. package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/parallel-builder-dispatch.md +103 -0
  11. package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/clone-brief-sample.md +54 -0
  12. package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/component-spec-sample.md +123 -0
  13. package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/platform-handoff-sample.md +102 -0
  14. package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/visual-qa-sample.md +119 -0
  15. package/assets/worker-kits/growthub-ai-website-cloner-v1/growthub-meta/README.md +71 -0
  16. package/assets/worker-kits/growthub-ai-website-cloner-v1/growthub-meta/kit-standard.md +47 -0
  17. package/assets/worker-kits/growthub-ai-website-cloner-v1/kit.json +105 -0
  18. package/assets/worker-kits/growthub-ai-website-cloner-v1/output/README.md +26 -0
  19. package/assets/worker-kits/growthub-ai-website-cloner-v1/output-standards.md +75 -0
  20. package/assets/worker-kits/growthub-ai-website-cloner-v1/runtime-assumptions.md +70 -0
  21. package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/check-deps.sh +50 -0
  22. package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/clone-fork.sh +66 -0
  23. package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/verify-env.mjs +78 -0
  24. package/assets/worker-kits/growthub-ai-website-cloner-v1/skills.md +186 -0
  25. package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/asset-manifest.md +57 -0
  26. package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/builder-dispatch-plan.md +92 -0
  27. package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/clone-brief.md +59 -0
  28. package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/component-spec.md +124 -0
  29. package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/design-token-extraction.md +89 -0
  30. package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/platform-handoff.md +114 -0
  31. package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/reconnaissance-report.md +77 -0
  32. package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/visual-qa-checklist.md +107 -0
  33. package/assets/worker-kits/growthub-ai-website-cloner-v1/validation-checklist.md +76 -0
  34. package/assets/worker-kits/growthub-ai-website-cloner-v1/workers/ai-website-cloner-operator/CLAUDE.md +256 -0
  35. package/assets/worker-kits/growthub-open-montage-studio-v1/.env.example +40 -0
  36. package/assets/worker-kits/growthub-open-montage-studio-v1/QUICKSTART.md +114 -0
  37. package/assets/worker-kits/growthub-open-montage-studio-v1/brands/NEW-CLIENT.md +42 -0
  38. package/assets/worker-kits/growthub-open-montage-studio-v1/brands/_template/brand-kit.md +49 -0
  39. package/assets/worker-kits/growthub-open-montage-studio-v1/brands/growthub/brand-kit.md +50 -0
  40. package/assets/worker-kits/growthub-open-montage-studio-v1/bundles/growthub-open-montage-studio-v1.json +55 -0
  41. package/assets/worker-kits/growthub-open-montage-studio-v1/docs/cms-node-bridge.md +152 -0
  42. package/assets/worker-kits/growthub-open-montage-studio-v1/docs/open-montage-fork-integration.md +120 -0
  43. package/assets/worker-kits/growthub-open-montage-studio-v1/docs/pipeline-reference.md +147 -0
  44. package/assets/worker-kits/growthub-open-montage-studio-v1/docs/provider-adapter-layer.md +105 -0
  45. package/assets/worker-kits/growthub-open-montage-studio-v1/examples/cms-node-video-gen-sample.md +109 -0
  46. package/assets/worker-kits/growthub-open-montage-studio-v1/examples/pipeline-selection-sample.md +67 -0
  47. package/assets/worker-kits/growthub-open-montage-studio-v1/examples/platform-ready-handoff-sample.md +101 -0
  48. package/assets/worker-kits/growthub-open-montage-studio-v1/examples/video-production-brief-sample.md +68 -0
  49. package/assets/worker-kits/growthub-open-montage-studio-v1/growthub-meta/README.md +7 -0
  50. package/assets/worker-kits/growthub-open-montage-studio-v1/growthub-meta/kit-standard.md +45 -0
  51. package/assets/worker-kits/growthub-open-montage-studio-v1/kit.json +107 -0
  52. package/assets/worker-kits/growthub-open-montage-studio-v1/output/README.md +34 -0
  53. package/assets/worker-kits/growthub-open-montage-studio-v1/output-standards.md +79 -0
  54. package/assets/worker-kits/growthub-open-montage-studio-v1/runtime-assumptions.md +86 -0
  55. package/assets/worker-kits/growthub-open-montage-studio-v1/setup/check-deps.sh +43 -0
  56. package/assets/worker-kits/growthub-open-montage-studio-v1/setup/clone-fork.sh +53 -0
  57. package/assets/worker-kits/growthub-open-montage-studio-v1/setup/verify-env.mjs +102 -0
  58. package/assets/worker-kits/growthub-open-montage-studio-v1/skills.md +254 -0
  59. package/assets/worker-kits/growthub-open-montage-studio-v1/templates/asset-tracking.md +46 -0
  60. package/assets/worker-kits/growthub-open-montage-studio-v1/templates/cms-node-pipeline-mapping.md +64 -0
  61. package/assets/worker-kits/growthub-open-montage-studio-v1/templates/generation-batch-plan.md +70 -0
  62. package/assets/worker-kits/growthub-open-montage-studio-v1/templates/pipeline-selection-brief.md +67 -0
  63. package/assets/worker-kits/growthub-open-montage-studio-v1/templates/platform-ready-execution-handoff.md +103 -0
  64. package/assets/worker-kits/growthub-open-montage-studio-v1/templates/prompt-matrix.md +48 -0
  65. package/assets/worker-kits/growthub-open-montage-studio-v1/templates/provider-selection-brief.md +86 -0
  66. package/assets/worker-kits/growthub-open-montage-studio-v1/templates/review-qa-checklist.md +59 -0
  67. package/assets/worker-kits/growthub-open-montage-studio-v1/templates/scene-plan.md +65 -0
  68. package/assets/worker-kits/growthub-open-montage-studio-v1/templates/video-production-brief.md +58 -0
  69. package/assets/worker-kits/growthub-open-montage-studio-v1/validation-checklist.md +46 -0
  70. package/assets/worker-kits/growthub-open-montage-studio-v1/workers/open-montage-studio-operator/CLAUDE.md +304 -0
  71. package/assets/worker-kits/growthub-postiz-social-v1/.env.example +18 -0
  72. package/assets/worker-kits/growthub-postiz-social-v1/QUICKSTART.md +136 -0
  73. package/assets/worker-kits/growthub-postiz-social-v1/brands/NEW-CLIENT.md +67 -0
  74. package/assets/worker-kits/growthub-postiz-social-v1/brands/_template/brand-kit.md +120 -0
  75. package/assets/worker-kits/growthub-postiz-social-v1/brands/growthub/brand-kit.md +117 -0
  76. package/assets/worker-kits/growthub-postiz-social-v1/bundles/growthub-postiz-social-v1.json +52 -0
  77. package/assets/worker-kits/growthub-postiz-social-v1/docs/ai-caption-layer.md +118 -0
  78. package/assets/worker-kits/growthub-postiz-social-v1/docs/bullmq-queue-layer.md +157 -0
  79. package/assets/worker-kits/growthub-postiz-social-v1/docs/platform-coverage.md +97 -0
  80. package/assets/worker-kits/growthub-postiz-social-v1/docs/postiz-fork-integration.md +143 -0
  81. package/assets/worker-kits/growthub-postiz-social-v1/examples/analytics-brief-sample.md +125 -0
  82. package/assets/worker-kits/growthub-postiz-social-v1/examples/client-proposal-sample.md +127 -0
  83. package/assets/worker-kits/growthub-postiz-social-v1/examples/content-calendar-sample.md +75 -0
  84. package/assets/worker-kits/growthub-postiz-social-v1/examples/social-campaign-sample.md +104 -0
  85. package/assets/worker-kits/growthub-postiz-social-v1/growthub-meta/README.md +128 -0
  86. package/assets/worker-kits/growthub-postiz-social-v1/growthub-meta/kit-standard.md +113 -0
  87. package/assets/worker-kits/growthub-postiz-social-v1/kit.json +104 -0
  88. package/assets/worker-kits/growthub-postiz-social-v1/output/README.md +56 -0
  89. package/assets/worker-kits/growthub-postiz-social-v1/output-standards.md +127 -0
  90. package/assets/worker-kits/growthub-postiz-social-v1/runtime-assumptions.md +159 -0
  91. package/assets/worker-kits/growthub-postiz-social-v1/setup/check-deps.sh +117 -0
  92. package/assets/worker-kits/growthub-postiz-social-v1/setup/clone-fork.sh +83 -0
  93. package/assets/worker-kits/growthub-postiz-social-v1/setup/verify-env.mjs +99 -0
  94. package/assets/worker-kits/growthub-postiz-social-v1/skills.md +277 -0
  95. package/assets/worker-kits/growthub-postiz-social-v1/templates/analytics-brief.md +123 -0
  96. package/assets/worker-kits/growthub-postiz-social-v1/templates/caption-copy-deck.md +127 -0
  97. package/assets/worker-kits/growthub-postiz-social-v1/templates/client-proposal.md +139 -0
  98. package/assets/worker-kits/growthub-postiz-social-v1/templates/content-calendar.md +65 -0
  99. package/assets/worker-kits/growthub-postiz-social-v1/templates/platform-publishing-plan.md +112 -0
  100. package/assets/worker-kits/growthub-postiz-social-v1/templates/scheduling-manifest.md +83 -0
  101. package/assets/worker-kits/growthub-postiz-social-v1/templates/social-campaign-brief.md +111 -0
  102. package/assets/worker-kits/growthub-postiz-social-v1/validation-checklist.md +79 -0
  103. package/assets/worker-kits/growthub-postiz-social-v1/workers/postiz-social-operator/CLAUDE.md +287 -0
  104. package/assets/worker-kits/growthub-twenty-crm-v1/.env.example +15 -0
  105. package/assets/worker-kits/growthub-twenty-crm-v1/QUICKSTART.md +90 -0
  106. package/assets/worker-kits/growthub-twenty-crm-v1/brands/NEW-CLIENT.md +57 -0
  107. package/assets/worker-kits/growthub-twenty-crm-v1/brands/_template/brand-kit.md +88 -0
  108. package/assets/worker-kits/growthub-twenty-crm-v1/brands/growthub/brand-kit.md +92 -0
  109. package/assets/worker-kits/growthub-twenty-crm-v1/bundles/growthub-twenty-crm-v1.json +56 -0
  110. package/assets/worker-kits/growthub-twenty-crm-v1/docs/api-and-webhooks.md +296 -0
  111. package/assets/worker-kits/growthub-twenty-crm-v1/docs/data-model-layer.md +172 -0
  112. package/assets/worker-kits/growthub-twenty-crm-v1/docs/twenty-fork-integration.md +213 -0
  113. package/assets/worker-kits/growthub-twenty-crm-v1/examples/crm-playbook-sample.md +172 -0
  114. package/assets/worker-kits/growthub-twenty-crm-v1/examples/crm-setup-sample.md +100 -0
  115. package/assets/worker-kits/growthub-twenty-crm-v1/examples/lead-enrichment-sample.md +117 -0
  116. package/assets/worker-kits/growthub-twenty-crm-v1/examples/pipeline-automation-sample.md +132 -0
  117. package/assets/worker-kits/growthub-twenty-crm-v1/growthub-meta/README.md +114 -0
  118. package/assets/worker-kits/growthub-twenty-crm-v1/growthub-meta/kit-standard.md +61 -0
  119. package/assets/worker-kits/growthub-twenty-crm-v1/kit.json +108 -0
  120. package/assets/worker-kits/growthub-twenty-crm-v1/output/README.md +46 -0
  121. package/assets/worker-kits/growthub-twenty-crm-v1/output-standards.md +175 -0
  122. package/assets/worker-kits/growthub-twenty-crm-v1/runtime-assumptions.md +150 -0
  123. package/assets/worker-kits/growthub-twenty-crm-v1/setup/check-deps.sh +56 -0
  124. package/assets/worker-kits/growthub-twenty-crm-v1/setup/clone-fork.sh +77 -0
  125. package/assets/worker-kits/growthub-twenty-crm-v1/setup/verify-env.mjs +105 -0
  126. package/assets/worker-kits/growthub-twenty-crm-v1/skills.md +401 -0
  127. package/assets/worker-kits/growthub-twenty-crm-v1/templates/api-query-plan.md +179 -0
  128. package/assets/worker-kits/growthub-twenty-crm-v1/templates/crm-playbook.md +155 -0
  129. package/assets/worker-kits/growthub-twenty-crm-v1/templates/crm-setup-brief.md +94 -0
  130. package/assets/worker-kits/growthub-twenty-crm-v1/templates/custom-object-design.md +115 -0
  131. package/assets/worker-kits/growthub-twenty-crm-v1/templates/data-model-design.md +112 -0
  132. package/assets/worker-kits/growthub-twenty-crm-v1/templates/enrichment-field-map.md +100 -0
  133. package/assets/worker-kits/growthub-twenty-crm-v1/templates/import-mapping.md +139 -0
  134. package/assets/worker-kits/growthub-twenty-crm-v1/templates/integration-handoff.md +190 -0
  135. package/assets/worker-kits/growthub-twenty-crm-v1/templates/lead-enrichment-pipeline.md +128 -0
  136. package/assets/worker-kits/growthub-twenty-crm-v1/templates/pipeline-automation-brief.md +88 -0
  137. package/assets/worker-kits/growthub-twenty-crm-v1/templates/webhook-integration-spec.md +129 -0
  138. package/assets/worker-kits/growthub-twenty-crm-v1/templates/workspace-config-checklist.md +129 -0
  139. package/assets/worker-kits/growthub-twenty-crm-v1/validation-checklist.md +115 -0
  140. package/assets/worker-kits/growthub-twenty-crm-v1/workers/twenty-crm-operator/CLAUDE.md +310 -0
  141. package/package.json +1 -1
@@ -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
@@ -0,0 +1,157 @@
1
+ # BullMQ Queue Layer
2
+
3
+ **Scheduling manifest format and queue architecture for Postiz API submission.**
4
+
5
+ ---
6
+
7
+ ## Overview
8
+
9
+ Postiz uses BullMQ (backed by Redis) as its job queue for scheduled post publishing. When this kit generates a scheduling manifest, it produces a JSON file that can be submitted to the Postiz API's bulk scheduling endpoint. The API enqueues each post with a delay calculated from `scheduledAt - now()`.
10
+
11
+ ---
12
+
13
+ ## Scheduling Manifest Format
14
+
15
+ The full JSON format for the scheduling manifest:
16
+
17
+ ```json
18
+ {
19
+ "postizSchedulingManifest": {
20
+ "version": "1.0",
21
+ "workspaceId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
22
+ "generatedAt": "2026-04-15T10:00:00-05:00",
23
+ "dryRun": false,
24
+ "posts": [
25
+ {
26
+ "postId": "urbancycle-20260420-instagram-001",
27
+ "platform": "instagram",
28
+ "scheduledAt": "2026-04-20T09:00:00-05:00",
29
+ "content": "Building for the long game means planting seeds you won't harvest for years. At Urban Cycle, we're still running routes we mapped in 2021. Where are you building today that you won't see pay off until 2028? Share in the comments — we read every one. #urbanmobility #sustainableliving #cycling",
30
+ "mediaAssets": [
31
+ {
32
+ "type": "image",
33
+ "path": "assets/2026-04-20-instagram-001.jpg",
34
+ "altText": "Urban Cycle team on a community cycling route, morning light"
35
+ }
36
+ ],
37
+ "tags": ["#urbanmobility", "#sustainableliving", "#cycling"],
38
+ "status": "pending"
39
+ }
40
+ ]
41
+ }
42
+ }
43
+ ```
44
+
45
+ ---
46
+
47
+ ## Field Reference
48
+
49
+ | Field | Type | Required | Description |
50
+ |---|---|---|---|
51
+ | `version` | string | Yes | Manifest version — always `"1.0"` for this kit |
52
+ | `workspaceId` | string (UUID) | Yes | Postiz workspace UUID from Settings → Workspace |
53
+ | `generatedAt` | string (ISO 8601) | Yes | Manifest generation timestamp |
54
+ | `dryRun` | boolean | Yes | `true` for agent-only mode (no API submission); `false` for live submission |
55
+ | `posts[].postId` | string | Yes | Unique post identifier — see naming convention below |
56
+ | `posts[].platform` | string | Yes | Postiz platform integration ID (from `docs/platform-coverage.md`) |
57
+ | `posts[].scheduledAt` | string (ISO 8601) | Yes | Target publish timestamp with timezone offset |
58
+ | `posts[].content` | string | Yes | Full caption text (selected A/B/C variant) |
59
+ | `posts[].mediaAssets` | array | No | Media asset references (empty array if text-only post) |
60
+ | `posts[].mediaAssets[].type` | string | Yes | `"image"` \| `"video"` \| `"carousel"` |
61
+ | `posts[].mediaAssets[].path` | string | Yes | Relative path to asset file |
62
+ | `posts[].mediaAssets[].altText` | string | No | Accessibility alt text for images |
63
+ | `posts[].tags` | array | No | Hashtag strings (with `#` prefix) |
64
+ | `posts[].status` | string | Yes | Always `"pending"` in generated manifest |
65
+
66
+ ---
67
+
68
+ ## Post ID Naming Convention
69
+
70
+ ```
71
+ <client-slug>-<YYYYMMDD>-<platform>-<sequence>
72
+ ```
73
+
74
+ | Part | Rule | Example |
75
+ |---|---|---|
76
+ | client-slug | Lowercase, hyphenated, no special chars | `urban-cycle` |
77
+ | YYYYMMDD | Scheduled post date | `20260420` |
78
+ | platform | Postiz platform ID | `instagram` |
79
+ | sequence | 3-digit zero-padded sequence | `001`, `002`, `003` |
80
+
81
+ **Example:** `urban-cycle-20260420-instagram-001`
82
+
83
+ ---
84
+
85
+ ## Timestamp Format
86
+
87
+ All `scheduledAt` values must use ISO 8601 format with explicit timezone offset:
88
+
89
+ ```
90
+ YYYY-MM-DDTHH:MM:SS±HH:MM
91
+ ```
92
+
93
+ **Examples:**
94
+ - `2026-04-20T09:00:00-05:00` — 9am CDT
95
+ - `2026-04-20T09:00:00-04:00` — 9am EDT
96
+ - `2026-04-20T14:00:00Z` — 2pm UTC
97
+
98
+ Never use `Z` for local time unless the workspace timezone is explicitly UTC.
99
+
100
+ ---
101
+
102
+ ## Submission to Postiz API
103
+
104
+ ```bash
105
+ # Submit the scheduling manifest to Postiz bulk scheduling endpoint
106
+ curl -X POST "${POSTIZ_API_URL}/api/v1/posts/bulk" \
107
+ -H "Content-Type: application/json" \
108
+ -H "Authorization: Bearer <jwt-token>" \
109
+ -d @scheduling-manifest.json
110
+
111
+ # Verify queue health after submission
112
+ curl "${POSTIZ_API_URL}/api/v1/queue/health" \
113
+ -H "Authorization: Bearer <jwt-token>"
114
+ ```
115
+
116
+ Obtain the JWT token from Postiz admin UI → Settings → API Keys, or via `POST /api/v1/auth/login`.
117
+
118
+ ---
119
+
120
+ ## Queue Monitoring
121
+
122
+ After submitting the manifest, monitor the BullMQ queue:
123
+
124
+ 1. **Postiz admin UI** → Queue Management: shows pending, active, completed, and failed jobs
125
+ 2. **API endpoint**: `GET /api/v1/queue/health` — returns queue stats
126
+ 3. **Redis CLI** (advanced): `redis-cli monitor` — raw job events
127
+
128
+ ### Job States
129
+
130
+ | State | Meaning |
131
+ |---|---|
132
+ | `waiting` | Job is queued, delay has not expired |
133
+ | `active` | Job is currently being processed (publishing now) |
134
+ | `completed` | Post was published successfully |
135
+ | `failed` | Post failed to publish — check error in admin UI |
136
+ | `delayed` | Job is waiting for `scheduledAt` time |
137
+
138
+ ### Retry Logic
139
+
140
+ Postiz retries failed publish jobs 3 times with exponential backoff by default:
141
+ - Attempt 1: immediately after failure
142
+ - Attempt 2: 5 seconds after first retry
143
+ - Attempt 3: 30 seconds after second retry
144
+
145
+ Failed jobs after 3 attempts are moved to the dead letter queue and visible in the admin UI → Failed Jobs.
146
+
147
+ ---
148
+
149
+ ## Dry-Run Mode
150
+
151
+ When `dryRun: true` in the manifest header:
152
+ - The manifest is produced as a JSON file but is **not submitted to the Postiz API**
153
+ - All `status` fields remain `"pending"`
154
+ - The manifest can be reviewed and submitted manually
155
+ - Use `dryRun: true` in all agent-only mode sessions
156
+
157
+ The agent must set `dryRun: true` automatically when the Postiz API is not reachable or when execution mode is `agent-only`.
@@ -0,0 +1,97 @@
1
+ # Platform Coverage
2
+
3
+ **Supported Postiz integration IDs, format specs, and character limits.**
4
+
5
+ **Frozen at kit creation: 2026-04-15. Update when Postiz adds new platform integrations.**
6
+
7
+ ---
8
+
9
+ ## Platform Reference Table
10
+
11
+ | Platform | Postiz ID | Auth Method | Post Types | Char Limit | Image Spec | Video Spec |
12
+ |---|---|---|---|---|---|---|
13
+ | Instagram | `instagram` | Meta OAuth | image, video, reel, story, carousel | 2,200 | 1080×1080 (square), 1080×1350 (portrait) | 1080×1920 (reels), MP4, ≤90s |
14
+ | LinkedIn | `linkedin` | LinkedIn OAuth | text, image, video, document/carousel | 3,000 | 1200×627, PNG/JPG | MP4, ≤10 min |
15
+ | TikTok | `tiktok` | TikTok OAuth | video only | 2,200 | — | 1080×1920, MP4/MOV, 15s–10min |
16
+ | X (Twitter) | `twitter` | Twitter OAuth 2.0 | text, image, video, thread | 280 | 1200×675, ≤5MB | MP4/MOV, ≤2min 20s |
17
+ | YouTube | `youtube` | Google OAuth | video (long-form), shorts | N/A | Thumbnail: 1280×720 | MP4, any length; Shorts ≤60s, 1080×1920 |
18
+ | Pinterest | `pinterest` | Pinterest OAuth | image, video, idea pin | 500 | 1000×1500 (2:3 ratio) | MP4, 4s–15min |
19
+ | Reddit | `reddit` | Reddit OAuth | text, image, video, link | — subreddit rules | Varies by subreddit | MP4, ≤15min |
20
+ | Facebook | `facebook` | Meta OAuth | text, image, video, reel, story, carousel | 63,206 | 1200×628, PNG/JPG | MP4, ≤240min |
21
+ | Bluesky | `bluesky` | AT Protocol credentials | text, image, video | 300 | Up to 4 images, 1×1 to 3×4 | MP4, ≤60s |
22
+ | Mastodon | `mastodon` | OAuth (instance-specific) | text, image, video, poll | 500 (instance-configurable) | PNG/JPG/GIF/WebP | MP4/WebM/MOV |
23
+ | Slack | `slack` | Slack OAuth | text, image, file | — | PNG/JPG/GIF | MP4 |
24
+ | Telegram | `telegram` | Telegram Bot API token | text, image, video, document | 4,096 | JPEG, ≤10MB | MP4, ≤50MB |
25
+ | Discord | `discord` | Discord Bot token | text, image, video, embed | 2,000 | PNG/JPG/GIF, ≤8MB | MP4, ≤8MB |
26
+ | Threads | `threads` | Meta OAuth | text, image, video | 500 | 1:1 square; 4:5 portrait | MP4, ≤5min |
27
+ | Dribbble | `dribbble` | Dribbble OAuth | image, video | — | PNG/JPG/GIF, ≤30MB | — |
28
+ | Tumblr | `tumblr` | Tumblr OAuth | text, image, video, audio | — | PNG/JPG/GIF | MP4 |
29
+ | Medium | `medium` | Medium OAuth | article (long-form markdown) | — | Embedded images | — |
30
+ | DEV.to | `devto` | DEV API key | article (markdown) | — | Embedded images | — |
31
+ | Hashnode | `hashnode` | Hashnode API key | article (markdown) | — | Embedded images | — |
32
+ | Lemmy | `lemmy` | Lemmy credentials | text, image, link | — | PNG/JPG | — |
33
+ | Nostr | `nostr` | Nostr keypair | text, image | — | URLs (no direct upload) | — |
34
+
35
+ ---
36
+
37
+ ## Platform Selection Guidance
38
+
39
+ ### Audience Demographics (2026 data — update when brand kit specifies more precise data)
40
+
41
+ | Platform | Primary Demographic | Dominant Use Case |
42
+ |---|---|---|
43
+ | Instagram | 18–34 (55% female) | Visual branding, lifestyle, product showcase |
44
+ | LinkedIn | 25–55 (professional) | B2B, thought leadership, hiring |
45
+ | TikTok | 18–34 | Short-form entertainment, product discovery |
46
+ | X/Twitter | 18–49 (male-skewed) | News, opinion, live commentary |
47
+ | YouTube | All ages (18–49 core) | Education, reviews, entertainment |
48
+ | Pinterest | 25–44 (female-skewed 70%) | Discovery, DIY, home, fashion, recipes |
49
+ | Reddit | 18–49 (male-skewed) | Community discussion, niche interests |
50
+ | Facebook | 35–65 | Community groups, local business, events |
51
+ | Bluesky | 18–40 (tech-forward) | Open protocol social, tech and media |
52
+ | Mastodon | 25–45 (tech-forward) | Open source, decentralized, privacy-aware |
53
+ | LinkedIn | — | — |
54
+
55
+ ---
56
+
57
+ ## Post Type Compatibility Matrix
58
+
59
+ | Post Type | instagram | linkedin | tiktok | twitter | youtube | pinterest | reddit | facebook | bluesky |
60
+ |---|---|---|---|---|---|---|---|---|---|
61
+ | Static Image | ✓ | ✓ | ✗ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ |
62
+ | Video | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
63
+ | Carousel / Slides | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✓ | ✗ |
64
+ | Text Only | ✗ | ✓ | ✗ | ✓ | ✗ | ✗ | ✓ | ✓ | ✓ |
65
+ | Story | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ |
66
+ | Reel / Short | ✓ | ✗ | ✓ | ✗ | ✓ (Shorts) | ✗ | ✗ | ✓ | ✗ |
67
+ | Long-form Article | ✗ | ✓ (newsletter) | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ |
68
+
69
+ ---
70
+
71
+ ## Hashtag Best Practices by Platform
72
+
73
+ | Platform | Recommended Count | Strategy |
74
+ |---|---|---|
75
+ | Instagram | 3–5 | Mix niche + medium-volume (avoid over-tagging) |
76
+ | LinkedIn | 3–5 | Professional and industry-specific |
77
+ | TikTok | 3–6 | Mix trending sounds + niche tags |
78
+ | X/Twitter | 1–2 | In-text placement, campaign hashtags |
79
+ | Pinterest | 2–3 | Keyword-based for discoverability |
80
+ | Bluesky | 0–2 | Contextual only, rarely used |
81
+ | Mastodon | 2–4 | CamelCase for accessibility |
82
+ | Reddit | 0 | Subreddit flair instead |
83
+
84
+ ---
85
+
86
+ ## Posting Time Recommendations
87
+
88
+ *Based on general industry data. Override with client's own analytics if available.*
89
+
90
+ | Platform | Weekday Best Times (ET) | Weekend |
91
+ |---|---|---|
92
+ | Instagram | Mon–Fri: 9–11am, 6–8pm | Sat: 10am–12pm |
93
+ | LinkedIn | Tue–Thu: 8–10am, 12pm | Minimal weekend activity |
94
+ | TikTok | Mon–Fri: 7–9am, 7–9pm | Sat–Sun: 11am–1pm |
95
+ | X/Twitter | Mon–Fri: 8–10am, 12–2pm | Limited |
96
+ | Facebook | Tue–Thu: 9am–12pm | Sat: 12–1pm |
97
+ | Pinterest | Sat–Sun: 2–4pm, 8–11pm | All day |
@@ -0,0 +1,143 @@
1
+ # Postiz Fork Integration
2
+
3
+ **How this kit integrates with the Postiz open-source social media platform.**
4
+
5
+ ---
6
+
7
+ ## What Postiz Is
8
+
9
+ [Postiz](https://github.com/gitroomhq/postiz-app) is an open-source, self-hosted social media scheduling and automation platform built on NestJS + Next.js. It supports 28+ social media platforms and ships with a BullMQ job queue, multi-workspace management, AI caption generation, media upload, and a public REST API.
10
+
11
+ GitHub: https://github.com/gitroomhq/postiz-app
12
+ License: MIT
13
+ Stars: ~28,000+ (as of kit creation)
14
+
15
+ ---
16
+
17
+ ## Integration Architecture
18
+
19
+ ```
20
+ growthub-postiz-social-v1 (this kit)
21
+
22
+ ├── workers/postiz-social-operator/CLAUDE.md
23
+ │ Agent operating law — drives campaign planning, caption drafts,
24
+ │ scheduling manifest generation, and analytics briefing
25
+
26
+ ├── setup/clone-fork.sh
27
+ │ Clones gitroomhq/postiz-app → ~/postiz-app
28
+ │ Runs docker compose up -d (starts Postiz + Redis + PostgreSQL)
29
+ │ Waits for API healthcheck at http://localhost:3000/api/healthcheck
30
+
31
+ ├── setup/verify-env.mjs
32
+ │ Checks fork existence, API reachability, POSTIZ_WORKSPACE_ID, ANTHROPIC_API_KEY
33
+
34
+ └── templates/scheduling-manifest.md
35
+ BullMQ-compatible JSON manifest format for bulk post scheduling
36
+ via POST /api/v1/posts/bulk
37
+ ```
38
+
39
+ ---
40
+
41
+ ## Service Topology
42
+
43
+ When running in local-fork mode, Postiz operates as a Docker Compose stack:
44
+
45
+ ```
46
+ postiz-app container (port 3000)
47
+ ├── NestJS API (apps/backend/) ← REST API, BullMQ job scheduler
48
+ └── Next.js Frontend (apps/frontend/) ← Admin UI, calendar view, analytics
49
+
50
+ postiz-redis container (port 6379)
51
+ └── Redis ← BullMQ queue backend, session cache
52
+
53
+ postiz-postgres container (port 5432)
54
+ └── PostgreSQL ← Posts, workspaces, platform credentials, analytics
55
+ ```
56
+
57
+ All services are defined in `docker-compose.yml` at the fork root.
58
+
59
+ ---
60
+
61
+ ## Postiz API — Key Endpoints Used By This Kit
62
+
63
+ | Endpoint | Method | Purpose |
64
+ |---|---|---|
65
+ | `/api/healthcheck` | GET | Verify Postiz is running |
66
+ | `/api/v1/workspace` | GET | Retrieve workspace ID and metadata |
67
+ | `/api/v1/posts/bulk` | POST | Submit scheduling manifest |
68
+ | `/api/v1/posts/{id}` | GET | Verify a scheduled post |
69
+ | `/api/v1/analytics` | GET | Retrieve engagement analytics |
70
+ | `/api/v1/queue/health` | GET | Check BullMQ queue health |
71
+ | `/api/v1/posts/ai/generate` | POST | AI caption generation (Postiz-side) |
72
+
73
+ Authentication is via JWT bearer token. Obtain from Postiz admin UI → Settings → API Keys.
74
+
75
+ ---
76
+
77
+ ## Platform Integration Layer
78
+
79
+ Platform integrations live under `libraries/nestjs-libraries/src/integrations/` in the Postiz repo. Each integration file:
80
+ - Defines the OAuth flow for connecting the platform account
81
+ - Implements `post()` for publishing content
82
+ - Implements `analytics()` for pulling engagement data
83
+ - Declares the integration ID (used as the `platform` field in scheduling manifests)
84
+
85
+ When this kit generates a scheduling manifest, platform IDs must match the integration IDs in the running Postiz instance. See `docs/platform-coverage.md` for the full list.
86
+
87
+ ---
88
+
89
+ ## AI Caption Generation
90
+
91
+ Postiz has its own AI caption generation endpoint (`/api/v1/posts/ai/generate`), activated when `OPENAI_API_KEY` or `ANTHROPIC_API_KEY` is set in the Postiz `.env`. This is **separate** from the agent-side caption drafting in this kit.
92
+
93
+ **This kit's caption workflow:**
94
+ - The `postiz-social-operator` agent drafts A/B/C caption variants using its own reasoning and the AI caption methodology in `docs/ai-caption-layer.md`
95
+ - Postiz's own AI caption feature is available to the user independently in the admin UI
96
+ - The kit does not call the Postiz AI endpoint — it produces its own caption drafts
97
+
98
+ ---
99
+
100
+ ## BullMQ Queue Behavior
101
+
102
+ When a post is submitted to Postiz via `POST /api/v1/posts/bulk`:
103
+
104
+ 1. Postiz validates the payload against the workspace's connected platforms
105
+ 2. Each post is enqueued in BullMQ with a delay calculated from `scheduledAt - now()`
106
+ 3. When the delay expires, BullMQ triggers the `publish-post` job
107
+ 4. The job calls the platform integration's `post()` method
108
+ 5. On success: post marked as `published` in PostgreSQL
109
+ 6. On failure: retried up to 3 times (configurable), then moved to dead letter queue
110
+
111
+ Monitor the queue via Postiz admin UI → Queue Management, or via `GET /api/v1/queue/health`.
112
+
113
+ ---
114
+
115
+ ## Workspace Isolation
116
+
117
+ Postiz supports multiple workspaces. Each workspace has:
118
+ - Its own set of connected platform accounts
119
+ - Its own posting queue
120
+ - Its own analytics data
121
+ - A UUID (`workspaceId`) required in all API calls
122
+
123
+ The `POSTIZ_WORKSPACE_ID` in this kit's `.env` must match the workspace configured in the Postiz admin UI. Get it from Settings → Workspace in the admin UI, or from `GET /api/v1/workspace`.
124
+
125
+ ---
126
+
127
+ ## Inspecting the Fork Before Planning
128
+
129
+ Before generating any campaign or scheduling manifest, inspect the running Postiz instance:
130
+
131
+ ```bash
132
+ # Verify all containers are running
133
+ docker compose ps
134
+
135
+ # Check API health
136
+ curl http://localhost:3000/api/healthcheck
137
+
138
+ # List connected platform integrations (requires auth)
139
+ curl http://localhost:3000/api/v1/integrations \
140
+ -H "Authorization: Bearer <jwt-token>"
141
+ ```
142
+
143
+ Do not generate scheduling manifests for platforms that are not connected and authorized in the Postiz admin UI. Unconnected platform posts will fail at publish time.