conectese 0.1.14

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 (260) hide show
  1. package/README.md +265 -0
  2. package/_conectese/.conectese-version +1 -0
  3. package/_conectese/config/playwright.config.json +11 -0
  4. package/_conectese/core/architect.agent.yaml +110 -0
  5. package/_conectese/core/best-practices/_catalog.yaml +116 -0
  6. package/_conectese/core/best-practices/blog-post.md +132 -0
  7. package/_conectese/core/best-practices/blog-seo.md +127 -0
  8. package/_conectese/core/best-practices/copywriting.md +426 -0
  9. package/_conectese/core/best-practices/data-analysis.md +401 -0
  10. package/_conectese/core/best-practices/email-newsletter.md +118 -0
  11. package/_conectese/core/best-practices/email-sales.md +110 -0
  12. package/_conectese/core/best-practices/image-design.md +348 -0
  13. package/_conectese/core/best-practices/instagram-feed.md +235 -0
  14. package/_conectese/core/best-practices/instagram-reels.md +112 -0
  15. package/_conectese/core/best-practices/instagram-stories.md +107 -0
  16. package/_conectese/core/best-practices/linkedin-article.md +116 -0
  17. package/_conectese/core/best-practices/linkedin-post.md +121 -0
  18. package/_conectese/core/best-practices/researching.md +349 -0
  19. package/_conectese/core/best-practices/review.md +269 -0
  20. package/_conectese/core/best-practices/social-networks-publishing.md +294 -0
  21. package/_conectese/core/best-practices/strategist.md +344 -0
  22. package/_conectese/core/best-practices/technical-writing.md +365 -0
  23. package/_conectese/core/best-practices/twitter-post.md +105 -0
  24. package/_conectese/core/best-practices/twitter-thread.md +122 -0
  25. package/_conectese/core/best-practices/whatsapp-broadcast.md +107 -0
  26. package/_conectese/core/best-practices/youtube-script.md +122 -0
  27. package/_conectese/core/best-practices/youtube-shorts.md +112 -0
  28. package/_conectese/core/prompts/build.prompt.md +547 -0
  29. package/_conectese/core/prompts/design.prompt.md +469 -0
  30. package/_conectese/core/prompts/discovery.prompt.md +269 -0
  31. package/_conectese/core/prompts/sherlock-instagram.md +123 -0
  32. package/_conectese/core/prompts/sherlock-linkedin.md +73 -0
  33. package/_conectese/core/prompts/sherlock-shared.md +684 -0
  34. package/_conectese/core/prompts/sherlock-twitter.md +78 -0
  35. package/_conectese/core/prompts/sherlock-youtube.md +85 -0
  36. package/_conectese/core/runner.pipeline.md +535 -0
  37. package/_conectese/core/skills.engine.md +381 -0
  38. package/agents/data-extractor/AGENT.md +13 -0
  39. package/agents/direito-adaneiro/AGENT.md +18 -0
  40. package/agents/direito-administrativo/AGENT.md +18 -0
  41. package/agents/direito-aeroporta-rio/AGENT.md +18 -0
  42. package/agents/direito-agra-rio/AGENT.md +18 -0
  43. package/agents/direito-ambiental/AGENT.md +18 -0
  44. package/agents/direito-banca-rio/AGENT.md +18 -0
  45. package/agents/direito-civil/AGENT.md +18 -0
  46. package/agents/direito-constitcional/AGENT.md +18 -0
  47. package/agents/direito-da-crianc-a-e-do-adolescente-eca/AGENT.md +18 -0
  48. package/agents/direito-da-propriedade-intelectal/AGENT.md +18 -0
  49. package/agents/direito-de-ami-lia/AGENT.md +18 -0
  50. package/agents/direito-de-tra-nsito/AGENT.md +18 -0
  51. package/agents/direito-desportivo/AGENT.md +18 -0
  52. package/agents/direito-digital/AGENT.md +18 -0
  53. package/agents/direito-do-consmidor/AGENT.md +18 -0
  54. package/agents/direito-do-trabalho/AGENT.md +18 -0
  55. package/agents/direito-econo-mico/AGENT.md +18 -0
  56. package/agents/direito-eleitoral/AGENT.md +18 -0
  57. package/agents/direito-empresarial/AGENT.md +18 -0
  58. package/agents/direito-imobilia-rio/AGENT.md +18 -0
  59. package/agents/direito-inanceiro/AGENT.md +18 -0
  60. package/agents/direito-internacional/AGENT.md +18 -0
  61. package/agents/direito-mari-timo/AGENT.md +18 -0
  62. package/agents/direito-me-dico-e-da-sa-de/AGENT.md +18 -0
  63. package/agents/direito-militar/AGENT.md +18 -0
  64. package/agents/direito-ndia-rio/AGENT.md +18 -0
  65. package/agents/direito-notarial-e-registral/AGENT.md +18 -0
  66. package/agents/direito-penal/AGENT.md +18 -0
  67. package/agents/direito-previdencia-rio/AGENT.md +18 -0
  68. package/agents/direito-processal-civil/AGENT.md +18 -0
  69. package/agents/direito-processal-do-trabalho/AGENT.md +18 -0
  70. package/agents/direito-processal-militar/AGENT.md +18 -0
  71. package/agents/direito-processal-penal/AGENT.md +18 -0
  72. package/agents/direito-rbani-stico/AGENT.md +18 -0
  73. package/agents/direito-secrita-rio/AGENT.md +18 -0
  74. package/agents/direito-sindical/AGENT.md +18 -0
  75. package/agents/direito-societa-rio/AGENT.md +18 -0
  76. package/agents/direito-tribta-rio/AGENT.md +18 -0
  77. package/agents/direitos-hmanos/AGENT.md +18 -0
  78. package/agents/legal-analyst/AGENT.md +16 -0
  79. package/agents/legal-synthesizer/AGENT.md +13 -0
  80. package/agents/lgpd-anonymizer/AGENT.md +14 -0
  81. package/agents/lgpd-restorer/AGENT.md +14 -0
  82. package/agents/task-router/AGENT.md +13 -0
  83. package/bin/conectese.js +73 -0
  84. package/dashboard/index.html +12 -0
  85. package/dashboard/package-lock.json +1971 -0
  86. package/dashboard/package.json +28 -0
  87. package/dashboard/public/assets/avatars/Female1_1wave.png +0 -0
  88. package/dashboard/public/assets/avatars/Female1_2wave.png +0 -0
  89. package/dashboard/public/assets/avatars/Female1_blink.png +0 -0
  90. package/dashboard/public/assets/avatars/Female1_talk.png +0 -0
  91. package/dashboard/public/assets/avatars/Female2_1wave.png +0 -0
  92. package/dashboard/public/assets/avatars/Female2_2wave.png +0 -0
  93. package/dashboard/public/assets/avatars/Female2_blink.png +0 -0
  94. package/dashboard/public/assets/avatars/Female2_talk.png +0 -0
  95. package/dashboard/public/assets/avatars/Female3_blink.png +0 -0
  96. package/dashboard/public/assets/avatars/Female3_talk.png +0 -0
  97. package/dashboard/public/assets/avatars/Female3_wave.png +0 -0
  98. package/dashboard/public/assets/avatars/Female4_blink.png +0 -0
  99. package/dashboard/public/assets/avatars/Female4_talk.png +0 -0
  100. package/dashboard/public/assets/avatars/Female4_wave.png +0 -0
  101. package/dashboard/public/assets/avatars/Female5_blink.png +0 -0
  102. package/dashboard/public/assets/avatars/Female5_talk.png +0 -0
  103. package/dashboard/public/assets/avatars/Female5_wave.png +0 -0
  104. package/dashboard/public/assets/avatars/Female6_blink.png +0 -0
  105. package/dashboard/public/assets/avatars/Female6_talk.png +0 -0
  106. package/dashboard/public/assets/avatars/Female6_wave.png +0 -0
  107. package/dashboard/public/assets/avatars/Male1_1wave.png +0 -0
  108. package/dashboard/public/assets/avatars/Male1_2wave.png +0 -0
  109. package/dashboard/public/assets/avatars/Male1_blink.png +0 -0
  110. package/dashboard/public/assets/avatars/Male1_talk.png +0 -0
  111. package/dashboard/public/assets/avatars/Male2_1wave.png +0 -0
  112. package/dashboard/public/assets/avatars/Male2_2wave.png +0 -0
  113. package/dashboard/public/assets/avatars/Male2_blink.png +0 -0
  114. package/dashboard/public/assets/avatars/Male2_talk.png +0 -0
  115. package/dashboard/public/assets/avatars/Male3_blink.png +0 -0
  116. package/dashboard/public/assets/avatars/Male3_talk.png +0 -0
  117. package/dashboard/public/assets/avatars/Male3_wave.png +0 -0
  118. package/dashboard/public/assets/avatars/Male4_blink.png +0 -0
  119. package/dashboard/public/assets/avatars/Male4_talk.png +0 -0
  120. package/dashboard/public/assets/avatars/Male4_wave.png +0 -0
  121. package/dashboard/public/assets/desks/desktop_set_black_down.png +0 -0
  122. package/dashboard/public/assets/desks/desktop_set_black_down_coding-1.png +0 -0
  123. package/dashboard/public/assets/desks/desktop_set_black_down_coding.png +0 -0
  124. package/dashboard/public/assets/desks/desktop_set_black_up.png +0 -0
  125. package/dashboard/public/assets/desks/desktop_set_white_down.png +0 -0
  126. package/dashboard/public/assets/desks/desktop_set_white_down_coding-1.png +0 -0
  127. package/dashboard/public/assets/desks/desktop_set_white_down_coding.png +0 -0
  128. package/dashboard/public/assets/desks/desktop_set_white_up.png +0 -0
  129. package/dashboard/public/assets/furniture/armchair_tan.png +0 -0
  130. package/dashboard/public/assets/furniture/armchair_tan_down.png +0 -0
  131. package/dashboard/public/assets/furniture/backpack_blue.png +0 -0
  132. package/dashboard/public/assets/furniture/backpack_red.png +0 -0
  133. package/dashboard/public/assets/furniture/blinds.png +0 -0
  134. package/dashboard/public/assets/furniture/blinds_large_closed_white.png +0 -0
  135. package/dashboard/public/assets/furniture/bookshelf.png +0 -0
  136. package/dashboard/public/assets/furniture/bookshelf_purple_tall.png +0 -0
  137. package/dashboard/public/assets/furniture/bulletin_board.png +0 -0
  138. package/dashboard/public/assets/furniture/clock.png +0 -0
  139. package/dashboard/public/assets/furniture/coffee_mug.png +0 -0
  140. package/dashboard/public/assets/furniture/coffee_mug_blue.png +0 -0
  141. package/dashboard/public/assets/furniture/coffee_table.png +0 -0
  142. package/dashboard/public/assets/furniture/coffeepot_right.png +0 -0
  143. package/dashboard/public/assets/furniture/coffeetable_black_horizontal.png +0 -0
  144. package/dashboard/public/assets/furniture/couch.png +0 -0
  145. package/dashboard/public/assets/furniture/couch_tan_down.png +0 -0
  146. package/dashboard/public/assets/furniture/cushion_blue.png +0 -0
  147. package/dashboard/public/assets/furniture/cushion_tan.png +0 -0
  148. package/dashboard/public/assets/furniture/desk_wood.png +0 -0
  149. package/dashboard/public/assets/furniture/fancy_rug.png +0 -0
  150. package/dashboard/public/assets/furniture/fancy_rug_wide.png +0 -0
  151. package/dashboard/public/assets/furniture/flowers1.png +0 -0
  152. package/dashboard/public/assets/furniture/flowers2.png +0 -0
  153. package/dashboard/public/assets/furniture/lamp_tan.png +0 -0
  154. package/dashboard/public/assets/furniture/lantern.png +0 -0
  155. package/dashboard/public/assets/furniture/monstera.png +0 -0
  156. package/dashboard/public/assets/furniture/monstera_small.png +0 -0
  157. package/dashboard/public/assets/furniture/picture_frame.png +0 -0
  158. package/dashboard/public/assets/furniture/plant1.png +0 -0
  159. package/dashboard/public/assets/furniture/plant2.png +0 -0
  160. package/dashboard/public/assets/furniture/plant3.png +0 -0
  161. package/dashboard/public/assets/furniture/plant_poof.png +0 -0
  162. package/dashboard/public/assets/furniture/plant_spindly.png +0 -0
  163. package/dashboard/public/assets/furniture/poster_blue.png +0 -0
  164. package/dashboard/public/assets/furniture/rug.png +0 -0
  165. package/dashboard/public/assets/furniture/succulent_blue.png +0 -0
  166. package/dashboard/public/assets/furniture/succulent_green.png +0 -0
  167. package/dashboard/public/assets/furniture/treasurechest_closed_gold.png +0 -0
  168. package/dashboard/public/assets/furniture/water_cooler_better.png +0 -0
  169. package/dashboard/public/assets/furniture/whiteboard.png +0 -0
  170. package/dashboard/public/assets/furniture/whiteboard_stand_graph.png +0 -0
  171. package/dashboard/public/assets/furniture/window_blinds_open.png +0 -0
  172. package/dashboard/src/App.tsx +46 -0
  173. package/dashboard/src/components/SquadCard.tsx +47 -0
  174. package/dashboard/src/components/SquadSelector.tsx +61 -0
  175. package/dashboard/src/components/StatusBadge.tsx +32 -0
  176. package/dashboard/src/components/StatusBar.tsx +97 -0
  177. package/dashboard/src/hooks/useSquadSocket.ts +135 -0
  178. package/dashboard/src/lib/formatTime.ts +16 -0
  179. package/dashboard/src/lib/normalizeState.ts +25 -0
  180. package/dashboard/src/main.tsx +10 -0
  181. package/dashboard/src/office/AgentSprite.ts +241 -0
  182. package/dashboard/src/office/OfficeScene.ts +153 -0
  183. package/dashboard/src/office/PhaserGame.tsx +80 -0
  184. package/dashboard/src/office/RoomBuilder.ts +190 -0
  185. package/dashboard/src/office/assetKeys.ts +150 -0
  186. package/dashboard/src/office/palette.ts +32 -0
  187. package/dashboard/src/plugin/squadWatcher.ts +233 -0
  188. package/dashboard/src/store/useSquadStore.ts +56 -0
  189. package/dashboard/src/styles/globals.css +36 -0
  190. package/dashboard/src/types/state.ts +63 -0
  191. package/dashboard/src/vite-env.d.ts +1 -0
  192. package/dashboard/test-results/.last-run.json +4 -0
  193. package/dashboard/tsconfig.json +24 -0
  194. package/dashboard/tsconfig.tsbuildinfo +1 -0
  195. package/dashboard/vite.config.ts +13 -0
  196. package/package.json +53 -0
  197. package/skills/README.md +63 -0
  198. package/skills/apify/SKILL.md +55 -0
  199. package/skills/blotato/SKILL.md +63 -0
  200. package/skills/canva/SKILL.md +60 -0
  201. package/skills/conectese-agent-creator/SKILL.md +192 -0
  202. package/skills/conectese-skill-creator/SKILL.md +407 -0
  203. package/skills/conectese-skill-creator/agents/analyzer.md +274 -0
  204. package/skills/conectese-skill-creator/agents/comparator.md +202 -0
  205. package/skills/conectese-skill-creator/agents/grader.md +223 -0
  206. package/skills/conectese-skill-creator/assets/eval_review.html +146 -0
  207. package/skills/conectese-skill-creator/eval-viewer/generate_review.py +471 -0
  208. package/skills/conectese-skill-creator/eval-viewer/viewer.html +1325 -0
  209. package/skills/conectese-skill-creator/references/schemas.md +430 -0
  210. package/skills/conectese-skill-creator/references/skill-format.md +235 -0
  211. package/skills/conectese-skill-creator/scripts/__init__.py +0 -0
  212. package/skills/conectese-skill-creator/scripts/aggregate_benchmark.py +401 -0
  213. package/skills/conectese-skill-creator/scripts/quick_validate.py +103 -0
  214. package/skills/conectese-skill-creator/scripts/run_eval.py +310 -0
  215. package/skills/conectese-skill-creator/scripts/utils.py +47 -0
  216. package/skills/image-ai-generator/SKILL.md +124 -0
  217. package/skills/image-ai-generator/scripts/generate.py +175 -0
  218. package/skills/image-creator/SKILL.md +155 -0
  219. package/skills/image-fetcher/SKILL.md +91 -0
  220. package/skills/instagram-publisher/SKILL.md +119 -0
  221. package/skills/instagram-publisher/scripts/publish.js +165 -0
  222. package/skills/resend/SKILL.md +80 -0
  223. package/skills/template-designer/SKILL.md +201 -0
  224. package/skills/template-designer/base-templates/model-a.html +27 -0
  225. package/skills/template-designer/base-templates/model-b.html +31 -0
  226. package/skills/template-designer/base-templates/model-c.html +42 -0
  227. package/src/agents-cli.js +158 -0
  228. package/src/agents.js +134 -0
  229. package/src/i18n.js +48 -0
  230. package/src/init.js +341 -0
  231. package/src/locales/en.json +73 -0
  232. package/src/locales/es.json +72 -0
  233. package/src/locales/pt-BR.json +72 -0
  234. package/src/logger.js +38 -0
  235. package/src/prompt.js +46 -0
  236. package/src/readme/README.md +119 -0
  237. package/src/runs.js +90 -0
  238. package/src/skills-cli.js +157 -0
  239. package/src/skills.js +146 -0
  240. package/src/update.js +169 -0
  241. package/templates/_conectese/.conectese-version +1 -0
  242. package/templates/_conectese/_investigations/.gitkeep +0 -0
  243. package/templates/ide-templates/antigravity/.agent/rules/conectese.md +55 -0
  244. package/templates/ide-templates/antigravity/.agent/workflows/conectese.md +102 -0
  245. package/templates/ide-templates/claude-code/.claude/skills/conectese/SKILL.md +182 -0
  246. package/templates/ide-templates/claude-code/.mcp.json +8 -0
  247. package/templates/ide-templates/claude-code/CLAUDE.md +43 -0
  248. package/templates/ide-templates/codex/.agents/skills/conectese/SKILL.md +6 -0
  249. package/templates/ide-templates/codex/AGENTS.md +105 -0
  250. package/templates/ide-templates/cursor/.cursor/commands/conectese.md +9 -0
  251. package/templates/ide-templates/cursor/.cursor/mcp.json +8 -0
  252. package/templates/ide-templates/cursor/.cursor/rules/conectese.mdc +48 -0
  253. package/templates/ide-templates/cursor/.cursorignore +3 -0
  254. package/templates/ide-templates/opencode/.opencode/commands/conectese.md +9 -0
  255. package/templates/ide-templates/opencode/AGENTS.md +105 -0
  256. package/templates/ide-templates/vscode-copilot/.github/prompts/conectese.prompt.md +201 -0
  257. package/templates/ide-templates/vscode-copilot/.vscode/mcp.json +8 -0
  258. package/templates/ide-templates/vscode-copilot/.vscode/settings.json +3 -0
  259. package/templates/package.json +8 -0
  260. package/templates/squads/.gitkeep +0 -0
