<!--
ROBOTS ON PAYROLL / THE VAULT
What this is: a monthly paste-in prompt that turns your real past captions and tone doc into 30 on-brand Instagram captions as queue-ready JSON.
How to use it: download this file and give it to your AI (Claude, ChatGPT,
Cursor, Lovable chat) as a reference. Say: "Use this as my playbook for
writing my caption queue."
Latest version + full guide: https://robotsonpayroll.com/resources/instagram-autoposter
-->

# The Brand Voice Caption Prompt

Paste this into Claude (or any strong model) once a month. Fill the [SLOTS], get 30 on-brand captions back as JSON you can drop straight into queue.json.

Two inputs make or break it: 10+ real past captions (the model learns voice from examples, not adjectives) and an honest tone doc. If you don't have a tone doc yet, write 5 bullets: who you are, who you talk to, 3 words you overuse, 3 things you'd never say, what you're selling.

---

```
You are writing a month of Instagram captions for my account. You will match MY voice, not a generic social media voice. My voice is defined by the examples below; the tone doc is a tiebreaker, the examples win any conflict.

## MY ACCOUNT
- Handle and niche: [HANDLE + ONE-LINE NICHE, e.g. "@buildlog, I document building SaaS products with AI coding agents"]
- Audience: [WHO FOLLOWS YOU AND WHY, e.g. "solo devs and indie hackers, 25-40, want to ship faster"]
- What I'm promoting this month: [PRODUCT/OFFER/NEWSLETTER + LINK LOCATION, e.g. "my newsletter, link in bio"]
- Posting cadence: [N] posts over [N] days

## MY PAST CAPTIONS (the voice source, verbatim, do not clean these up)
[PASTE 10-20 REAL CAPTIONS, EACH SEPARATED BY "---". Include your best performers AND typical ones. More is better.]

## MY TONE DOC
[PASTE YOUR TONE/STYLE DOC, OR 5 BULLETS: identity, audience, words you use, words you ban, the one feeling every post should leave]

## THIS MONTH'S CONTENT PILLARS
[LIST 3-5 PILLARS WITH ROUGH WEIGHTS, e.g.:
- 40% build-in-public updates (what I shipped, what broke, what it cost)
- 25% tactical how-tos my audience can use today
- 20% opinions/hot takes on my niche
- 15% personal/behind-the-scenes]

## RAW MATERIAL (turn these into posts)
[PASTE YOUR NOTES: wins, numbers, screenshots you plan to post, lessons, launches, anything. Bullet points are fine. The model must NOT invent facts, numbers, or events not listed here.]

## HARD RULES
1. Every caption starts with a HOOK as line 1: a claim, a number, a tension, or a question. Never a soft warm-up like "So excited to share". Line 1 must survive being the only line anyone reads (Instagram truncates after ~125 characters).
2. Rotate hook types across the month, no two consecutive posts with the same type: [NUMBER hook / CONTRARIAN hook / STORY-OPENER hook / QUESTION hook / MISTAKE-CONFESSION hook].
3. Rotate CTAs on a 4-post cycle and label each: (a) comment prompt with a specific question, (b) save/share prompt tied to the post's utility, (c) link-in-bio push for [OFFER], (d) no CTA at all, just end strong. Never two link pushes in a row.
4. Caption length: vary between 300 and 1,500 characters. Hard cap 2,200 characters including hashtags (Instagram's limit).
5. Hashtags: exactly [N, suggest 3-8] per post, niche-specific, on the last line. Never more than 30 (API rejects it). No banned or spammy tags.
6. Every fact, number, and event must come from RAW MATERIAL above. If a pillar has no raw material left, write an evergreen post for that pillar and flag it "EVERGREEN" so I can fact-check it.
7. Match my sentence length, punctuation habits, emoji usage (or absence), and line-break style from the past captions. If my captions never use emojis, use zero.
8. No engagement-bait cliches: no "double tap if", no "tag someone who", no "you won't believe".

## OUTPUT FORMAT
Return ONLY a JSON array, no prose before or after. One object per post:

[
  {
    "day": 1,
    "pillar": "build-in-public",
    "hook_type": "NUMBER",
    "cta_type": "comment",
    "caption": "full caption text with line breaks as \n, hashtags on last line",
    "image_direction": "one sentence describing the JPEG to pair with this (I shoot/design these separately)",
    "alt_text": "one-sentence accessibility description of the intended image",
    "flag": null
  }
]

"flag" is null, or "EVERGREEN" (rule 6), or "NEEDS_FACT_CHECK" if you had to interpret ambiguous raw material.

Before the JSON is generated, silently verify: hook rotation valid, CTA cycle valid, all facts traceable to raw material, zero captions over 2,200 chars. Fix violations, then output.
```

---

## How I use the output

1. Skim all 30 in one pass. Kill the bottom 5, they're always there. Ask for 5 replacements in the same chat ("posts 7, 12, 18, 24, 29 are flat, replace them, same rules").
2. Fact-check anything flagged EVERGREEN or NEEDS_FACT_CHECK.
3. Map each caption to an image, upload the JPEGs to your public host, and paste the lot into queue.json (the "caption" and "alt_text" fields carry over 1:1).
4. Rerun monthly. Add your best-performing captions from this month to the PAST CAPTIONS block next month. The prompt gets better every cycle because the voice source gets better.
