{
 "recipe": "saas-starter",
 "version": "0.3",
 "status": "test-built",
 "snapshot": "2026-10-12",
 "answers": {
  "use": "commercial",
  "budget": "free",
  "credit": "ok",
  "agent": "claude-code",
  "backend": "own"
 },
 "tested": {
  "on": "2026-10-12",
  "same_parts": true,
  "differs_in": []
 },
 "parts": [
  {
   "role": "runtime",
   "name": "Runtime",
   "pick": "x:node22-web",
   "title": "Node.js 22.12 or newer",
   "url": "https://nodejs.org/en/download",
   "version": null,
   "kind": null,
   "reach": "builtin",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "framework",
   "name": "Framework",
   "pick": "tool:next",
   "title": "Next.js",
   "url": "https://agentgid.com/tools/next/",
   "version": "16.4.0",
   "kind": "runtime",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "ui",
   "name": "UI library",
   "pick": "tool:react",
   "title": "React",
   "url": "https://agentgid.com/tools/react/",
   "version": "19.3.0",
   "kind": "runtime",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "lang",
   "name": "Language",
   "pick": "x:typescript59",
   "title": "TypeScript 5.9",
   "url": "https://agentgid.com/tools/typescript/",
   "version": "5.9.3",
   "kind": "dev",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "styling",
   "name": "Styling",
   "pick": "x:tailwindcss",
   "title": "Tailwind CSS",
   "url": "https://agentgid.com/tools/tailwindcss/",
   "version": "4.3.3",
   "kind": "dev",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "auth",
   "name": "Sign-in",
   "pick": "x:better-auth",
   "title": "Better Auth",
   "url": "https://agentgid.com/tools/better-auth/",
   "version": "1.7.7",
   "kind": "runtime",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": [
    "x:supabase-ssr"
   ]
  },
  {
   "role": "orm",
   "name": "Database access",
   "pick": "x:drizzle-orm",
   "title": "Drizzle ORM",
   "url": "https://agentgid.com/tools/drizzle-orm/",
   "version": "0.45.4",
   "kind": "runtime",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "database",
   "name": "Database",
   "pick": "x:postgres",
   "title": "PostgreSQL 16 or newer",
   "url": "https://www.postgresql.org/download/",
   "version": null,
   "kind": null,
   "reach": "builtin",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": [
    "api:supabase"
   ]
  },
  {
   "role": "payments",
   "name": "Payments",
   "pick": "x:stripe",
   "title": "Stripe",
   "url": "https://stripe.com/pricing",
   "version": null,
   "kind": null,
   "reach": "api",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "email",
   "name": "Email",
   "pick": "api:resend",
   "title": "Resend",
   "url": "https://agentgid.com/apis/resend/",
   "version": null,
   "kind": null,
   "reach": "api",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": [
    "x:email-outbox"
   ]
  },
  {
   "role": "unit",
   "name": "Unit tests",
   "pick": "tool:vitest",
   "title": "Vitest",
   "url": "https://agentgid.com/tools/vitest/",
   "version": "5.0.4",
   "kind": "dev",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "e2e",
   "name": "End-to-end tests",
   "pick": "tool:playwright-test",
   "title": "Playwright (JavaScript)",
   "url": "https://agentgid.com/tools/playwright-test/",
   "version": "1.64.0",
   "kind": "dev",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "knowledge",
   "name": "Library knowledge",
   "pick": "mcp:context7",
   "title": "Context7",
   "url": "https://agentgid.com/mcp/servers/io-github-upstash-context7/",
   "version": "4.3.0",
   "kind": null,
   "reach": "mcp",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "data",
   "name": "Tool and asset data",
   "pick": "mcp:agentgid",
   "title": "AgentGid",
   "url": "https://agentgid.com/connect/",
   "version": null,
   "kind": null,
   "reach": "mcp",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "also",
   "name": "Also",
   "pick": "x:react-dom",
   "title": "React DOM",
   "url": "https://agentgid.com/tools/react/",
   "version": "19.3.0",
   "kind": "runtime",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "also",
   "name": "Also",
   "pick": "x:stripe-node",
   "title": "Stripe (JavaScript)",
   "url": "https://github.com/stripe/stripe-node",
   "version": "23.0.0",
   "kind": "runtime",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "also",
   "name": "Also",
   "pick": "x:tailwind-turbopack",
   "title": "Tailwind CSS Turbopack loader",
   "url": "https://www.npmjs.com/package/@tailwindcss/turbopack",
   "version": "4.3.3",
   "kind": "dev",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "also",
   "name": "Also",
   "pick": "x:types-node22",
   "title": "@types/node 22",
   "url": "https://www.npmjs.com/package/@types/node",
   "version": "22.20.5",
   "kind": "dev",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "also",
   "name": "Also",
   "pick": "x:pglite",
   "title": "PGlite",
   "url": "https://agentgid.com/tools/electric-sql-pglite/",
   "version": "0.5.9",
   "kind": "dev",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "also",
   "name": "Also",
   "pick": "x:drizzle-kit",
   "title": "Drizzle Kit",
   "url": "https://agentgid.com/tools/drizzle-kit/",
   "version": "0.31.11",
   "kind": "dev",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "also",
   "name": "Also",
   "pick": "x:pg",
   "title": "node-postgres (pg)",
   "url": "https://agentgid.com/tools/pg/",
   "version": "8.23.1",
   "kind": "runtime",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "also",
   "name": "Also",
   "pick": "x:types-pg",
   "title": "@types/pg",
   "url": "https://www.npmjs.com/package/@types/pg",
   "version": "8.23.1",
   "kind": "dev",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "also",
   "name": "Also",
   "pick": "x:resend-sdk",
   "title": "Resend (Node.js)",
   "url": "https://agentgid.com/tools/resend/",
   "version": "6.32.1",
   "kind": "runtime",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  }
 ],
 "install": [
  "# system packages (use your OS package manager)",
  "postgresql",
  "",
  "node --version   # must print v22.12 or newer",
  "# scaffold first (Plan, step 1), then:",
  "npm install --save-exact next@16.4.0 react@19.3.0 better-auth@1.7.7 drizzle-orm@0.45.4 react-dom@19.3.0 stripe@23.0.0 pg@8.23.1 resend@6.32.1",
  "npm install -D --save-exact typescript@5.9.3 tailwindcss@4.3.3 vitest@5.0.4 @playwright/test@1.64.0 @tailwindcss/turbopack@4.3.3 @types/node@22.20.5 @electric-sql/pglite@0.5.9 drizzle-kit@0.31.11 @types/pg@8.23.1"
 ],
 "checks": [
  {
   "level": "info",
   "text": "Next.js 16 changed several APIs that most examples online still use (`middleware.ts`, synchronous `cookies()`, `next lint`). Follow this brief and the docs bundled with the installed version.",
   "source": "https://nextjs.org/docs/app/guides/upgrading/version-16"
  }
 ],
 "summary": {
  "parts": 23,
  "roles": 14,
  "fromAgentGid": 15,
  "collected": 8,
  "manual": [],
  "credits": [],
  "paid": [],
  "free": true,
  "blocks": 0,
  "warns": 0,
  "assets": 0,
  "cleared": 0,
  "byHand": []
 }
}
