Triggers
- ship a saas
- ship a micro saas
- launch indie product
- build a paid tool
- micro tool with stripe
- monetize this idea
- bootstrap a saas
- launch on product hunt
- launch on indie hackers
- $9/mo product
- can we sell this
Indie SaaS Shipper
Overview
Most indie SaaS attempts fail not because the code is bad but because the
distribution doesn't exist and the buyer was never validated. This skill
exists to invert the default order: validate willingness-to-pay before
writing code, ship a paid landing page before a product, and kill the idea
fast if the signal isn't there.
Iron rules:
- No code before someone says "I'd pay." A tweet, a DM, or a Stripe
pre-order — but a real human signal, not a poll.
- First dollar in 14 days or kill it. Not first sign-up. First paid
transaction. The clock starts when phase 2 begins.
- One product at a time. Five half-shipped products earn $0; one
shipped product earns something. Sequential, not parallel.
- No "free tier" until paid traction exists. Free tier is a customer
acquisition tactic, not a starting point.
Phase 1 — idea triage (≤30 minutes)
Before anything else, score the idea on three axes (1–5):
- Pain intensity: is this a vitamin or a painkiller? Painkillers convert.
- Buyer reachability: can you reach 100 buyers from your existing
network/audience in a week? If no → kill or come back when you can.
- Build-to-revenue ratio: can a working v1 ship in ≤7 days of agent
build time? If no → scope it down or kill.
Score below 9/15: kill. Score 9–11: maybe, surface caveats. Score 12+:
proceed.
Bias toward dev tools, AI-augmented workflow tools, and niche B2B utilities
where buyers already pay for similar things and are easy to find. Avoid
consumer apps (CAC eats you), ad-supported tools (scale game), and
"productivity for everyone" framings (no buyer profile).
Phase 2 — willingness-to-pay validation (3–5 days, no code)
Before opening an editor:
- Write the landing page first. One paragraph: who it's for, what it
does, what it costs. Three pricing tiers ($9 / $19 / $49 monthly is the
reference shape — adjust to value).
- Set up Stripe payment links (Stripe in 100+ countries; LemonSqueezy
if VAT/MoR is a concern). No app, no auth, just a page and a "Buy" button
that 404s after payment with a "thanks, you'll get access in 48h" page.
- Show it to 20 people in the buyer profile. DMs, X replies, niche
subreddits where soliciting is allowed. Track responses verbatim.
- Acceptance criterion: ≥3 sign-ups OR ≥1 paid pre-order in 5 days.
Below that, the idea isn't validated. Kill or pivot.
Refunds are fine. The signal is that someone clicked "buy."
Phase 3 — minimum shippable product (5–7 days)
Stack defaults — pick these unless there's a specific reason not to:
- Frontend: Next.js + Tailwind + shadcn/ui (App Router)
- Backend: Next.js API routes (or FastAPI if Python-heavy)
- DB: Postgres on Neon / Supabase (free tier fine)
- Auth: Clerk or Supabase Auth
- Payments: Stripe (default) or LemonSqueezy (if VAT MoR matters)
- Hosting: Vercel (frontend) + Railway/Fly (workers)
- Analytics: Plausible (privacy-friendly, owners don't fight cookie banners)
Build only what the landing page promised. No nice-to-haves until first
paying user. Onboarding email, dashboards, settings pages — all later.
The agent's job here is to ship code; the user's job is to look at the
landing page output before it goes live and reject anything that
overpromises.
Phase 4 — distribution (continuous, starting day 1)
Distribution is a parallel track to build, not a sequential phase. Start day 1.
- Where to launch: Product Hunt (Tuesday/Wednesday, 12:01 AM PST), Indie
Hackers (Show IH section), Hacker News (Show HN — only if there's a real
technical angle), the niche subreddits in scope, and X.
- Don't launch on all of them on the same day. Sequence: niche channels
→ IH → PH → HN. The flop on one platform poisons the next.
- The agent owns content; the user owns voice. The agent drafts the
launch posts, threads, replies, screenshots. The user posts under their
identity. Bot launches feel bot-launched.
Phase 5 — kill or scale (day 14 review)
Hard gate at day 14 from phase 2 start:
- 0 paying customers → kill. Move to next idea. Park the code in a
graveyard/ folder; record what was learned in learned/saas/{name}.md.
- 1–2 paying customers → investigate the moat. Were they friends? Did
they discover it organically? Most "first 2 customers were friends" outcomes
don't compound. Continue only if non-network customers exist.
- 3+ paying customers from cold traffic → scale. Reinvest revenue into
ads, more landing pages, a referral mechanic. This is now a real product.
Templates
Validation DM template
Hey [name], saw your [post/tweet/repo] on [topic]. Building a small tool
that [one-sentence problem statement] — landing page here: [link]. Would
$[price]/mo solve a real pain for you, or am I way off?
Refund-friendly preorder copy
Pay $X today, full access in 48 hours. If we don't ship in 7 days you get
a full refund, no questions. We don't keep the money until you have a
working product in your hands.
Kill-it-and-document template (learned/saas/{name}.md)
Killed: {name} — {date}
- Pitch: {one line}
- Validation outcome: {n signups / m paid in y days}
- Why it died: {real reason, not "no time"}
- What I'd reuse: {tech, audience, distribution channel}
- What I won't repeat: {assumption that broke}
Failure modes / when to refuse
- "Let's build it and figure out monetization later" → refuse. No.
- "It's free for the first 1000 users" → refuse. That's not a SaaS, that's
a hobby with hosting costs.
- "Build the entire admin dashboard / settings / SSO before launch" → refuse.
Ship the one feature the landing page promised.
- "I want to launch on Friday" → push back. PH/IH launch days matter.
Verify
- The deliverable for this phase exists as a concrete artifact (doc, ticket, board, repo) and its location is shared, not described
- Each commitment has an owner name, a due date, and a definition-of-done that someone other than the author could check
- Risks are listed with likelihood/impact and a named mitigation, not as a generic 'risks: TBD' bullet
- Dependencies on other teams/vendors/agents are explicit; an ack from each dependency is recorded or marked 'pending'
- Success criteria for the next phase are numeric or otherwise objectively testable
- A rollback / kill-switch / 'we will stop if X' criterion is written down before work starts
Anti-patterns to flag
- The polish trap: rewriting the landing page for the 4th time instead
of DMing buyer #21.
- The infinite scope creep: "v1 also needs Slack integration." It does
not. v1 needs one paying customer.
- The free-tier escape hatch: when validation fails, the temptation is
"let's just make it free and grow." That's a different business; restart
phase 1 if you go there.
1---2name: indie-saas-shipper3description: Use when shipping a small, paid SaaS micro-tool from idea → live → first dollar. Goes against "build it and they'll come" — every step has a kill criterion, a 14-day-to-first-dollar default budget, and forces distribution before code. Geography-neutral (Stripe/LemonSqueezy), no platform middlemen.4---56## Triggers78- ship a saas9- ship a micro saas10- launch indie product11- build a paid tool12- micro tool with stripe13- monetize this idea14- bootstrap a saas15- launch on product hunt16- launch on indie hackers17- $9/mo product18- can we sell this1920# Indie SaaS Shipper2122## Overview2324Most indie SaaS attempts fail not because the code is bad but because **the25distribution doesn't exist** and **the buyer was never validated**. This skill26exists to invert the default order: validate willingness-to-pay before27writing code, ship a paid landing page before a product, and kill the idea28fast if the signal isn't there.2930**Iron rules:**311. **No code before someone says "I'd pay."** A tweet, a DM, or a Stripe32 pre-order — but a real human signal, not a poll.332. **First dollar in 14 days or kill it.** Not first sign-up. First *paid*34 transaction. The clock starts when phase 2 begins.353. **One product at a time.** Five half-shipped products earn $0; one36 shipped product earns something. Sequential, not parallel.374. **No "free tier" until paid traction exists.** Free tier is a customer38 acquisition tactic, not a starting point.3940## Phase 1 — idea triage (≤30 minutes)4142Before anything else, score the idea on three axes (1–5):4344- **Pain intensity:** is this a vitamin or a painkiller? Painkillers convert.45- **Buyer reachability:** can you reach 100 buyers from your existing46 network/audience in a week? If no → kill or come back when you can.47- **Build-to-revenue ratio:** can a working v1 ship in ≤7 days of agent48 build time? If no → scope it down or kill.4950Score below 9/15: kill. Score 9–11: maybe, surface caveats. Score 12+:51proceed.5253Bias toward **dev tools, AI-augmented workflow tools, and niche B2B utilities**54where buyers already pay for similar things and are easy to find. Avoid55consumer apps (CAC eats you), ad-supported tools (scale game), and56"productivity for everyone" framings (no buyer profile).5758## Phase 2 — willingness-to-pay validation (3–5 days, no code)5960Before opening an editor:61621. **Write the landing page first.** One paragraph: who it's for, what it63 does, what it costs. Three pricing tiers ($9 / $19 / $49 monthly is the64 reference shape — adjust to value).652. **Set up Stripe payment links** (Stripe in 100+ countries; LemonSqueezy66 if VAT/MoR is a concern). No app, no auth, just a page and a "Buy" button67 that 404s after payment with a "thanks, you'll get access in 48h" page.683. **Show it to 20 people in the buyer profile.** DMs, X replies, niche69 subreddits where soliciting is allowed. Track responses verbatim.704. **Acceptance criterion:** ≥3 sign-ups OR ≥1 paid pre-order in 5 days.71 Below that, the idea isn't validated. Kill or pivot.7273Refunds are fine. The signal is that someone clicked "buy."7475## Phase 3 — minimum shippable product (5–7 days)7677Stack defaults — pick these unless there's a specific reason not to:7879- Frontend: Next.js + Tailwind + shadcn/ui (App Router)80- Backend: Next.js API routes (or FastAPI if Python-heavy)81- DB: Postgres on Neon / Supabase (free tier fine)82- Auth: Clerk or Supabase Auth83- Payments: **Stripe** (default) or LemonSqueezy (if VAT MoR matters)84- Hosting: Vercel (frontend) + Railway/Fly (workers)85- Analytics: Plausible (privacy-friendly, owners don't fight cookie banners)8687Build only what the landing page promised. **No nice-to-haves until first88paying user.** Onboarding email, dashboards, settings pages — all later.8990The agent's job here is to ship code; the user's job is to look at the91landing page output before it goes live and reject anything that92overpromises.9394## Phase 4 — distribution (continuous, starting day 1)9596Distribution is a parallel track to build, not a sequential phase. Start day 1.9798- **Where to launch:** Product Hunt (Tuesday/Wednesday, 12:01 AM PST), Indie99 Hackers (Show IH section), Hacker News (Show HN — only if there's a real100 technical angle), the niche subreddits in scope, and X.101- **Don't launch on all of them on the same day.** Sequence: niche channels102 → IH → PH → HN. The flop on one platform poisons the next.103- **The agent owns content; the user owns voice.** The agent drafts the104 launch posts, threads, replies, screenshots. The user posts under their105 identity. Bot launches feel bot-launched.106107## Phase 5 — kill or scale (day 14 review)108109Hard gate at day 14 from phase 2 start:110111- 0 paying customers → **kill.** Move to next idea. Park the code in a112 `graveyard/` folder; record what was learned in `learned/saas/{name}.md`.113- 1–2 paying customers → **investigate the moat.** Were they friends? Did114 they discover it organically? Most "first 2 customers were friends" outcomes115 don't compound. Continue only if non-network customers exist.116- 3+ paying customers from cold traffic → **scale.** Reinvest revenue into117 ads, more landing pages, a referral mechanic. This is now a real product.118119## Templates120121### Validation DM template122123> Hey [name], saw your [post/tweet/repo] on [topic]. Building a small tool124> that [one-sentence problem statement] — landing page here: [link]. Would125> $[price]/mo solve a real pain for you, or am I way off?126127### Refund-friendly preorder copy128129> Pay $X today, full access in 48 hours. If we don't ship in 7 days you get130> a full refund, no questions. We don't keep the money until you have a131> working product in your hands.132133### Kill-it-and-document template (`learned/saas/{name}.md`)134135> ## Killed: {name} — {date}136> - Pitch: {one line}137> - Validation outcome: {n signups / m paid in y days}138> - Why it died: {real reason, not "no time"}139> - What I'd reuse: {tech, audience, distribution channel}140> - What I won't repeat: {assumption that broke}141142## Failure modes / when to refuse143144- "Let's build it and figure out monetization later" → refuse. No.145- "It's free for the first 1000 users" → refuse. That's not a SaaS, that's146 a hobby with hosting costs.147- "Build the entire admin dashboard / settings / SSO before launch" → refuse.148 Ship the one feature the landing page promised.149- "I want to launch on Friday" → push back. PH/IH launch days matter.150151## Verify152153- The deliverable for this phase exists as a concrete artifact (doc, ticket, board, repo) and its location is shared, not described154- Each commitment has an owner name, a due date, and a definition-of-done that someone other than the author could check155- Risks are listed with likelihood/impact and a named mitigation, not as a generic 'risks: TBD' bullet156- Dependencies on other teams/vendors/agents are explicit; an ack from each dependency is recorded or marked 'pending'157- Success criteria for the next phase are numeric or otherwise objectively testable158- A rollback / kill-switch / 'we will stop if X' criterion is written down before work starts159160## Anti-patterns to flag161162- **The polish trap:** rewriting the landing page for the 4th time instead163 of DMing buyer #21.164- **The infinite scope creep:** "v1 also needs Slack integration." It does165 not. v1 needs one paying customer.166- **The free-tier escape hatch:** when validation fails, the temptation is167 "let's just make it free and grow." That's a different business; restart168 phase 1 if you go there.