Content Campaign Skill — FinVerge 3.0
Two workflows in one skill:
- Post generator — assembles the context brief for a scheduled post so Claude can write it in FinVerge brand voice.
- Filter audit — scores a draft against the 4-criteria gate before it's approved for posting.
Both read from the Master Calendar XLSX at assets/campaign_ops.xlsx and the plugin-wide product KBs via kb_loader.load_public().
When to use
Triggering phrases (non-exhaustive):
- "Draft next week's posts" / "Prep Week 3 batch"
- "Audit this post" / "Score this draft"
- "Give me the brief for W3 Monday" / "Prep the NACH owner's NACH post"
- "Write the CEO vision post for the launch"
- "the sales head needs a deal story"
- "Is this post ready to publish?"
Do NOT use this skill for:
- Bank or enterprise proposal decks (use
bank-proposal-generator/enterprise-proposal-generator) - Product demo collateral (use the per-product skills —
pg-product,nach-product, etc.)
Inputs
For post-generator, one of:
- Week + day — e.g.,
--week 3 --day "Mon May 4"→ picks the calendar row - Week + owner — e.g.,
--week 3 --owner the NACH owner - Row index — direct row from Master Calendar
For filter-audit:
- A draft post text file (Markdown or plain text)
- Or piped stdin
The 4-criteria filter (from the Locked Strategy)
Every post must pass all 4. If it fails any, it's rejected and rewritten.
- Creates Curiosity — Does the first line make someone stop scrolling?
- Shows Real Problem — Is there a genuine pain point a merchant/enterprise faces?
- Simplifies Product — Does it make 3.0 easier to understand, not harder?
- Drives Action — Is there a clear next step — DM, comment, or question?
Workflow — Post generator
Step 1: Assemble the brief
cd skills/content-campaign/scripts
python3 prep_post.py --week 3 --owner the NACH owner
This writes a Markdown brief to assets/briefs/W3_anupam_<day>.md containing:
- The calendar row (week, day, owner, platform, content focus, theme)
- The owner's voice tag and natural topic areas
- Platform guide (word count, hashtags, tone)
- FinVerge brand voice guide
- The product KB excerpt (for owners who map to PG / NACH / Collect / Orchestrate)
- The 4 filter criteria
Step 2: Read the brief + write the post
Claude opens the brief (via the Read tool), writes a LinkedIn-ready draft following it, and saves to ~/Downloads/content-drafts/<week>/<owner>-<date>.md (or anywhere the user prefers).
The post should be plain LinkedIn-ready text (no markdown headings in the body), 150-300 words for LinkedIn, 2-3 hashtags at the end.
Step 3: Run the audit
python3 audit_post.py --post <path-to-draft.md> --platform LinkedIn
Gets a per-criterion pass/fail with confidence + rewrite suggestions. If the audit returns soft-fail or hard-fail, rewrite and re-audit.
Step 4: Present to Himani
Show the user:
- The draft
- The audit verdict (pass / soft-fail / hard-fail) with per-criterion feedback
- If fails: rewrite suggestions
Himani decides whether to approve or request another rewrite.
Workflow — Filter audit (standalone)
If Himani pastes a draft she wrote herself (or received from a teammate) and asks "is this good enough?":
python3 audit_post.py --post <path> --platform LinkedIn
# or pipe it:
cat draft.md | python3 audit_post.py --stdin --platform LinkedIn
Output: pass/fail summary + rewrite suggestions.
Audit scoring — what it catches
Deterministic structural checks (fast, no LLM needed):
- Weak openers — flags "In today's world...", "We're excited to share...", "I'm proud to announce..."
- Jargon density — flags "leverage", "synergy", "seamless", "cutting-edge", "best-in-class", "revolutionise"
- Internal jargon — flags "Pod 0", "Pod 1", "AOP", "GTM", "DELTA4" appearing in customer content (dead giveaway)
- Acronym soup — flags >3 uncommon acronyms without expansion
- CTA presence — flags missing or vague CTAs ("The future of payments is here" → fail)
- Problem framing — checks for tokens indicating a real pain is surfaced
- Word count — checks against platform targets (LinkedIn 150-300, Twitter 20-50)
The audit returns pass / soft-fail (3/4 criteria) / hard-fail (<3 criteria) + specific per-criterion feedback.
Owner → product KB mapping (config in campaign_meta.py)
| Owner | Product KB | Voice tag |
|---|---|---|
| the founder (CEO), the CBO (CBO), a product owner (CGO) | — | leadership vision/business/growth |
| PruthviRaj | — (product philosophy — all products) | product_builder |
| the NACH owner | nach |
product_builder |
| the PG owner | pg |
product_builder |
| the Collect owner | collect |
product_builder |
| Chaitanya | — (FRM — no KB yet) | product_builder |
| the sales head | — (sales — pulls from all) | sales_convert |
| an owner / a team member / a team member | — | bts_execution / journey_growth / culture_pride |
| Chandrasekhar Sir / Swapnesh | — | alliance_credibility |
| Santanu / Tarun / ZMs / Siddharth (BD) | — | bd_market_signal |
Bold rows = owners whose posts automatically get real product content pulled from shared-kb/.
Output locations
| Output | Path |
|---|---|
| Post brief | skills/content-campaign/assets/briefs/<week>_<owner>_<day>.md |
| Post draft | ~/Downloads/content-drafts/ (Claude decides final filename) |
| Audit report | stdout, or --out path/to/audit.json |
Updating content
- Master Calendar (who posts what, when):
skills/content-campaign/assets/campaign_ops.xlsx- Updating this XLSX automatically flows through — prep_post.py re-reads every time.
- Voice guide / owner map:
skills/content-campaign/campaign_meta.py - Filter criteria:
skills/content-campaign/campaign_meta.py(keep in sync with the strategy doc)
Workflow — Friday batch (end-to-end week orchestrator)
This is Himani's weekly Friday loop. Two phases, one command each.
Phase 1 — Prep (Friday morning)
python3 scripts/friday_batch.py --week 3 prep
What it does:
- Reads every row for Week 3 from the Master Calendar
- Assembles a brief for each post (same content
prep_post.pywould produce) - Writes ONE consolidated file:
~/Downloads/content-drafts/W3/W3_briefs.md - Creates an empty
~/Downloads/content-drafts/W3/drafts/folder with an expected filename for each post
Himani (or Claude on her behalf) then writes a draft for each file in drafts/, following the matching brief. One file per post, plain LinkedIn-ready text.
Phase 2 — Review (Friday afternoon)
Once all drafts are written:
python3 scripts/friday_batch.py --week 3 review
What it does:
- Loads every draft in
drafts/ - Runs the 4-criteria auditor on each one
- Compiles
~/Downloads/content-drafts/W3/W3_Review.docxwith one section per post:- Metadata (day, owner, platform, content focus)
- Draft body
- Twitter variant if present
- 4-criteria audit table (pass / soft-fail / hard-fail + feedback)
- Rewrite suggestions if any criterion fails
- Action recommendation (approve / light-edit / rewrite)
- Prints a summary line:
"✓ Review compiled for W3: 6 posts (4 pass, 1 soft-fail, 1 hard-fail)"
Himani opens the DOCX, approves/edits, then schedules.
Validated on W1
The W1 run produced 6 drafts (the founder, the CBO, a product owner, the sales head, an owner, a team member); auditor correctly caught the weak an owner draft ("excited to share… incredible journey… cutting-edge… transformative… game-changing") as hard-fail and passed the others.
Coming in later iterations (not yet built)
anmol-deal-story— specialised generator for the sales head's deal-story format (he's the revenue engine)tracking-dashboard— monthly KPI rollup from Master Calendar Status column + metrics CSV- Per-owner voice refinement (v2) — when each owner provides 5-10 past posts, we can match their personal style more precisely
Shared code reused
shared/kb_loader.py— product KB accessshared/brand.py— design tokens (currently unused in text-only outputs, but available)shared/version_check.py— stale-version auto-notify