snapgen-marketing-tracker

Build a 90-day marketing + content tracker Excel file for a SaaS product or indie app, pre-filled with 180 main weekday tweets + 50 weekend bonus tweets across 9 content pillars, a Media Production Queue, Content Mix Rules, and an automated QA Check sheet. Use this whenever the user asks to create a marketing plan, launch plan, content calendar, Twitter/X plan, build-in-public plan, 90-day tracker, or similar multi-week content strategy for a product. Also use when a user says "apply the Screenify marketing template to [my product]", "generate tweets for my launch", or "build me a content tracker like the one you made before". The output is a single .xlsx file with 12 sheets, ~211 formulas, data validation dropdowns, conditional formatting, and embedded usage instructions. Produces concrete, publishable tweet text (not placeholders) customized to the user's product, with every day of the 13-week timeline filled (weekdays 3 slots, weekends 2 slots).

Marketing Tracker Builder

What this skill does

Builds a complete 90-day marketing tracker as an Excel file (.xlsx) with:

  • 180 main weekday tweets — 12 weeks × 5 days (Mon-Fri) × 3 tweets/day, distributed across 9 content pillars
  • 50 weekend tweets — 25 weekend days × 2 slots/day, auto-filled from 45 evergreen bonus pool (Community Question / Tips & Craft / Indirect Insight)
  • 12 sheets — README, QA Check, Daily Tracker, Metrics Dashboard, Tweet Templates, Outreach CRM, Asset Library, Weekly Review, Content Mix Rules, Media Queue, Bonus Content Pool, Weekly Calendar
  • Automated QA Check — 42 live formulas validating consistency (e.g., Feature Showcase tweets must have Video/GIF, Competitor tweets must never post from brand account, etc.)
  • Media Production Queue — 30 P0/P1 media assets cross-referenced with the Daily Tracker
  • Embedded README — usage instructions inside the workbook

The tweets are fully written, ready-to-publish text customized to the user's product — not placeholders. This is the key value: the skill pre-generates content so the user only has to review, edit, and post.

When to use

Trigger this skill when the user asks any of:

  • "Tạo kế hoạch marketing 90 ngày cho [product]"
  • "Build me a content calendar for my SaaS launch"
  • "Generate 90 days of tweets for build-in-public"
  • "Apply the Screenify template to my product"
  • "Create a launch tracker like before"
  • Any request mentioning "90-day plan", "content tracker", "Twitter plan", "marketing calendar" for a specific product

How to use this skill — workflow

This is a multi-step process. Do NOT skip straight to running scripts. Quality of output depends entirely on how well you understand the user's product first.

Step 1: Interview the user

Read references/interview_questions.md and ask the user the essential questions (marked REQUIRED). For optional ones, use judgment — ask if the answer isn't obvious from context. Use the AskUserQuestion tool in batches (group related questions into one tool call with multiple questions).

