feat: Tier B operator scaffolding — bundle, copy SoT, posts, emails
Pick up and finish yesterday's cut-off Tier B pass. - build/: PyInstaller scaffold (datatools.spec + launcher.py + hook-streamlit.py + README) — folder-mode bundle, locked 127.0.0.1, per-OS recipe - marketing/COPY.md: single source of truth for every customer-facing string — landing H1/sub/CTAs, demo CTAs, email subjects, Gumroad listing, banned phrases - marketing/community-posts/: 9 drafts (3 posts × 3 niches: bookkeeper, revops, shopify-pet) — story / tip / soft-offer - marketing/emails/: 18 drafts (Gumroad delivery + 5-touch onboarding × 3 niches), per-niche segmentation guidance - docs/NEXT-STEPS.md: flip 2.2 / 2.4 / 3.1 / 3.4 to done with pointers to the new assets; add Phase 0 inventory rows - .gitignore: narrow `build/` ignore so PyInstaller spec + launcher + hooks get tracked, only generated artifacts (build/build/, build/__pycache__/, build/dist/) stay ignored Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -37,6 +37,10 @@ Status legend:
|
||||
| 🟢 | 3 niche landing pages + apex chooser + shared CSS | `landing/` |
|
||||
| 🟢 | Landing-page deploy script (URL-substitution + sitemap + 404 + favicon) | `landing/deploy.py` |
|
||||
| 🟢 | Strategic plan + demo plan + post-launch measurement plan + deployment doc | `docs/PLAN.md`, `DEMO-PLAN.md`, `POST-LAUNCH.md`, `DEPLOYMENT.md` |
|
||||
| 🟢 | PyInstaller bundle scaffold (spec + launcher + Streamlit hook + README) | `build/` |
|
||||
| 🟢 | Customer-facing copy single-source-of-truth (landing + demo + email subjects + Gumroad listing) | `marketing/COPY.md` |
|
||||
| 🟢 | 9 niche-community post drafts (3 posts × 3 niches: bookkeeper, revops, shopify-pet) | `marketing/community-posts/` |
|
||||
| 🟢 | 18 email drafts (Gumroad delivery + 5-touch onboarding × 3 niches) | `marketing/emails/` |
|
||||
|
||||
---
|
||||
|
||||
@@ -122,16 +126,17 @@ can hit.
|
||||
| **Cost** | $99/year. |
|
||||
| **Blocked by** | Nothing — start ASAP because of the 1–2 week approval window. The pipeline waits on this; nothing else does. |
|
||||
|
||||
### 2.2 — 🟡 PyInstaller spec + cross-platform build (1–3 days first time)
|
||||
### 2.2 — 🟢 PyInstaller spec + cross-platform build *(scaffold shipped — runs need per-OS hosts)*
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| **What** | A `build/datatools.spec` that bundles the Streamlit GUI + all 6 tools + samples into one app. Mac `.dmg`, Windows `.exe` installer, Linux AppImage. |
|
||||
| **What** | `build/datatools.spec` + `build/launcher.py` + `build/hooks/hook-streamlit.py` bundle the Streamlit GUI + all 6 tools + samples into one app. Folder-mode (one-dir) by default; Mac `.dmg`, Windows `.exe`, Linux `.tar.gz`. Per-platform recipe in `build/README.md`. |
|
||||
| **Why** | The buyer's deliverable. Without this, there is nothing to attach to the Gumroad listing. |
|
||||
| **External dependency** | None for Linux/Mac builds. Windows builds need a Windows machine or a CI matrix runner. |
|
||||
| **External dependency** | `pip install pyinstaller`. None for Linux/Mac builds. Windows builds need a Windows machine or a CI matrix runner. |
|
||||
| **Cost** | $0 (GitHub Actions matrix runners are free for public repos). |
|
||||
| **Blocked by** | Nothing for the spec; 2.1 for the signed Mac build. |
|
||||
| **Watch out for** | Streamlit's bundle size lands around 300–500 MB per `DECISIONS.md` §4c — accepted tradeoff. |
|
||||
| **Watch out for** | Streamlit's bundle size lands around 300–500 MB per `DECISIONS.md` §4c — accepted tradeoff. PyInstaller cross-compilation isn't supported — Mac builds need a Mac, Windows builds need a Windows host. |
|
||||
| **Where it lives** | `build/datatools.spec`, `build/launcher.py`, `build/hooks/hook-streamlit.py`, `build/README.md` |
|
||||
|
||||
### 2.3 — 🟡 macOS sign + notarize (30 min once Apple Dev is approved)
|
||||
|
||||
@@ -143,16 +148,17 @@ can hit.
|
||||
| **Cost** | $0 incremental over 2.1. |
|
||||
| **Blocked by** | 2.1 + 2.2. |
|
||||
|
||||
### 2.4 — 🔴 Refund policy + license + Gumroad listing copy (1 hour)
|
||||
### 2.4 — 🟢 Refund policy + license + Gumroad listing copy *(drafted in COPY.md)*
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| **What** | A clear refund policy (14-day no-questions per the FAQ already on the landing pages) + a software licence text + the Gumroad listing description. |
|
||||
| **What** | A clear refund policy (30-day no-questions) + a software licence text + the Gumroad listing description. |
|
||||
| **Why** | Required by Gumroad's terms; surfaces on the listing page; protects against buyer disputes. |
|
||||
| **External dependency** | None — operator authoring. |
|
||||
| **Cost** | $0. |
|
||||
| **Blocked by** | Nothing. |
|
||||
| **Hint** | Most of the copy is already in the landing pages' FAQ section — paste it into Gumroad. |
|
||||
| **Where it lives** | `marketing/COPY.md` § 5 (Gumroad listing — full title / tagline / description / bullets / refund text / tags). Refund window is also referenced in COPY.md § 0 so it stays consistent across surfaces. |
|
||||
| **Still to author** | A short licence text (one-time perpetual use, no redistribution) — not in COPY.md yet. Recommend Polyform Strict 1.0.0 or a 10-line bespoke text. |
|
||||
|
||||
### 2.5 — 🟠 Activate the Gumroad listing (15 min)
|
||||
|
||||
@@ -172,16 +178,17 @@ Per `PLAN.md` §3 and `BUSINESS.md` §7 channel priorities. The strict
|
||||
no-touch constraint of `DECISIONS.md` §1 #8 makes channel choice
|
||||
matter — these are the only ones that fit.
|
||||
|
||||
### 3.1 — 🔴 First niche-community post (30 min)
|
||||
### 3.1 — 🟢 First niche-community post *(9 drafts ready — pick one and personalize)*
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| **What** | One value-first post in one niche-relevant community (e.g. r/shopify, IndieHackers Shopify chat, a Slack/Discord that allows it). Lead with the demo URL, not the buy URL. |
|
||||
| **What** | One value-first post in one niche-relevant community (e.g. r/Bookkeeping, r/revops, r/shopify; IndieHackers; niche Slacks/Discords). Lead with the demo URL, not the buy URL. |
|
||||
| **Why** | Marketplaces alone don't drive discovery. Communities are the only first-touch channel that works under no-touch. |
|
||||
| **External dependency** | Account in the chosen community; understand its self-promotion rules. |
|
||||
| **Cost** | $0. |
|
||||
| **Blocked by** | 1.4 (demo URL must work). |
|
||||
| **Hint** | Pick the persona with the most familiar community to the operator. Don't try all three at once — see `POST-LAUNCH.md` §2 "decide ONE thing" rule. |
|
||||
| **Hint** | Pick the niche the operator knows best. Don't post all three drafts in the same community in the same week — see `marketing/community-posts/README.md` for cadence guidance. |
|
||||
| **Where it lives** | `marketing/community-posts/{bookkeeper,revops,shopify-pet}/0{1-story,2-tip,3-soft-offer}.md` — 3 posts × 3 niches = 9 drafts. |
|
||||
|
||||
### 3.2 — 🟡 First long-tail SEO blog post (4–6 hours)
|
||||
|
||||
@@ -204,15 +211,17 @@ matter — these are the only ones that fit.
|
||||
| **Blocked by** | 1.4. |
|
||||
| **Hint** | The Gumroad webhook captures `?from=<persona>` automatically — no extra wiring. |
|
||||
|
||||
### 3.4 — 🟡 Email autoresponder (post-purchase delivery + 3-touch onboarding) (2–3 hours)
|
||||
### 3.4 — 🟢 Email autoresponder *(18 drafts ready — paste into provider)*
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| **What** | Gumroad's built-in delivery email plus three follow-up emails (day 1, day 7, day 14): "are you running into X?", "here's an advanced trick", "save your pipeline as JSON for next week". |
|
||||
| **Why** | Increases activation, reduces refund risk, surfaces support questions while volume is small. |
|
||||
| **External dependency** | Gumroad delivery is built-in. The 3-touch sequence needs a free email service (Resend's free tier or Mailchimp's free tier). |
|
||||
| **What** | Gumroad's built-in delivery email plus a **5-touch** onboarding sequence (Day 1, 3, 7, 14, 30) per niche. Per-niche segmentation via Gumroad's "What do you do?" custom field at checkout. |
|
||||
| **Why** | Increases activation, reduces refund risk, surfaces support questions while volume is small. The Day-1 email in particular drives buyers from "I bought it" to "I ran it" — buyers who don't open within 72h refund at ~3× the rate of buyers who do. |
|
||||
| **External dependency** | Gumroad delivery is built-in. The 5-touch sequence needs an email service that supports tag-based drips (Buttondown is the cheapest fit; ConvertKit if you want HTML editor; Resend if you'll script it). |
|
||||
| **Cost** | $0–$30/month per `BUSINESS.md` §9. |
|
||||
| **Blocked by** | 2.5. |
|
||||
| **Where it lives** | `marketing/emails/{bookkeeper,revops,shopify-pet}/{00-delivery,01-day1,02-day3,03-day7,04-day14,05-day30}.md` — 6 emails × 3 niches = 18 drafts. Variables (`{{first_name}}`, `{{download_url}}`, `{{sample_file_url}}`, `{{landing_page}}`) are listed in `marketing/emails/README.md`. |
|
||||
| **Sequence policy** | Pause if buyer replies (until you reply); kill on refund request; skip Day 14 + 30 if buyer has already engaged via support. See `marketing/emails/README.md` for full quiet rules. |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user