@@ -0,0 +1,348 @@
1
+ ---
2
+ id: image-design
3
+ name: "Visual Design & Image Creation"
4
+ whenToUse: |
5
+ Creating agents that design graphics, carousel slides, social media visuals,
6
+ or HTML/CSS templates for rendering.
7
+ NOT for: copywriting, research, data analysis, publishing.
8
+ version: "1.0.0"
9
+ ---
10
+
11
+ # Visual Design & Image Creation — Best Practices
12
+
13
+ ## Core Principles
14
+
15
+ 1. **Design system before individual pieces.** Before creating any visual, define the design system: primary and secondary colors, font family and scale, spacing unit, border radius, shadow style, and grid structure. Every element in the design draws from this system. No ad-hoc styling decisions.
16
+
17
+ 2. **Platform-aware viewport and typography.** Every design targets a specific platform viewport. Respect the minimum font sizes enforced by the rendering engine:
18
+
19
+ | Platform / Format | Hero | Heading | Body | Caption |
20
+ |--------------------------|--------|---------|-------|---------|
21
+ | Instagram Post/Carousel | 58px | 43px | 34px | 24px |
22
+ | Instagram Story/Reel | 56px | 42px | 32px | 20px |
23
+
24
+ No text element meant to be read may use a font size smaller than 20px on any platform. Never include slide number counters (e.g., "7/8", "1/7") in carousel images. Instagram shows native carousel navigation. Font weight for body text and above must be 500 or higher.
25
+
26
+ 3. **Visual hierarchy through contrast and scale.** Every design must have a clear reading order: hero text first, supporting text second, details third. Achieve hierarchy through font size contrast (minimum 1.5x ratio between levels), weight contrast (bold vs. medium), and spatial separation. Never rely on color alone for hierarchy.
27
+
28
+ 4. **Self-contained HTML is non-negotiable.** Every HTML file must be completely self-contained: inline CSS only, no external stylesheets, no CDN links, no JavaScript, no external font files. Use web-safe fonts or Google Fonts via CSS @import (the only allowed external resource). All images must be referenced as absolute paths or base64 data URIs. Body must set exact pixel dimensions matching the target viewport with margin: 0, padding: 0, overflow: hidden.
29
+
30
+ 5. **Accessibility and contrast.** All text must meet WCAG AA minimum contrast ratio of 4.5:1 against its background. White text (#FFFFFF) on dark backgrounds needs the background to be darker than #767676. Dark text on light backgrounds follows the inverse rule. Never place text directly on complex images without a solid or gradient overlay.
31
+
32
+ 6. **Batch consistency for multi-slide content.** When creating carousels or multi-slide content, generate one HTML file per slide. All slides must share the exact same design system. Slide numbering uses zero-padded format: slide-01.html, slide-02.html. First slide is always the hook/cover. Last slide is always the CTA.
33
+
34
+ 7. **CSS Grid and Flexbox for layout.** Use CSS Grid or Flexbox for all layout composition. Never use absolute positioning for primary content layout (reserved only for decorative overlays). Grid and Flexbox render consistently across Playwright and are the most reliable layout methods.
35
+
36
+ 8. **Brand alignment from company context.** Before designing, read the company context file for brand colors, fonts, visual style guidelines, and tone. If no brand guidelines exist, ask the user for color preferences and visual direction before generating any HTML. Never default to generic blue/white corporate aesthetics without explicit brand input.
37
+
38
+ 9. **Verify before batch.** Always render and visually verify the first slide of any multi-slide content before proceeding with the rest. Catching typography, spacing, or color issues on slide 1 prevents rework across all slides.
39
+
40
+ ## Design Methodology
41
+
42
+ ### 1. Load context and brief
43
+ Read the company context file, any upstream agent output (copywriter text, strategist direction), and the squad configuration. Identify the target platform, content format (single image, carousel, story), and the text content to be visualized.
44
+
45
+ ### 2. Confirm design direction
46
+ Before designing, clarify: target platform and viewport, visual mood (bold/minimal/playful/corporate), color preferences (brand colors or custom), and the number of slides or images needed. If the brief is ambiguous, ask.
47
+
48
+ ### 3. Define the design system
49
+ Based on the brief and brand context, define:
50
+ - **Colors**: Primary, secondary, accent, background, text colors with hex values
51
+ - **Typography**: Font family, size scale (hero/heading/body/caption), weight scale
52
+ - **Spacing**: Base unit (e.g., 24px), multiples for margins and padding
53
+ - **Grid**: Column structure, gutter width, content margins
54
+ - **Visual elements**: Border radius, shadow style, decorative patterns
55
+
56
+ ### 4. Create the HTML/CSS
57
+ Write complete, self-contained HTML files. Each file is one slide or image. Follow the design system strictly. Use semantic class names. Set body dimensions to match the target viewport exactly. Verify all text meets minimum font size requirements for the target platform.
58
+
59
+ ### 5. Render and verify
60
+ Save HTML to the output folder, start the HTTP server, navigate the browser to the file, resize to the target viewport, take the screenshot. Read the rendered image to verify quality. Check: text is readable, colors render correctly, no content is clipped, layout is balanced.
61
+
62
+ ### 6. Iterate if needed
63
+ If the rendered image has issues (text too small, clipped content, color mismatch), adjust the HTML and re-render. Do not proceed to the next slide until the current one passes visual verification.
64
+
65
+ ### 7. Batch render remaining slides
66
+ After the first slide is verified, generate and render all remaining slides using the same design system. Keep the HTTP server running for the entire batch. Stop the server only after all slides are rendered.
67
+
68
+ ### 8. Deliver the output
69
+ Present all rendered images to the user or downstream agent. Include the design system documentation alongside the images so the visual identity can be reused in future content.
70
+
71
+ ## Platform Specifications
72
+
73
+ ### Instagram Post / Carousel
74
+ - **Viewport**: 1080 x 1440 (3:4 portrait)
75
+ - **Min font sizes**: Hero 58px, Heading 43px, Body 34px, Caption 24px
76
+ - **Optimal slide count**: 5-10 slides. Under 5 feels incomplete, over 10 causes drop-off.
77
+ - **Structure**: Hook on slide 1, CTA on last slide, value in between.
78
+ - **No slide counters**: Instagram displays native carousel navigation indicators.
79
+
80
+ ### Instagram Story / Reel
81
+ - **Viewport**: 1080 x 1920 (9:16 portrait)
82
+ - **Min font sizes**: Hero 56px, Heading 42px, Body 32px, Caption 20px
83
+
84
+ ### LinkedIn Post
85
+ - **Viewport**: 1200 x 627 (1.91:1 horizontal)
86
+ - **Min font sizes**: Hero 40px+, Body 24px+, Caption 20px+
87
+
88
+ ### General
89
+ - **Absolute minimum**: 20px for any readable text on any platform.
90
+ - **Font weight floor**: 500 or higher for body text and above.
91
+
92
+ ## Decision Criteria
93
+
94
+ - **Font family selection**: Sans-serif for social media (Inter, Montserrat, Open Sans, Poppins). Serif only for editorial or luxury brands. Monospace only for technical content.
95
+ - **Color palette size**: 3-5 colors maximum per design system. Primary + secondary + accent + background + text. More colors create visual noise.
96
+ - **Slide count for carousels**: Instagram carousels perform best at 5-10 slides. Under 5 feels incomplete, over 10 causes drop-off. Hook on slide 1, CTA on last slide, value in between.
97
+ - **When to use gradients**: For background overlays on images, for hero sections, for CTAs. Never for body text backgrounds. Linear gradients only (radial gradients render inconsistently).
98
+ - **When to use images vs. solid colors**: Solid colors for text-heavy slides (better readability). Images for cover slides, mood-setting slides, and when the visual tells the story better than text.
99
+
100
+ ## Quality Criteria
101
+
102
+ - [ ] Design system is documented before individual slides are created (colors, fonts, spacing, grid)
103
+ - [ ] All HTML files are self-contained: inline CSS, no external dependencies except Google Fonts @import
104
+ - [ ] All text meets minimum font size requirements for the target platform (checked against platform specifications table)
105
+ - [ ] All text meets WCAG AA contrast ratio of 4.5:1 against its background
106
+ - [ ] Body dimensions match target viewport exactly (width and height in px)
107
+ - [ ] CSS uses Grid or Flexbox for layout (no absolute positioning for primary structure)
108
+ - [ ] Multi-slide content uses consistent design system across all slides (same colors, fonts, spacing)
109
+ - [ ] First slide was rendered and visually verified before batch rendering
110
+ - [ ] No placeholder text (Lorem ipsum, "Text here", etc.) in any deliverable
111
+ - [ ] Design rationale is documented alongside the output
112
+
113
+ ## Output Examples
114
+
115
+ ### Example 1: Instagram Carousel Design System + Slide 1
116
+
117
+ ```
118
+ DESIGN SYSTEM
119
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
120
+ Platform: Instagram Carousel
121
+ Viewport: 1080 x 1440
122
+ Slides: 7 (hook + 5 content + CTA)
123
+
124
+ Colors:
125
+ Primary: #1A1A2E (deep navy — background)
126
+ Secondary: #E94560 (coral red — accent, CTAs)
127
+ Text: #FFFFFF (white — all body text)
128
+ Muted: #A0A0B8 (gray-blue — captions, slide numbers)
129
+ Highlight: #FFD93D (gold — emphasis, icons)
130
+
131
+ Typography:
132
+ Family: 'Inter', sans-serif (via Google Fonts @import)
133
+ Hero: 67px / 700 weight (slide 1 hook only)
134
+ Heading: 48px / 700 weight
135
+ Body: 34px / 500 weight
136
+ Caption: 24px / 500 weight
137
+
138
+ Spacing:
139
+ Base unit: 24px
140
+ Content margin: 72px (3x base) from edges
141
+ Section gap: 48px (2x base)
142
+
143
+ Grid:
144
+ Single column, centered content
145
+ Max content width: 936px (1080 - 2*72)
146
+
147
+ Visual elements:
148
+ Border radius: 16px (cards, buttons)
149
+ CTA button: #E94560 background, #FFFFFF text, 16px radius, 20px 40px padding
150
+ Slide number: bottom-right, caption size, muted color
151
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
152
+
153
+ SLIDE 1 (Hook):
154
+
155
+ File: slide-01.html
156
+ ```
157
+
158
+ ```html
159
+ <!DOCTYPE html>
160
+ <html>
161
+ <head>
162
+ <meta charset="UTF-8">
163
+ <style>
164
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@500;700&display=swap');
165
+ * { margin: 0; padding: 0; box-sizing: border-box; }
166
+ body {
167
+ width: 1080px; height: 1440px; overflow: hidden;
168
+ background: #1A1A2E;
169
+ font-family: 'Inter', sans-serif;
170
+ display: flex; flex-direction: column;
171
+ justify-content: center; align-items: center;
172
+ padding: 72px;
173
+ }
174
+ .hook {
175
+ font-size: 67px; font-weight: 700; color: #FFFFFF;
176
+ text-align: center; line-height: 1.25;
177
+ max-width: 936px;
178
+ }
179
+ .hook .accent { color: #E94560; }
180
+ .subtitle {
181
+ font-size: 34px; font-weight: 500; color: #A0A0B8;
182
+ text-align: center; margin-top: 32px;
183
+ max-width: 800px; line-height: 1.5;
184
+ }
185
+ .swipe-cta {
186
+ position: absolute; bottom: 48px; right: 72px;
187
+ font-size: 24px; font-weight: 500; color: #A0A0B8;
188
+ display: flex; align-items: center; gap: 8px;
189
+ }
190
+ </style>
191
+ </head>
192
+ <body>
193
+ <h1 class="hook">
194
+ You are doing <span class="accent">100 things</span> to grow on Instagram.<br>
195
+ And ignoring the <span class="accent">ONE</span> that actually works.
196
+ </h1>
197
+ <p class="subtitle">Swipe to learn the strategy that grew 3 accounts from 0 to 50K in 90 days.</p>
198
+ <span class="swipe-cta">Swipe →</span>
199
+ </body>
200
+ </html>
201
+ ```
202
+
203
+ Design rationale: Deep navy background with white text creates strong contrast (ratio 15.3:1). Coral accent draws attention to key numbers. The hook uses 67px hero weight for maximum impact on mobile. Subtitle at 34px body weight provides context without competing with the hook. Swipe CTA uses muted gray-blue at caption size to stay visible but secondary.
204
+
205
+ ---
206
+
207
+ ### Example 2: LinkedIn Post Single Image
208
+
209
+ ```
210
+ DESIGN SYSTEM
211
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
212
+ Platform: LinkedIn Post
213
+ Viewport: 1200 x 627
214
+
215
+ Colors:
216
+ Primary: #FFFFFF (white — background)
217
+ Secondary: #0A66C2 (LinkedIn blue — accent)
218
+ Text: #191919 (near-black — headings, body)
219
+ Muted: #666666 (gray — captions)
220
+ Card BG: #F3F6F8 (light gray — content cards)
221
+
222
+ Typography:
223
+ Family: 'Inter', sans-serif
224
+ Hero: 44px / 700 weight
225
+ Body: 24px / 500 weight
226
+ Caption: 20px / 500 weight
227
+
228
+ Spacing:
229
+ Base unit: 20px
230
+ Content margin: 60px from edges
231
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
232
+
233
+ File: linkedin-post.html
234
+ ```
235
+
236
+ ```html
237
+ <!DOCTYPE html>
238
+ <html>
239
+ <head>
240
+ <meta charset="UTF-8">
241
+ <style>
242
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@500;700&display=swap');
243
+ * { margin: 0; padding: 0; box-sizing: border-box; }
244
+ body {
245
+ width: 1200px; height: 627px; overflow: hidden;
246
+ background: #FFFFFF;
247
+ font-family: 'Inter', sans-serif;
248
+ display: flex; align-items: center;
249
+ padding: 60px;
250
+ gap: 60px;
251
+ }
252
+ .left {
253
+ flex: 1; display: flex; flex-direction: column; gap: 20px;
254
+ }
255
+ .tag {
256
+ font-size: 20px; font-weight: 700; color: #0A66C2;
257
+ text-transform: uppercase; letter-spacing: 2px;
258
+ }
259
+ h1 {
260
+ font-size: 44px; font-weight: 700; color: #191919;
261
+ line-height: 1.2;
262
+ }
263
+ .body-text {
264
+ font-size: 24px; font-weight: 500; color: #666666;
265
+ line-height: 1.5;
266
+ }
267
+ .right {
268
+ width: 340px; height: 340px;
269
+ background: #F3F6F8;
270
+ border-radius: 20px;
271
+ display: flex; flex-direction: column;
272
+ justify-content: center; align-items: center;
273
+ gap: 12px;
274
+ }
275
+ .metric {
276
+ font-size: 60px; font-weight: 700; color: #0A66C2;
277
+ }
278
+ .metric-label {
279
+ font-size: 20px; font-weight: 500; color: #666666;
280
+ text-align: center;
281
+ }
282
+ </style>
283
+ </head>
284
+ <body>
285
+ <div class="left">
286
+ <span class="tag">Case Study</span>
287
+ <h1>How we reduced churn by 34% without changing the product</h1>
288
+ <p class="body-text">The fix was in the onboarding flow. Three changes, two weeks, measurable results.</p>
289
+ </div>
290
+ <div class="right">
291
+ <span class="metric">-34%</span>
292
+ <span class="metric-label">Customer Churn<br>in 60 days</span>
293
+ </div>
294
+ </body>
295
+ </html>
296
+ ```
297
+
298
+ Design rationale: Clean white background matches LinkedIn's professional aesthetic. Two-column layout with text left and metric card right creates visual balance. LinkedIn blue as accent ties the graphic to the platform. The 44px hero exceeds the LinkedIn minimum of 40px. The metric card uses a large 60px number as a visual anchor that draws the eye immediately.
299
+
300
+ ## Anti-Patterns
301
+
302
+ ### Never Do
303
+
304
+ 1. **Never use external dependencies in HTML.** No CDN links for CSS frameworks (Bootstrap, Tailwind), no external JavaScript, no externally hosted images. The only allowed external resource is Google Fonts via @import. Everything else must be inline. External dependencies break rendering in Playwright.
305
+
306
+ 2. **Never design without defining the design system first.** Jumping straight into individual slide HTML leads to inconsistency across slides. Colors drift, spacing varies, fonts change. Define the system, document it, then apply it uniformly.
307
+
308
+ 3. **Never use font sizes below platform minimums.** The rendering engine enforces hard minimums: 20px is the absolute floor for any readable text. 58px for hero text on Instagram carousels. 40px for hero on LinkedIn. These are not suggestions. Designs with undersized text fail quality review.
309
+
310
+ 4. **Never use absolute positioning for primary layout.** CSS absolute positioning is fragile and breaks when content length varies. Use CSS Grid or Flexbox for all structural layout. Reserve absolute positioning only for decorative overlays (slide numbers, watermarks, swipe indicators).
311
+
312
+ 5. **Never skip rendering verification.** The HTML may look correct in theory, but browser rendering can differ: fonts may fall back, spacing may collapse, colors may shift. Always take the screenshot and visually inspect the result before proceeding to the next slide.
313
+
314
+ 6. **Never place text on images without contrast protection.** Readable text over a photograph or complex image requires either: (a) a solid-color overlay at 60%+ opacity, (b) a gradient overlay from solid to transparent, or (c) a text shadow/backdrop-filter blur. Unprotected text on images fails the 4.5:1 contrast requirement.
315
+
316
+ 7. **Never use more than 5 colors in a design system.** More colors create visual noise and make the design feel uncoordinated. Five is enough: primary, secondary, accent, background, text. Variations (muted, highlight) should be derived from these five.
317
+
318
+ 8. **Never include slide number counters in carousel images.** Text elements like "7/8" or "1/7" must not appear in the rendered HTML for carousels. Instagram displays its own native slide navigation indicators. Adding a counter creates redundant UI noise and clutters the design. If slide order context is needed, communicate it through the design structure (visual hierarchy, headers), not a footer counter.
319
+
320
+ ### Always Do
321
+
322
+ 1. **Start every design with the design system documentation.** Before writing any HTML, document colors, fonts, spacing, grid, and visual elements. This document is both your guide and the deliverable for brand consistency.
323
+
324
+ 2. **Verify the first slide before batch rendering.** Render slide 1, inspect the screenshot, confirm quality. Only then proceed to slides 2 through N. This prevents rework across an entire carousel.
325
+
326
+ 3. **Document design rationale.** After each completed design, briefly explain why you made the key visual choices: color rationale, font selection, layout strategy. This helps the user understand the design thinking and makes iteration faster.
327
+
328
+ 4. **Match viewport exactly.** Body width and height in CSS must match the browser viewport resize dimensions exactly. A 1080x1440 carousel slide means body { width: 1080px; height: 1440px; }.
329
+
330
+ ## Vocabulary Guidance
331
+
332
+ ### Use
333
+
334
+ - **"Design system"**: The foundational term for consistent visual identity across pieces. Always define it before creating individual assets.
335
+ - **"Visual hierarchy"**: How the eye moves through the design. Use this when explaining font size, weight, and positioning choices.
336
+ - **"Viewport: WxH"**: Always state the target dimensions explicitly. "Instagram carousel at 1080x1440" not "standard Instagram size."
337
+ - **"Contrast ratio"**: Reference WCAG contrast standards when justifying color combinations. "4.5:1 minimum for body text."
338
+ - **"Self-contained HTML"**: The non-negotiable constraint. Reinforce that every file must render independently without external dependencies.
339
+ - **"Rendering verification"**: The step where you visually confirm the screenshot matches the intended design before proceeding.
340
+ - **"Brand palette"**: Reference the brand's color system by name when applying colors. "Using the primary brand color (#2D5BFF) for headings."
341
+
342
+ ### Avoid
343
+
344
+ - **"Placeholder"** or **"Lorem ipsum"**: Every text element must contain real content from the brief. No placeholder text in deliverables.
345
+ - **"Approximately"** or **"around"** for sizes: All dimensions, font sizes, and spacing must be exact pixel values. "About 36px" is not a design decision.
346
+ - **"Generic"** or **"standard"** for design choices: Every choice must be justified. "Standard blue" is not a color rationale; "brand primary #2D5BFF for trust and authority" is.
347
+ - **"It should look something like..."**: Deliver finished HTML, not descriptions of what designs should look like.
348
+ - **Em dashes**: Use periods, colons, or line breaks instead. Em dashes slow reading rhythm.
@@ -0,0 +1,235 @@
1
+ ---
2
+ name: "Instagram Feed Post"
3
+ platform: "instagram"
4
+ content_type: "feed"
5
+ description: "Carousel and single image posts optimized for saves, shares, and feed engagement"
6
+ whenToUse: |
7
+ Creating agents that produce Instagram feed posts, carousels, or static image content for Instagram.
8
+ constraints:
9
+ caption_max_chars: 2200
10
+ caption_visible_chars: 125
11
+ max_hashtags: 30
12
+ recommended_hashtags: "5-15"
13
+ carousel_max_slides: 20
14
+ recommended_slides: "8-10"
15
+ min_words_per_slide: 40
16
+ max_words_per_slide: 80
17
+ image_ratio: "3:4 portrait"
18
+ image_resolution: "1080x1440px"
19
+ version: "1.0.0"
20
+ ---
21
+
22
+ ## Platform Rules
23
+
24
+ - Engagement is weighted: Saves > Shares > Comments > Likes. Design content that is worth saving or sending to a friend.
25
+ - Carousels receive approximately 1.4x more reach than single images. The algorithm re-serves carousels to users who did not swipe the first time, giving them a second chance at impressions.
26
+ - Early engagement in the first 30-60 minutes strongly influences total distribution. Time your post for when your audience is most active.
27
+ - Best posting times: 9-11 AM or 7-9 PM in your audience's local time zone. Tuesday, Wednesday, and Thursday tend to perform strongest.
28
+ - Shares to DMs and Stories are the highest-value engagement signals for the algorithm.
29
+ - Consistent posting cadence (4-7x/week) signals an active account and maintains algorithmic favor.
30
+
31
+ ## General Carousel Rules
32
+
33
+ - Each slide uses **40–80 words** (unless the user explicitly requests shorter) with a **two-layer text hierarchy**: a large bold headline (primary claim) and a smaller supporting text (data, context, or elaboration). The minimum of 40 words ensures the slide is informative and not superficial.
34
+ - Alternate background colors across slides (light, dark, accent) to create visual rhythm and prevent fatigue.
35
+ - Highlight **key phrases** in an accent color (e.g., orange or red) within the headline text.
36
+ - Place editorial-quality photos between text blocks — they illustrate the point, not decorate.
37
+ - Maintain a consistent header bar across all slides (branding + handle + date).
38
+ - Use a consistent visual template across slides for brand recognition.
39
+ - The first slide is everything — it must stop the scroll with high contrast, bold type, and a clear promise or curiosity gap.
40
+
41
+ ## Carousel Formats
42
+
43
+ Choose the format that best fits the content goal. Each format has a specific slide structure and narrative arc.
44
+
45
+ ---
46
+
47
+ ### 1. Editorial / Tese (8-10 slides)
48
+
49
+ **Goal:** Argue a thesis with evidence. Builds authority, drives saves and shares.
50
+ **Best for:** Trends, market analysis, contrarian takes, data-backed arguments.
51
+
52
+ **Slide flow:**
53
+ 1. **Cover** — Photo + bold title overlay (provocative question or claim). Magazine-cover style with branding and date.
54
+ 2. **Context** — Headline states the core shift or trend. Photo. Supporting text introduces the tension or anchoring data.
55
+ 3. **Explanation slides (5-7)** — One argument, example, or data point per slide. Headline delivers the insight. Supporting text reinforces with evidence or real-world example.
56
+ 4. **Synthesis** — Headline ties everything into a concluding takeaway. Supporting text delivers the "so what."
57
+ 5. **Credits/CTA** — Photo + source attribution (article, study, or report) + CTA (comment keyword, save, share).
58
+
59
+ ---
60
+
61
+ ### 2. Listicle / Lista (8-10 slides)
62
+
63
+ **Goal:** Deliver scannable, numbered value. Drives saves (reference material).
64
+ **Best for:** Tips, tools, resources, recommendations, checklists.
65
+
66
+ **Slide flow:**
67
+ 1. **Cover** — "X [coisas/dicas/ferramentas] para [resultado]". Bold number + clear promise.
68
+ 2. **Items (6-8 slides)** — One item per slide. Headline is the item name or tip (numbered). Supporting text explains the why or how in 1-2 sentences.
69
+ 3. **Recap/CTA** — Optional summary of all items in a visual checklist. CTA: "Salve para consultar depois" or "Mande para alguém que precisa."
70
+
71
+ ---
72
+
73
+ ### 3. Tutorial / Passo-a-passo (8-12 slides)
74
+
75
+ **Goal:** Teach a process. Drives saves (people bookmark to follow later).
76
+ **Best for:** How-to guides, recipes, setup guides, workflows.
77
+
78
+ **Slide flow:**
79
+ 1. **Cover** — Show the finished result or outcome first. Bold title: "Como [resultado] em X passos."
80
+ 2. **Steps (6-10 slides)** — One step per slide. Headline: "Passo X: [ação]". Supporting text explains the detail. Use screenshots, diagrams, or process photos.
81
+ 3. **Result** — Show the final outcome again with a before/after or summary.
82
+ 4. **CTA** — "Salve esse tutorial" or "Comenta se deu certo."
83
+
84
+ ---
85
+
86
+ ### 4. Mito vs Realidade (6-10 slides)
87
+
88
+ **Goal:** Bust misconceptions. Positions the brand as authority. Drives comments (debate).
89
+ **Best for:** Industry myths, common mistakes, "what people think vs what actually works."
90
+
91
+ **Slide flow:**
92
+ 1. **Cover** — "X mitos sobre [tema] que você ainda acredita." Bold, confrontational.
93
+ 2. **Myth/Reality pairs (4-8 slides)** — Each slide presents one myth (crossed out or in red) and the reality (in green or accent color). Headline is the myth. Supporting text is the correction with evidence.
94
+ 3. **Synthesis** — "O que realmente funciona é..." with a clear takeaway.
95
+ 4. **CTA** — "Qual mito te surpreendeu mais? Comenta abaixo."
96
+
97
+ ---
98
+
99
+ ### 5. Antes e Depois (6-8 slides)
100
+
101
+ **Goal:** Show transformation. Drives engagement through visual proof and emotional impact.
102
+ **Best for:** Results, case studies, redesigns, fitness, branding, portfolio.
103
+
104
+ **Slide flow:**
105
+ 1. **Cover** — Teaser of the transformation. "De [estado ruim] para [estado bom]" or dramatic before/after split.
106
+ 2. **Before (1-2 slides)** — Show the problem state. Headline describes what was wrong. Supporting text gives context.
107
+ 3. **Process (2-3 slides)** — What changed and why. One key decision or action per slide.
108
+ 4. **After (1-2 slides)** — Show the result. Headline highlights the key metric or outcome.
109
+ 5. **CTA** — "Quer esse resultado? Link na bio" or "Salve para referência."
110
+
111
+ ---
112
+
113
+ ### 6. Storytelling / Narrativa (8-10 slides)
114
+
115
+ **Goal:** Build emotional connection. Drives shares and comments through relatability.
116
+ **Best for:** Personal stories, brand origin, customer journeys, lessons learned.
117
+
118
+ **Slide flow:**
119
+ 1. **Cover** — Hook that creates curiosity. "Como eu [resultado surpreendente]" or "A história por trás de [X]."
120
+ 2. **Setup (1-2 slides)** — Set the scene. Who, where, when. Create empathy.
121
+ 3. **Conflict (2-3 slides)** — The challenge, mistake, or turning point. Build tension.
122
+ 4. **Resolution (2-3 slides)** — What happened, what was learned, how it changed everything.
123
+ 5. **Takeaway** — Universal lesson the audience can apply.
124
+ 6. **CTA** — "Você já passou por algo parecido?" or "Manda pra quem precisa ouvir isso."
125
+
126
+ ---
127
+
128
+ ### 7. Problema → Solução (6-10 slides)
129
+
130
+ **Goal:** Directly address a pain point and present the solution. Drives saves and DM shares.
131
+ **Best for:** Product positioning, service offers, common frustrations, "stop doing X, do Y instead."
132
+
133
+ **Slide flow:**
134
+ 1. **Cover** — State the problem boldly. "Você ainda faz [erro comum]?" or "O problema que ninguém fala sobre [tema]."
135
+ 2. **Problem (2-3 slides)** — Describe the pain. One symptom or consequence per slide. Make the reader feel seen.
136
+ 3. **Bridge (1 slide)** — "Mas existe um jeito melhor" or "A solução é mais simples do que parece."
137
+ 4. **Solution (2-4 slides)** — Present the answer. One actionable point per slide.
138
+ 5. **Proof (optional)** — Data, testimonial, or result that validates the solution.
139
+ 6. **CTA** — "Salve e aplica hoje" or "Comenta [keyword] que eu te mando o guia."
140
+
141
+ ---
142
+
143
+ ### Single Image Post
144
+
145
+ - Strong visual that communicates a single idea at a glance.
146
+ - Works best for quotes, announcements, bold statements, and high-quality photography.
147
+ - The caption carries the weight of the value delivery.
148
+
149
+ ## Writing Guidelines
150
+
151
+ - **First 125 characters are critical.** They must compel the reader to tap "more." Front-load the value or curiosity gap.
152
+ - Use line breaks aggressively for readability. Add periods or dashes as spacing characters between paragraphs.
153
+ - Write the hook as a standalone statement that creates urgency, curiosity, or personal relevance.
154
+ - End every caption with a question or clear CTA to drive comments.
155
+ - Use 5-15 hashtags per post. Mix: 3-5 niche/specific + 3-5 mid-range (10K-500K posts) + 2-3 broad/popular.
156
+ - Place hashtags at the end of the caption or in the first comment.
157
+ - Rotate hashtag sets between posts. Never copy-paste the same block repeatedly.
158
+ - Avoid banned or flagged hashtags — Instagram silently suppresses posts using them.
159
+
160
+ ## Output Format
161
+
162
+ ```
163
+ === FORMAT ===
164
+ [Name of the chosen carousel format: Editorial, Listicle, Tutorial, Mito vs Realidade, Antes e Depois, Storytelling, or Problema → Solução]
165
+
166
+ === SLIDES ===
167
+ Slide 1 (Cover):
168
+ Title: [Bold title overlay — max 20 words]
169
+ Photo: [Photo description/direction]
170
+ Background: [cover photo / solid color]
171
+
172
+ Slide 2 ([Role]):
173
+ Headline: [Bold, large text — primary claim or point]
174
+ Photo: [Photo description, if applicable]
175
+ Supporting text: [Smaller text — data, context, or elaboration]
176
+ Accent keywords: [Words to highlight in accent color]
177
+ Background: [light/dark/accent]
178
+
179
+ Slide 3 ([Role]):
180
+ Headline: [...]
181
+ Photo: [...]
182
+ Supporting text: [...]
183
+ Accent keywords: [...]
184
+ Background: [light/dark/accent]
185
+
186
+ ...continue until all slides are complete (min 40 words / max 80 words per slide, unless user requests shorter)...
187
+
188
+ Slide N (CTA):
189
+ Photo: [Closing image]
190
+ Source: [Article, study, or report that inspired the content — if applicable]
191
+ CTA: [Specific action — comment keyword, save, share]
192
+
193
+ === CAPTION ===
194
+ [Hook paragraph — must open with first 125 characters that compel "more" tap. Set the tension.]
195
+
196
+ [Body paragraph — expanded argument with key points. Use line breaks for readability.]
197
+
198
+ [Closing question — provocative, open-ended question that drives comments and reflection.]
199
+
200
+ [AI disclosure if applicable.]
201
+
202
+ === HASHTAGS ===
203
+ #hashtag1 #hashtag2 #hashtag3 #hashtag4 #hashtag5
204
+ [5-15 hashtags, mix of niche, mid-range, and broad]
205
+ ```
206
+
207
+ ## Quality Criteria
208
+
209
+ - [ ] Carousel format is explicitly chosen and follows the corresponding slide flow
210
+ - [ ] Cover slide has a bold, provocative title (max 20 words) that stops the scroll
211
+ - [ ] Each slide uses two-layer hierarchy: bold headline + smaller supporting text
212
+ - [ ] Each slide has **at least 40 words** total (headline + supporting text combined) — unless the user explicitly requested shorter slides
213
+ - [ ] Each slide stays within 80 words total (headline + supporting text combined)
214
+ - [ ] Background colors alternate across slides (light, dark, accent) for visual rhythm
215
+ - [ ] Key phrases are highlighted in accent color within headlines
216
+ - [ ] Each slide advances the narrative — no filler or repetition between slides
217
+ - [ ] Swipe-through rate is optimized: every slide ends with implicit or explicit reason to swipe
218
+ - [ ] Caption first 125 characters work as a standalone hook
219
+ - [ ] Caption ends with a provocative open-ended question or clear CTA
220
+ - [ ] Hashtags are between 5-15, with a mix of niche and broad tags
221
+ - [ ] No hashtag is banned or flagged by Instagram
222
+ - [ ] Final slide includes a specific, actionable CTA (not generic "follow me")
223
+ - [ ] Content is designed to be save-worthy or share-worthy, not just likeable
224
+
225
+ ## Anti-Patterns
226
+
227
+ - **Links in captions** — Instagram captions do not support clickable links. Including URLs wastes characters and looks amateurish. Use bio link or Stories link sticker instead.
228
+ - **Too little text per carousel slide** — Slides with fewer than 40 words are superficial and fail to deliver value. The supporting text layer must add real context, data, or explanation — not just restate the headline. Exception: user explicitly requests short/punchy slides.
229
+ - **Too much text per carousel slide** — Exceeding 80 words per slide destroys readability. Use the two-layer hierarchy (headline + supporting text) to keep density manageable. Never put all text at the same size.
230
+ - **No CTA** — Posts without a clear ask get saved and shared significantly less. Always tell the audience what to do next.
231
+ - **Generic stock aesthetics** — Overly polished stock photos signal "advertisement" to users and reduce organic engagement.
232
+ - **Hashtag spam** — Using all 30 hashtags or including irrelevant trending tags triggers algorithmic suppression.
233
+ - **Editing captions after posting** — May reset the algorithmic distribution cycle, killing early momentum.
234
+ - **Posting and ghosting** — Not responding to comments in the first hour signals low engagement to the algorithm and reduces reach.
235
+ - **Inconsistent posting** — Gaps of 7+ days signal an inactive account to the algorithm, reducing baseline reach.