Collect at minimum:

  • Product name + one-line description
  • How long they've been building (months/years — this anchors the "build-in-public" narrative authentically)
  • Target audience (creators? developers? marketers? SMB owners?)
  • Top 3-5 differentiating features (ones competitors don't have)
  • 2-4 direct competitors + how the product is positioned against them
  • Pricing model
  • Launch channels (Product Hunt? Twitter? LinkedIn? Reddit?)
  • Founder's public identity (personal Twitter handle + brand account handle if exists)
  • Primary language for tweets (English default, but can be Vietnamese or other)

Step 2: Read the reference docs

Before writing any content, read all four reference files:

  • references/pillars.md — 9 content pillars, voice rules, and sample tweets per pillar
  • references/writing_guide.md — how to write good tweets for each pillar, length rules, hooks, what to avoid
  • references/structure.md — Excel structure, sheet-by-sheet layout, formula architecture
  • references/interview_questions.md — the full question list

These encode hard-won patterns. Don't skim — read them fully.

Step 3: Examine the example output

Open assets/example-screenify-tracker.xlsx (use the Read tool with openpyxl via a short Python snippet, or describe its structure from references/structure.md). This is the working output for Screenify Studio. Study the tone, length, and specificity of tweets there — your output should match that quality bar, but customized to the user's product.

Step 4: Adapt the 6 build scripts

The scripts/ folder contains 6 Python scripts (01_scaffold.py through 06_bonus_pool.py) that were originally written for Screenify Studio. They produce the example file in assets/.

Your job: copy each script to a working directory, then rewrite the content inside each script to reflect the user's product. The scaffolding code (workbook creation, formatting, formulas, validations) should stay untouched. Only change the string content.

Specifically, you need to rewrite these content sections:

ScriptContent to rewrite
01_scaffold.pyWeek 1 tweets (TWEETS dict), founder bio placeholders, pricing references, headers, example rows in Tweet Templates / Asset Library / Outreach CRM
02_fill_weeks.pyWeeks 2-12 tweets (WEEK_TWEETS dict — 165 tweets total)
03_accounts_narrative.pyOpening narrative tweets (Week 1 Monday T1, T2), Personal/@Brand account mapping, Account Strategy section
04_media.pyMedia Queue descriptions (30 rows) — must match the actual tweet content for cross-references to work
05_qa_check.pyUsually no content changes needed — keep formulas as-is
06_bonus_pool.py45 bonus tweets (bonus_tweets list — 15 per pillar)
07_readme_weekends.py4 customization vars at top: PRODUCT_NAME, START_DATE_STR, END_DATE_STR, WEEK_COUNT, NORTH_STAR
08_reply_opportunities.pyTop-of-file vars: PRODUCT_NAME, PRODUCT_URL, ONE_LINER, PRICING, FEATURES[], COMPETITORS[], PLACEHOLDER{}. Rewrite the 73 reply templates (12 categories: WIB, PITCH, SHIP, MRR, PROB, LINK, RT, GM, FB, SEARCH, WIN, STACK) to reference user's product specifics. Replace the 30 target accounts + 35 search keywords with ones relevant to user's niche.

Content customization rules:

  • Replace every "Screenify" with user's product name
  • Replace features (Rust+Metal, 3.1x export, Auto-Zoom, AI captions, 3D templates, etc.) with user's actual features
  • Replace competitors (Loom, Screen.Studio, Tella, Cap) with user's actual competitors
  • Replace the "4 months building" narrative with the user's actual timeline
  • Replace pricing ($9/mo, $149 lifetime) with user's actual pricing
  • Replace example numbers (288 emails, 54% open rate, $520 MRR) with plausible numbers appropriate to their stage — flag these clearly as "YOUR NUMBERS HERE" if you don't know them
  • Preserve the pillar distribution ratios (Build-in-Public 30%, Feature Showcase 20%, Tutorial 15%, etc.)
  • Preserve the Daily Tracker row count (94 rows: header + 93 tweet slots across 12 weeks)

DO NOT change:

  • Sheet structure, column counts, formula references, QA rules
  • Pillar names (the 9 pillars: Build-in-Public, Feature Showcase, Tutorial, Behind-the-Scenes, Customer Stories, Competitor Comparison, Community Question, Tips & Craft, Indirect Insight)
  • Media Queue row count (30)
  • Bonus pool tweet count (45 = 15 × 3 new pillars)

Step 5: Run scripts in order

After adapting all scripts, run them sequentially. Each one modifies the Excel file from the previous step:

cd /sessions/gracious-jolly-dijkstra  # or wherever you're working
python3 scripts/01_scaffold.py          # creates workbook + Week 1
python3 scripts/02_fill_weeks.py        # fills Weeks 2-12
python3 scripts/03_accounts_narrative.py  # adds Posted As columns + narrative fix
python3 scripts/04_media.py             # adds media tracking + Media Queue sheet
python3 scripts/05_qa_check.py          # adds QA Check sheet
python3 scripts/06_bonus_pool.py        # adds 3 new pillars + Bonus Content Pool
python3 scripts/07_readme_weekends.py <output.xlsx>  # rewrites README + fills 50 weekend slots
python3 scripts/08_reply_opportunities.py <output.xlsx>  # adds Reply Templates + Targets + Log

Step 8 adds reply-opportunity system — 3 new sheets that handle the "reactive" side of Twitter/X growth (replying to other people's opportunity threads, not just posting your own content):

  • Reply Templates (73 templates, 12 categories, color-coded) — copy-paste replies for threads like "GM what are you building?", "Pitch your product", "Drop your link", "Show MRR", "I'll RT best X", etc.
  • Reply Targets — 30 accounts to follow with notifications ON + 35 search keywords with intent classification (🔥 High / 🟡 Medium / 🔵 Low)
  • Reply Log — 90 pre-filled daily rows to track replies sent, profile clicks, followers gained, DMs, signups, with 8 auto-metric formulas at the top

Step 7 is critical — it patches two gaps left by scripts 01-06:

  1. README sheet from scripts 01-06 only documents 7 sheets but the file has 12 — script 07 rewrites README with full documentation (all 12 sheets + 9 pillars + account strategy + weekday/weekend routines + red flags + troubleshooting, ~111 rows)
  2. Bonus Content Pool has 45 tweets sitting isolated — script 07 schedules 50 slots across 25 weekend days (13 Sat + 12 Sun), rotating the 3 bonus pillars [(CQ,TC), (II,CQ), (TC,II)] × 2 slots/day

Before running, edit the 4 customization vars at the top of 07_readme_weekends.py:

  • PRODUCT_NAME — all caps, e.g. "SCREENIFY STUDIO"
  • START_DATE_STR — e.g. "2026-04-06 (Monday)"
  • END_DATE_STR — e.g. "2026-07-05 (Sunday)"
  • WEEK_COUNT — default 13
  • NORTH_STAR — one-line goal, e.g. "First 50 paying users ($500-1500 MRR) by Day 90"

Check for errors after each step. Most common issue: merged-cell errors when inserting columns (see how 03_accounts_narrative.py handles unmerge_cells before insert_cols).

Step 6: Verify the output

After all 7 scripts run, verify the file is valid:

  1. Run formula recalc: python3 scripts/recalc.py <path-to-output.xlsx> → should report "total_errors": 0 and roughly 211 formulas. (recalc.py is bundled in this skill's scripts/ folder — no external dependencies needed.)
  2. Open the QA Check sheet (first tab) — Health Score should be ≥90%. The only expected warnings are P0 media tasks still TODO and P1 media tasks still TODO (these are warnings by design, not failures).
  3. Spot-check 5-10 tweets across different weeks and pillars to confirm they're specific, publishable, and match the user's product voice.

Step 7: Share with user

Save the final file to the user's Cowork workspace folder and share with a computer:// link. Give a brief summary of:

  • Total tweets generated (should be 225: 180 main + 45 bonus)
  • Pillar distribution
  • QA health score
  • Where the README is (first tab labeled "QA Check" has overall status; detailed usage lives inside the workbook sheets)

Pillar distribution targets

These ratios are hard-coded in the scripts. Do not rebalance without user confirmation — they represent validated content mix for an indie SaaS build-in-public launch:

Pillar% of main 180Purpose
Build-in-Public25-30%Narrative thread, daily progress, vulnerability
Feature Showcase15-20%Product capability demos (requires Video/GIF)
Tutorial10-15%Workflow/how-to (requires Video/GIF)
Behind-the-Scenes10%Process, decisions, mistakes
Customer Stories10%Social proof, user quotes
Competitor Comparison5%Positioning (Personal account ONLY)

Bonus pool (3 additional pillars × 15 tweets = 45 evergreen):

PillarPurposeAccount
Community QuestionAsk audience, prompt repliesPersonal only
Tips & CraftCraft tips adjacent to product domainEither
Indirect InsightThought leadership, opinionsPersonal only

Account strategy defaults

Hard rule (enforced by QA Check):

  • Competitor Comparison → Personal account only (brand comparing itself to competitors feels desperate)
  • Community Question → Personal only (brand asking questions feels corporate)
  • Indirect Insight → Personal only (opinions belong to humans)
  • Feature Showcase, Tutorial → Brand account primary, can cross-post
  • Build-in-Public → 80% Personal, 20% Both (RT)
  • Customer Stories → Brand primary

Watch-outs

  • Do not fabricate specific user quotes or metrics. When the example has things like "Beta tester Sarah said X" or "$520 MRR", replace these with generic placeholders like "[USER QUOTE HERE]" or "[YOUR MRR]" UNLESS the user provided those numbers.
  • Watch the narrative timeline. If the user just started building, don't open with "4 months heads-down building in a cave" — use their actual timeline.
  • Media Queue cross-references. Rows 10 and 13 of the Media Queue refer to specific tweets by week/day — if you change which tweets have video media, update these accordingly, or the QA Check will fail.
  • Currency and pricing. Default scripts use USD. For other currencies, update pricing strings in both Daily Tracker tweets AND Content Mix Rules.

If scripts fail

Common issues and fixes:

  • KeyError: (row, col) on insert_cols → unmerge merged cells BEFORE inserting (see 03_accounts_narrative.py for pattern)
  • unhashable type: 'StyleProxy' → don't do conditional font assignment in one line; use if/else blocks
  • Formulas showing stale values → run the recalc.py script from the xlsx skill
  • Off-by-N references after insert_rows → openpyxl does NOT update formula references automatically; any formula referencing a shifted row must be manually updated

Output location

Save the final .xlsx to the user's Cowork workspace folder (typically /sessions/<session-id>/mnt/<Folder Name>/). Name the file <ProductName>-90-Day-Tracker.xlsx.