{"id":"979219ef-11d1-4e73-b58b-9ee4a734123f","shortId":"VjvcmW","kind":"skill","title":"saas-mvp-launcher","tagline":"Use when planning or building a SaaS MVP from scratch. Provides a structured roadmap covering tech stack, architecture, auth, payments, and launch checklist.","description":"# SaaS MVP Launcher\n\n## Overview\n\nThis skill guides you through building a production-ready SaaS MVP in the shortest time possible. It covers everything from idea validation and tech stack selection to authentication, payments, database design, deployment, and launch — using modern, battle-tested tools.\n\n## When to Use This Skill\n\n- Use when starting a new SaaS product from scratch\n- Use when you need to choose a tech stack for a web application\n- Use when setting up authentication, billing, or database for a SaaS\n- Use when you want a structured launch checklist before going live\n- Use when designing the architecture of a multi-tenant application\n- Use when doing a technical review of an existing early-stage SaaS\n\n## Step-by-Step Guide\n\n### 1. Validate Before You Build\n\nBefore writing any code, validate the idea:\n\n```\nValidation checklist:\n- [ ] Can you describe the problem in one sentence?\n- [ ] Who is the exact customer? (not \"everyone\")\n- [ ] What do they pay for today to solve this?\n- [ ] Have you talked to 5+ potential customers?\n- [ ] Will they pay $X/month for your solution?\n```\n\n**Rule:** If you can't get 3 people to pre-pay or sign a letter of intent, don't build yet.\n\n### 2. Choose Your Tech Stack\n\nRecommended modern SaaS stack (2026):\n\n| Layer | Choice | Why |\n|-------|--------|-----|\n| Frontend | Next.js 15 + TypeScript | Full-stack, great DX, Vercel deploy |\n| Styling | Tailwind CSS + shadcn/ui | Fast, accessible, customizable |\n| Backend | Next.js API Routes or tRPC | Type-safe, co-located |\n| Database | PostgreSQL via Supabase | Reliable, scalable, free tier |\n| ORM | Prisma or Drizzle | Type-safe queries, migrations |\n| Auth | Clerk or NextAuth.js | Social login, session management |\n| Payments | Stripe | Industry standard, great docs |\n| Email | Resend + React Email | Modern, developer-friendly |\n| Deployment | Vercel (frontend) + Railway (backend) | Zero-config, fast CI/CD |\n| Monitoring | Sentry + PostHog | Error tracking + analytics |\n\n### 3. Project Structure\n\n```\nmy-saas/\n├── app/                    # Next.js App Router\n│   ├── (auth)/             # Auth routes (login, signup)\n│   ├── (dashboard)/        # Protected app routes\n│   ├── (marketing)/        # Public landing pages\n│   └── api/                # API routes\n├── components/\n│   ├── ui/                 # shadcn/ui components\n│   └── [feature]/          # Feature-specific components\n├── lib/\n│   ├── db.ts               # Database client (Prisma/Drizzle)\n│   ├── stripe.ts           # Stripe client\n│   └── email.ts            # Email client (Resend)\n├── prisma/\n│   └── schema.prisma       # Database schema\n├── .env.local              # Environment variables\n└── middleware.ts           # Auth middleware\n```\n\n### 4. Core Database Schema (Multi-tenant SaaS)\n\n```prisma\nmodel User {\n  id            String    @id @default(cuid())\n  email         String    @unique\n  name          String?\n  createdAt     DateTime  @default(now())\n  subscription  Subscription?\n  workspaces    WorkspaceMember[]\n}\n\nmodel Workspace {\n  id        String    @id @default(cuid())\n  name      String\n  slug      String    @unique\n  plan      Plan      @default(FREE)\n  members   WorkspaceMember[]\n  createdAt DateTime  @default(now())\n}\n\nmodel Subscription {\n  id                 String   @id @default(cuid())\n  userId             String   @unique\n  user               User     @relation(fields: [userId], references: [id])\n  stripeCustomerId   String   @unique\n  stripePriceId      String\n  stripeSubId        String   @unique\n  status             String   # active, canceled, past_due\n  currentPeriodEnd   DateTime\n}\n\nenum Plan {\n  FREE\n  PRO\n  ENTERPRISE\n}\n```\n\n### 5. Authentication Setup (Clerk)\n\n```typescript\n// middleware.ts\nimport { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server';\n\nconst isPublicRoute = createRouteMatcher([\n  '/',\n  '/pricing',\n  '/blog(.*)',\n  '/sign-in(.*)',\n  '/sign-up(.*)',\n  '/api/webhooks(.*)',\n]);\n\nexport default clerkMiddleware((auth, req) => {\n  if (!isPublicRoute(req)) {\n    auth().protect();\n  }\n});\n\nexport const config = {\n  matcher: ['/((?!.*\\\\..*|_next).*)', '/', '/(api|trpc)(.*)'],\n};\n```\n\n### 6. Stripe Integration (Subscriptions)\n\n```typescript\n// lib/stripe.ts\nimport Stripe from 'stripe';\nexport const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, {\n  apiVersion: '2025-01-27.acacia',\n});\n\n// Create checkout session\nexport async function createCheckoutSession(userId: string, priceId: string) {\n  return stripe.checkout.sessions.create({\n    mode: 'subscription',\n    payment_method_types: ['card'],\n    line_items: [{ price: priceId, quantity: 1 }],\n    success_url: `${process.env.NEXT_PUBLIC_URL}/dashboard?success=true`,\n    cancel_url: `${process.env.NEXT_PUBLIC_URL}/pricing`,\n    metadata: { userId },\n  });\n}\n```\n\n### 7. Pre-Launch Checklist\n\n**Technical:**\n- [ ] Authentication works (signup, login, logout, password reset)\n- [ ] Payments work end-to-end (subscribe, cancel, upgrade)\n- [ ] Error monitoring configured (Sentry)\n- [ ] Environment variables documented\n- [ ] Database backups configured\n- [ ] Rate limiting on API routes\n- [ ] Input validation with Zod on all forms\n- [ ] HTTPS enforced, security headers set\n\n**Product:**\n- [ ] Landing page with clear value proposition\n- [ ] Pricing page with 2-3 tiers\n- [ ] Onboarding flow (first value in < 5 minutes)\n- [ ] Email sequences (welcome, trial ending, payment failed)\n- [ ] Terms of Service and Privacy Policy pages\n- [ ] Support channel (email / chat)\n\n**Marketing:**\n- [ ] Domain purchased and configured\n- [ ] SEO meta tags on all pages\n- [ ] Google Analytics or PostHog installed\n- [ ] Social media accounts created\n- [ ] Product Hunt draft ready\n\n## Best Practices\n\n- ✅ **Do:** Ship a working MVP in 4-6 weeks maximum, then iterate based on feedback\n- ✅ **Do:** Charge from day 1 — free users don't validate product-market fit\n- ✅ **Do:** Build the \"happy path\" first, handle edge cases later\n- ✅ **Do:** Use feature flags for gradual rollouts (e.g., Vercel Edge Config)\n- ✅ **Do:** Monitor user behavior from launch day — not after problems arise\n- ❌ **Don't:** Build every feature before talking to customers\n- ❌ **Don't:** Optimize for scale before reaching $10k MRR\n- ❌ **Don't:** Build a custom auth system — use Clerk, Auth.js, or Supabase Auth\n- ❌ **Don't:** Skip the onboarding flow — it's where most SaaS lose users\n\n## Troubleshooting\n\n**Problem:** Users sign up but don't activate (don't use core feature)\n**Solution:** Reduce steps to first value. Track with PostHog where users drop off in onboarding.\n\n**Problem:** High churn after trial\n**Solution:** Add an exit survey. Most churn is due to lack of perceived value, not price.\n\n**Problem:** Stripe webhook events not received locally\n**Solution:** Use Stripe CLI: `stripe listen --forward-to localhost:3000/api/webhooks/stripe`\n\n**Problem:** Database migrations failing in production\n**Solution:** Always run `prisma migrate deploy` (not `prisma migrate dev`) in production environments.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["saas","mvp","launcher","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-saas-mvp-launcher","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/saas-mvp-launcher","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34583 github stars · SKILL.md body (7,326 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T18:52:09.594Z","embedding":null,"createdAt":"2026-04-18T21:43:45.339Z","updatedAt":"2026-04-22T18:52:09.594Z","lastSeenAt":"2026-04-22T18:52:09.594Z","tsv":"'-3':626 '-6':686 '/api/webhooks':487 '/blog':484 '/dashboard':555 '/pricing':483,563 '/sign-in':485 '/sign-up':486 '1':151,549,698 '10k':756 '15':240 '2':225,625 '2025-01-27.acacia':524 '2026':234 '3':209,323 '3000/api/webhooks/stripe':851 '4':380,685 '5':193,469,633 '6':505 '7':566 'access':254 'account':671 'activ':458,792 'add':819 'alway':859 'analyt':322,665 'api':258,346,347,503,601 'apivers':523 'app':329,331,340 'applic':99,132 'architectur':22,126 'aris':739 'ask':904 'async':529 'auth':23,285,333,334,378,491,496,763,770 'auth.js':767 'authent':60,104,470,572 'backend':256,311 'backup':596 'base':691 'battl':70 'battle-test':69 'behavior':732 'best':677 'bill':105 'boundari':912 'build':9,37,155,223,709,742,760 'cancel':459,558,586 'card':543 'case':716 'channel':650 'charg':695 'chat':652 'checklist':27,118,164,570 'checkout':526 'choic':236 'choos':92,226 'churn':815,824 'ci/cd':316 'clarif':906 'clear':619,879 'clerk':286,472,766 'clerk/nextjs/server':479 'clerkmiddlewar':476,490 'cli':844 'client':361,365,368 'co':266 'co-loc':265 'code':159 'compon':349,352,357 'config':314,500,728 'configur':590,597,657 'const':480,499,516 'core':381,796 'cover':19,50 'creat':525,672 'createcheckoutsess':531 'createdat':401,427 'createroutematch':477,482 'criteria':915 'css':251 'cuid':395,415,437 'currentperiodend':462 'custom':177,195,748,762 'customiz':255 'dashboard':338 'databas':62,107,268,360,372,382,595,853 'datetim':402,428,463 'day':697,735 'db.ts':359 'default':394,403,414,423,429,436,489 'deploy':64,248,307,863 'describ':167,883 'design':63,124 'dev':867 'develop':305 'developer-friend':304 'doc':298 'document':594 'domain':654 'draft':675 'drizzl':279 'drop':809 'due':461,826 'dx':246 'e.g':725 'earli':143 'early-stag':142 'edg':715,727 'email':299,302,367,396,635,651 'email.ts':366 'end':582,584,639 'end-to-end':581 'enforc':611 'enterpris':468 'enum':464 'env.local':374 'environ':375,592,870,895 'environment-specif':894 'error':320,588 'event':837 'everi':743 'everyon':179 'everyth':51 'exact':176 'exist':141 'exit':821 'expert':900 'export':488,498,515,528 'fail':641,855 'fast':253,315 'featur':353,355,720,744,797 'feature-specif':354 'feedback':693 'field':444 'first':630,713,802 'fit':707 'flag':721 'flow':629,776 'form':609 'forward':848 'forward-to':847 'free':274,424,466,699 'friend':306 'frontend':238,309 'full':243 'full-stack':242 'function':530 'get':208 'go':120 'googl':664 'gradual':723 'great':245,297 'guid':34,150 'handl':714 'happi':711 'header':613 'high':814 'https':610 'hunt':674 'id':391,393,411,413,433,435,447 'idea':53,162 'import':475,511 'industri':295 'input':603,909 'instal':668 'integr':507 'intent':220 'ispublicrout':481,494 'item':545 'iter':690 'key':522 'lack':828 'land':344,616 'later':717 'launch':26,66,117,569,734 'launcher':4,30 'layer':235 'letter':218 'lib':358 'lib/stripe.ts':510 'limit':599,871 'line':544 'listen':846 'live':121 'local':840 'localhost':850 'locat':267 'login':290,336,575 'logout':576 'lose':782 'manag':292 'market':342,653,706 'match':880 'matcher':501 'maximum':688 'media':670 'member':425 'meta':659 'metadata':564 'method':541 'middlewar':379 'middleware.ts':377,474 'migrat':284,854,862,866 'minut':634 'miss':917 'mode':538 'model':389,409,431 'modern':68,231,303 'monitor':317,589,730 'mrr':757 'multi':130,385 'multi-ten':129,384 'mvp':3,12,29,43,683 'my-saa':326 'name':399,416 'need':90 'new':82,518 'next':502 'next.js':239,257,330 'nextauth.js':288 'onboard':628,775,812 'one':171 'optim':751 'orm':276 'output':889 'overview':31 'page':345,617,623,648,663 'password':577 'past':460 'path':712 'pay':183,198,214 'payment':24,61,293,540,579,640 'peopl':210 'perceiv':830 'permiss':910 'plan':7,421,422,465 'polici':647 'possibl':48 'postgresql':269 'posthog':319,667,806 'potenti':194 'practic':678 'pre':213,568 'pre-launch':567 'pre-pay':212 'price':546,622,833 'priceid':534,547 'prisma':277,370,388,861,865 'prisma/drizzle':362 'privaci':646 'pro':467 'problem':169,738,785,813,834,852 'process.env.next':552,560 'process.env.stripe':520 'product':40,84,615,673,705,857,869 'product-market':704 'production-readi':39 'project':324 'proposit':621 'protect':339,497 'provid':15 'public':343,553,561 'purchas':655 'quantiti':548 'queri':283 'railway':310 'rate':598 'reach':755 'react':301 'readi':41,676 'receiv':839 'recommend':230 'reduc':799 'refer':446 'relat':443 'reliabl':272 'req':492,495 'requir':908 'resend':300,369 'reset':578 'return':536 'review':138,901 'roadmap':18 'rollout':724 'rout':259,335,341,348,602 'router':332 'rule':203 'run':860 'saa':2,11,28,42,83,110,145,232,328,387,781 'saas-mvp-launch':1 'safe':264,282 'safeti':911 'scalabl':273 'scale':753 'schema':373,383 'schema.prisma':371 'scope':882 'scratch':14,86 'secret':521 'secur':612 'select':58 'sentenc':172 'sentri':318,591 'seo':658 'sequenc':636 'servic':644 'session':291,527 'set':102,614 'setup':471 'shadcn/ui':252,351 'ship':680 'shortest':46 'sign':216,787 'signup':337,574 'skill':33,77,874 'skill-saas-mvp-launcher' 'skip':773 'slug':418 'social':289,669 'solut':202,798,818,841,858 'solv':187 'source-sickn33' 'specif':356,896 'stack':21,57,95,229,233,244 'stage':144 'standard':296 'start':80 'status':456 'step':147,149,800 'step-by-step':146 'stop':902 'string':392,397,400,412,417,419,434,439,449,452,454,457,533,535 'stripe':294,364,506,512,514,517,519,835,843,845 'stripe.checkout.sessions.create':537 'stripe.ts':363 'stripecustomerid':448 'stripepriceid':451 'stripesubid':453 'structur':17,116,325 'style':249 'subscrib':585 'subscript':405,406,432,508,539 'substitut':892 'success':550,556,914 'supabas':271,769 'support':649 'survey':822 'system':764 'tag':660 'tailwind':250 'talk':191,746 'task':878 'tech':20,56,94,228 'technic':137,571 'tenant':131,386 'term':642 'test':71,898 'tier':275,627 'time':47 'today':185 'tool':72 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'track':321,804 'treat':887 'trial':638,817 'troubleshoot':784 'trpc':261,504 'true':557 'type':263,281,542 'type-saf':262,280 'typescript':241,473,509 'ui':350 'uniqu':398,420,440,450,455 'upgrad':587 'url':551,554,559,562 'use':5,67,75,78,87,100,111,122,133,719,765,795,842,872 'user':390,441,442,700,731,783,786,808 'userid':438,445,532,565 'valid':54,152,160,163,604,703,897 'valu':620,631,803,831 'variabl':376,593 'vercel':247,308,726 'via':270 'want':114 'web':98 'webhook':836 'week':687 'welcom':637 'work':573,580,682 'workspac':407,410 'workspacememb':408,426 'write':157 'x/month':199 'yet':224 'zero':313 'zero-config':312 'zod':606","prices":[{"id":"ab6649ac-a813-4629-aee4-ea5c5859944b","listingId":"979219ef-11d1-4e73-b58b-9ee4a734123f","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:43:45.339Z"}],"sources":[{"listingId":"979219ef-11d1-4e73-b58b-9ee4a734123f","source":"github","sourceId":"sickn33/antigravity-awesome-skills/saas-mvp-launcher","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/saas-mvp-launcher","isPrimary":false,"firstSeenAt":"2026-04-18T21:43:45.339Z","lastSeenAt":"2026-04-22T18:52:09.594Z"}],"details":{"listingId":"979219ef-11d1-4e73-b58b-9ee4a734123f","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"saas-mvp-launcher","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34583,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-22T06:40:00Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"ef103763fc8616ce8e0b3bda2b8ceeeb4a3fcfe7","skill_md_path":"skills/saas-mvp-launcher/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/saas-mvp-launcher"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"saas-mvp-launcher","description":"Use when planning or building a SaaS MVP from scratch. Provides a structured roadmap covering tech stack, architecture, auth, payments, and launch checklist."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/saas-mvp-launcher"},"updatedAt":"2026-04-22T18:52:09.594Z"}}