# Content Campaign

> Generate and audit LinkedIn/Twitter posts for the FinVerge 3.0 content-led revenue campaign (April 20 – June 30, 2026). Use whenever Himani or any content team member wants to draft a post, audit a draft, or prepare a week's content batch. Triggers on phrases like "draft this week's posts", "audit this post", "generate a LinkedIn post for the NACH owner on Onboarding", "prep the Friday batch", "score this draft against the filter", "the sales head needs a deal story", "give me the brief for W3 Monday", "write the CEO vision post for launch week", and similar. Works with the Master Calendar XLSX (52 posts across 10 weeks), the 4-criteria content filter, and the plugin-wide product KBs (PG/NACH/Collect/Orchestrate). Outputs post drafts (Markdown / plain text) + audit reports (JSON + human-readable summary).

- Skill: `himanisharrma/content-campaign` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add himanisharrma/content-campaign`
- Raw SKILL.md: https://api.skillmd.com/api/skills/himanisharrma/content-campaign/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- Author: himanisharrma (https://skillmd.com/u/himanisharrma)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/himanisharrma/content-campaign

---


# Content Campaign Skill — FinVerge 3.0

Two workflows in one skill:
1. **Post generator** — assembles the context brief for a scheduled post so Claude can write it in FinVerge brand voice.
2. **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.

1. **Creates Curiosity** — Does the first line make someone stop scrolling?
2. **Shows Real Problem** — Is there a genuine pain point a merchant/enterprise faces?
3. **Simplifies Product** — Does it make 3.0 easier to understand, not harder?
4. **Drives Action** — Is there a clear next step — DM, comment, or question?

## Workflow — Post generator

### Step 1: Assemble the brief

```bash
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

```bash
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?":

```bash
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)

```bash
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.py` would 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:

```bash
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.docx` with 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 access
- `shared/brand.py` — design tokens (currently unused in text-only outputs, but available)
- `shared/version_check.py` — stale-version auto-notify

