Setting Claude up from scratch for every carousel is a waste of time: the same questions about style, text length, tone of voice. A Project in Claude solves this once — you put the rules and the template into the project's knowledge base, then you just drop in a topic and get a finished structure. Below is the full setup, including a working system prompt for the JSON format.
The setup: a Project with rules plus a strict output format
The approach rests on two things. First, Project Knowledge, where you put a description of the style and constraints once. Second, a system prompt that tightly constrains the response format so the output is immediately usable for rendering, with no manual cleanup of stray commentary.
Step 1 — create the Project and add the rules
In the Project settings there is a Project Knowledge section; add a text file there describing: tone of voice (expert, no fluff), title and body length per slide, and a list of words and tricks that are banned (clickbait with no substance, made-up numbers, "this will blow up", "grab it now"). Claude applies these rules in every new chat inside the project, with no need to explain them again.
Step 2 — a system prompt that forces strict JSON
The key part is forbidding the model to output anything but valid JSON. Any commentary before or after breaks automated processing of the output.
You generate a social media carousel as JSON.
Respond with VALID JSON ONLY, no markdown
and no commentary before or after:
{
"slug": "kebab-case-topic-slug",
"slides": [
{"role": "hook", "title": "...", "sub": "..."},
{"role": "content", "title": "...",
"body": ["...", "..."], "code": "optional"},
{"role": "cta", "title": "...", "sub": "...",
"url": "..."}
]
}
Rules: 1 hook, 4-6 content, 1 cta. Title —
up to 3 short lines separated by \n. body items —
up to 90 characters. No invented numbers or cases.
What to swap in: the length and tone rules should match your own carousel format — if your renderer
expects different fields (say, a separate kicker for the slide's category), add them to the schema
explicitly, otherwise the model will simply skip them.
Step 3 — give it a topic, get a draft
From there, a single line in a chat inside the project is enough: topic plus audience, for example "topic: how to set up database backups, audience — developers with no DevOps experience". Claude lays it out into a hook, a series of content slides and a cta, following the schema from the system prompt. The draft is nearly ready, but it needs a fact check and a pass to bring the wording into your own voice — do not publish the model's output as is.
Step 4 — fine-tuning without rebuilding from scratch
The main advantage of working inside a Project is that edits take one line, with no need to restate the whole task:
Cut the text on content slide 3 down to two bullets.
Make the hook title punchier without losing honesty.
Drop the slide about [topic] — it duplicates slide 4.
The model changes that specific part of the JSON without rewriting the other slides — which saves time compared with regenerating the whole carousel from scratch every time.
Common setup mistakes
- No length limit on body — the model writes paragraphs instead of short bullets and the text does not fit the slide.
- Project Knowledge holds only a sample carousel with no explicit rules — the model copies the sample's style word for word, including incidental details.
- Forgetting to ban commentary in the system prompt — you end up manually stripping lines like "Here is your JSON:" before every slide.
How we do it
Exactly this setup — a Project with rules plus a strict JSON format — is the basis of our own pipeline for generating carousel content for qvib.pro. The difference from a one-off setup is that for us it is a repeatable process: the same schema is applied to every new carousel, and a render script turns the JSON into finished PNG slides with no manual layout work.
Related links
- Claude Projects — setup and practices: qvib.pro/arsenal/skills/claude-projects/
- Prompt template for Instagram carousels: qvib.pro/arsenal/prompts/instagram-karuseli/
- How the qvib engine works: qvib.pro/