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 pillarreferences/writing_guide.md— how to write good tweets for each pillar, length rules, hooks, what to avoidreferences/structure.md— Excel structure, sheet-by-sheet layout, formula architecturereferences/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:
| Script | Content to rewrite |
|---|---|
01_scaffold.py | Week 1 tweets (TWEETS dict), founder bio placeholders, pricing references, headers, example rows in Tweet Templates / Asset Library / Outreach CRM |
02_fill_weeks.py | Weeks 2-12 tweets (WEEK_TWEETS dict — 165 tweets total) |
03_accounts_narrative.py | Opening narrative tweets (Week 1 Monday T1, T2), Personal/@Brand account mapping, Account Strategy section |
04_media.py | Media Queue descriptions (30 rows) — must match the actual tweet content for cross-references to work |
05_qa_check.py | Usually no content changes needed — keep formulas as-is |
06_bonus_pool.py | 45 bonus tweets (bonus_tweets list — 15 per pillar) |
07_readme_weekends.py | 4 customization vars at top: PRODUCT_NAME, START_DATE_STR, END_DATE_STR, WEEK_COUNT, NORTH_STAR |
08_reply_opportunities.py | Top-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:
- 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)
- 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 13NORTH_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:
- Run formula recalc:
python3 scripts/recalc.py <path-to-output.xlsx>→ should report"total_errors": 0and roughly 211 formulas. (recalc.pyis bundled in this skill'sscripts/folder — no external dependencies needed.) - Open the QA Check sheet (first tab) — Health Score should be ≥90%. The only expected warnings are
P0 media tasks still TODOandP1 media tasks still TODO(these are warnings by design, not failures). - 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 180 | Purpose |
|---|---|---|
| Build-in-Public | 25-30% | Narrative thread, daily progress, vulnerability |
| Feature Showcase | 15-20% | Product capability demos (requires Video/GIF) |
| Tutorial | 10-15% | Workflow/how-to (requires Video/GIF) |
| Behind-the-Scenes | 10% | Process, decisions, mistakes |
| Customer Stories | 10% | Social proof, user quotes |
| Competitor Comparison | 5% | Positioning (Personal account ONLY) |
Bonus pool (3 additional pillars × 15 tweets = 45 evergreen):
| Pillar | Purpose | Account |
|---|---|---|
| Community Question | Ask audience, prompt replies | Personal only |
| Tips & Craft | Craft tips adjacent to product domain | Either |
| Indirect Insight | Thought leadership, opinions | Personal 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 (see03_accounts_narrative.pyfor pattern)unhashable type: 'StyleProxy'→ don't do conditional font assignment in one line; use if/else blocks- Formulas showing stale values → run the
recalc.pyscript 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.