Nisarg GurjarEmail me
LIVE · SLACK BOT

Caption Studio. Two scroll-stopping captions, zero invented facts.

Status
Live in the company Slack
Client
M4U Events marketing team
Stack
Next.js · Vercel · Claude (multimodal) · Slack API
Scale
36 tests · 15 eval fixtures · 2 must-pass gates
Year
2026
0 invented facts allowedthe eval gate that ships every change
The problem

The marketing team writes captions the way most people do: a rough draft, then twenty minutes second-guessing the hook. And AI “help” usually makes it worse — models happily invent venue names, dates, and details. A wrong fact in a client’s wedding post is not a typo, it’s an incident.

What I shipped
  • Drop a draft in Slack (photo optional — the model reads the image too), get two complete variants back, each built on a different scroll-stopping hook.
  • One-tap refinement — Shorter · For TikTok · More emotional · Bolder hook — or just reply in the thread in plain words.
  • The factual firewall — the model must list which facts from the draft it used; using a fact that wasn’t there fails the gate. Free to reinvent wording, never reality.
  • Cultural-term preservation — baraat, sangeet, haldi and the rest are never “translated away.” A second must-pass gate enforces it.
  • Stateless by design — conversation state is reconstructed from the Slack thread itself; no database to drift.
How it works
Draft → variants → refine, all in the thread
  1. 1@mention the bot with a rough caption (and the photo, if you like)
  2. 2Claude reads both and writes two hook-first variants
  3. 3Every variant passes the factual firewall before posting
  4. 4Tap a refine button or reply in words — the thread is the memory
The hard part
The eval fixtures are the product. Fifteen scenarios — Hinglish drafts, romanized Punjabi, fact-heavy posts, clickbait traps, sparse one-liners — and two gates that must pass 100% before any prompt change ships. The firewall works because it’s structural: the model has to show its receipts (a factsUsed list), and the gate checks them against the source.
Proof
  • 36 unit tests, no network required.
  • Both eval gates held on the live launch post.
  • Runs @mention-only, with a kill switch — boring, safe operations.
rough draft + venue photo
Variant A — hook-first · Variant B — story-first
✓ factual firewall passed · refine buttons below
Where it stands

Live in the company workspace. The team keeps the voice; the bot supplies the hook — and it never posts anywhere itself. Humans copy what they like.

I set the gates a caption must pass before it can reach a feed. Claude Code built the bot, and Claude writes the captions. How I work →

Run an events business? I built Ajna for you.

AI automation for wedding & event vendors — quotes in minutes instead of days, a human always in the loop.

Visit ajnadesk.com