🚀 The ultimate Next.js 15 SaaS boilerplate for indie hackers and startups. Start charging customers immediately with built-in Stripe payments, Supabase auth, Update.dev billing, and premium content gating. Everything you need to launch your monetized application in hours, not weeks.
⚡️ Built with developer experience in mind: Next.js 15 + TypeScript + Tailwind CSS + Supabase + Update.dev + Stripe + ESLint + Prettier ✨
🚀 Launch your SaaS faster with this production-ready Next.js 15 monetization template. Built for developers who need a complete payment system, subscription management, and user authentication out of the box.
⚡️ Everything you need to start charging customers: Stripe integration, Supabase auth, Update.dev billing and auth wrapper, premium content gating, and beautiful Tailwind UI components. Perfect for indie hackers and startups building monetized applications.
Sign Up | Sign In |
---|---|
![]() |
![]() |
Create accounts on required services:
Clone the repository:
git clone https://github.com/wyattm14/launch-saas-stripe-nextjs-supabase-update.git
cd boilerplate
Install dependencies:
npm install
# or
yarn install
Set up environment variables:
cp .env.local.example .env.local
Configure Update.dev:
Update the environment variables in .env.local
with your credentials:
# Update Configuration
NEXT_PUBLIC_UPDATE_PUBLIC_KEY=your_update_public_key
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
NEXT_PUBLIC_SITE_URL=http://localhost:3000
Run the development server:
npm run dev
# or
yarn dev
For detailed documentation, visit:
.
├── app/ # Next.js App Router
│ ├── (auth)/ # Authentication routes
│ ├── api/ # API routes
│ │ ├── generator/ # Cat API integration
│ │ └── webhook/ # Stripe webhook handler
│ ├── protected/ # Protected dashboard routes
│ │ ├── paid-content/ # Premium content page
│ │ ├── pricing/ # Pricing page
│ │ └── subscription/ # Subscription management
│ ├── pricing/ # Public pricing page
│ ├── actions.ts # Server actions
│ ├── error.tsx # Error boundary
│ ├── globals.css # Global styles
│ ├── layout.tsx # Root layout
│ └── page.tsx # Home page
├── components/ # React components
│ ├── dashboard/ # Dashboard components
│ ├── ui/ # UI components
│ ├── auth-submit-button.tsx # Authentication button
│ ├── error-boundary.tsx # Error boundary component
│ ├── error-message.tsx # Error message component
│ ├── form-message.tsx # Form message component
│ ├── free-plan-card.tsx # Free plan card
│ ├── google-sign-in-button.tsx # Google sign-in button
│ ├── header.tsx # Header component
│ ├── pricing-card.tsx # Pricing card component
│ ├── pricing-content.tsx # Pricing content
│ ├── protected-sidebar.tsx # Protected sidebar
│ └── subscription-actions.tsx # Subscription actions
├── utils/ # Utility functions
│ ├── update/ # Update client utilities
│ ├── config.ts # App configuration
│ ├── errors.ts # Error handling
│ ├── redirect.ts # Redirect utilities
│ └── styles.ts # Style utilities
├── .env.example # Environment variables example
├── .env.local # Local environment variables
├── .eslint.config.mjs # ESLint configuration
├── .gitignore # Git ignore file
├── middleware.ts # Next.js middleware
├── next.config.ts # Next.js configuration
├── package.json # Project dependencies
├── postcss.config.mjs # PostCSS configuration
└── tsconfig.json # TypeScript configuration
Everyone is welcome to contribute. Open an issue if you have any questions or find a bug.
Made with ❤️ by Update.dev
Looking for custom features or support? Contact us at [email protected]