AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
Next.js 16 기반 사용자 역할·조직·관리 패널을 갖춘 오픈소스 SaaS 스타터
Open-source SaaS Starter with User Roles, Organizations & Admin Panel. Built using Next.js 16, Better Auth, Drizzle, Neon, Fumadocs, Shadcn/ui, Stripe, Server Actions.
개발 도구TypeScript · MDXGitHub @mickasmt직접 설치운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
설치형 프로젝트는 배포 도메인 없이도 확인할 수 있습니다. 개인 저장소는 GitHub 로그인으로, 조직 저장소는 위의 저장소 확인 파일로 직접 확인해 주세요.
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
An open-source, modular SaaS starter built with Next.js 16, Better Auth, Drizzle, Neon and Stripe. Everything you usually rebuild on day one — auth, organizations, subscriptions, an admin panel, docs, a blog and a changelog — is here, and every part of it can be switched off or deleted for good.README 전문 보기 ↗An open-source, modular SaaS starter built with Next.js 16, Better Auth, Drizzle, Neon and Stripe. Everything you usually rebuild on day one — auth, organizations, subscriptions, an admin panel, docs, a blog and a changelog — is here, and every part of it can be switched off or deleted for good.
config/features.ts. Switch it off and its routes 404, its links disappear and its endpoints are refused. Delete it with one command.Need onboarding, teams, seat-based billing and transactional emails? Get Pro — $99 early bird until Oct 12 (then $149), one-time payment. See Pro version.
https://github.com/user-attachments/assets/6e002fc2-5adf-458d-9f42-442746d82a60
| Layer | Choice |
|---|---|
| Framework | Next.js 16 (App Router, Turbopack) |
| Database | Neon Postgres + Drizzle ORM |
| Auth | Better Auth (Google, organizations) |
| Payments | Stripe (Checkout, customer portal, webhooks) |
| UI | Tailwind CSS v4, shadcn/ui, Base UI |
| Content | MDX with Fumadocs (docs, blog, changelog, legal pages) |
auth — Google sign-in and the dashboard: /login, /register, /dashboard. Requires Database and Auth. billing — subscriptions and customer portal: /pricing, /dashboard/billing. Depends on auth, requires Payments. admin — user management for platform admins: /admin. Depends on auth. docs — MDX documentation: /docs. blog — MDX articles with authors and categories: /blog. changelog — product updates on a single page: /changelog. A module stays off while a module it depends on is off, or while a service it requires misses its environment variables. In development, the flag button in the bottom-right corner shows the state of everything; in production, set default: false on the module in config/features.ts and rebuild.
Don't need a module at all?
pnpm modules:prune blog changelog
Without --yes, the command only prints what it would delete: routes, components, content, packages, plus any link left pointing at a removed route.
npx create-next-app my-saas --example "https://github.com/mickasmt/next-saas-stripe-starter"
cd my-saas
pnpm install
cp .env.example .env.local
Fill in what you need — nothing has to be complete on the first run, since a module stays off until its services are configured. Then apply the migrations and start the app:
pnpm db:migrate
pnpm dev
To test subscriptions locally, forward Stripe events in a second terminal:
stripe listen --forward-to localhost:3000/api/auth/stripe/webhook
The full setup — Stripe products and prices, Google OAuth, deployment — is documented in /docs, or in content/docs.
app/ Routes: (marketing), (auth), (app), (docs), api
components/ UI and feature components
config/ Site, features, foundation, navigation
content/ MDX: docs, blog, changelog, legal
lib/ Auth, database, content sources, feature resolution
modules/ Server logic of the feature modules
drizzle/ Migrations
| Command | What it does |
|---|---|
pnpm dev | Start the dev server |
pnpm build | Production build |
pnpm typecheck / pnpm lint / pnpm format | Types, linting, formatting |
pnpm db:generate / pnpm db:migrate / pnpm db:studio | Drizzle migrations and studio |
pnpm modules:prune <module...> | Delete a module for good |
Titles, descriptions, canonical URLs and social cards come from lib/metadata.ts; the site-wide card is generated in app/opengraph-image.tsx. app/sitemap.ts lists the public pages of the enabled modules, and app/robots.ts keeps the dashboard and API out of search results. Set NEXT_PUBLIC_APP_URL to your domain so every absolute URL is right.
A paid version adds what comes after launch — onboarding, transactional emails, team management and seat-based billing — on the same foundation. It isn't part of this repository; every "About Pro" link in the app points back to this section.
Get Pro — $99 early bird until Oct 12 (then $149), one-time payment, no subscription.
| Feature | Free | Pro |
|---|---|---|
| Modules, dev panel and prune command | ✅ | ✅ |
| Auth with organizations (Better Auth) | ✅ | ✅ |
| Stripe subscriptions and customer portal | ✅ | ✅ |
| Admin panel | ✅ | ✅ |
| Docs, blog and changelog | ✅ | ✅ |
| Guided onboarding flow | — | ✅ |
| Team invitations, roles and permissions | — | ✅ |
| Seat-based team billing | — | ✅ |
| Transactional email templates via Resend | — | ✅ |
| Error monitoring with Sentry | — | ✅ |
| SEO: metadata, JSON-LD and sitemap | — | ✅ |
| Private repository and lifetime updates | — | ✅ |
$99 early bird until Oct 12, then $149. One-time payment, no subscription. Get Pro
The dashboard previews those features on locked pages: sample data, inert controls and an "About Pro" banner. When you ship your own product, delete components/dashboard/pro, the routes that use it and the pro: true nav items in config/nav.ts.
MIT — see LICENSE.md.