Next.js SaaS Starter : Le guide complet pour lancer votre SaaS
Lancer un SaaS demande du temps et des ressources. Notre template Next.js accélère considérablement le processus.
Prérequis
- Node.js 18+
- Compte Stripe
- Compte NeuraAPI
- Vercel (pour le déploiement)
- Connaissances TypeScript
Pourquoi Next.js pour votre SaaS ?
Next.js offre des performances optimales grâce aux Server Components.
Le framework est mature, bien documenté et supporté par Vercel.
Étape 1 : Installation
Clonez le template et installez les dépendances.
npx create-next-app@14 mon-saas \
--typescript --tailwind --eslint --app \
--src-dir --import-alias "@/*"
cd mon-saas
# Installer les dépendances essentielles
npm install prisma @prisma/client next-auth
npm install stripe @stripe/stripe-js
npm install zod react-hook-form
npm install @neuraapi/sdkzod Configurez vos variables d'environnement. react-hook-form Lancez le serveur de développement. @neuraapi/sdk Vérifiez que tout fonctionne sur localhost:3000.
Étape 2 : Configuration
Configurez Stripe pour la facturation.
npx prisma init --datasource-provider postgresqlCréez vos produits et prix dans le dashboard Stripe.
// prisma/schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id String @id @default(cuid())
email String @unique
name String?
password String
plan String @default("free")
stripeCustomerId String? @unique
apiKey String @unique @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
projects Project[]
subscription Subscription?
}
model Project {
id String @id @default(cuid())
name String
userId String
user User @relation(fields: [userId], references: [id])
createdAt DateTime @default(now())
}
model Subscription {
id String @id @default(cuid())
userId String @unique
user User @relation(fields: [userId], references: [id])
stripeSubscriptionId String @unique
status String
plan String
currentPeriodEnd DateTime
}Ajoutez les clés Stripe dans votre fichier .env.
Étape 3 : Authentification
L'authentification est prête à l'emploi.
// src/lib/auth.ts
import NextAuth from 'next-auth'
import CredentialsProvider from 'next-auth/providers/credentials'
import { prisma } from './db'
import bcrypt from 'bcryptjs'
export const { handlers, auth, signIn, signOut } = NextAuth({
providers: [
CredentialsProvider({
credentials: {
email: { label: 'Email', type: 'email' },
password: { label: 'Mot de passe', type: 'password' },
},
async authorize(credentials) {
const user = await prisma.user.findUnique({
where: { email: credentials?.email as string },
})
if (!user) return null
const valid = await bcrypt.compare(
credentials?.password as string, user.password
)
if (!valid) return null
return { id: user.id, email: user.email, name: user.name }
},
}),
],
session: { strategy: 'jwt' },
pages: { signIn: '/login' },
})Configurez les providers d'authentification. /login Ajoutez la protection des routes. /register Personnalisez les pages de connexion et inscription. react-hook-form Testez le flux complet d'authentification. zod Déployez en production.
Étape 4 : Dashboard
Le dashboard inclut les analytics et la gestion utilisateur.
// src/app/dashboard/layout.tsx
import { auth } from '@/lib/auth'
import { redirect } from 'next/navigation'
import Sidebar from '@/components/dashboard/Sidebar'
export default async function DashboardLayout({
children,
}: {
children: React.ReactNode
}) {
const session = await auth()
if (!session) redirect('/login')
return (
<div className="flex min-h-screen">
<Sidebar user={session.user} />
<main className="flex-1 p-8">{children}</main>
</div>
)
}Personnalisez les composants selon vos besoins. /login. Ajoutez vos propres métriques.
Étape 5 : Billing
Stripe gère automatiquement la facturation récurrente.
// src/app/api/stripe/checkout/route.ts
import { NextRequest, NextResponse } from 'next/server'
import { auth } from '@/lib/auth'
import Stripe from 'stripe'
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!)
const PLANS = {
starter: { priceId: 'price_xxx', name: 'Starter' },
pro: { priceId: 'price_yyy', name: 'Pro' },
enterprise: { priceId: 'price_zzz', name: 'Entreprise' },
}
export async function POST(req: NextRequest) {
const session = await auth()
if (!session?.user) {
return NextResponse.json({ error: 'Non autorisé' }, { status: 401 })
}
const { plan } = await req.json()
const selectedPlan = PLANS[plan as keyof typeof PLANS]
if (!selectedPlan) {
return NextResponse.json({ error: 'Plan invalide' }, { status: 400 })
}
const checkoutSession = await stripe.checkout.sessions.create({
mode: 'subscription',
payment_method_types: ['card'],
customer_email: session.user.email!,
line_items: [{ price: selectedPlan.priceId, quantity: 1 }],
success_url: `${process.env.NEXT_PUBLIC_APP_URL}/dashboard?success=true`,
cancel_url: `${process.env.NEXT_PUBLIC_APP_URL}/pricing?canceled=true`,
metadata: { userId: session.user.id, plan },
})
return NextResponse.json({ url: checkoutSession.url })
}Configurez les plans et les webhooks. checkout.session.completed Gérez les abonnements et les annulations. customer.subscription.deleted Testez avec le mode test de Stripe.
Étape 6 : IA
Intégrez l'IA avec le SDK NeuraAPI.
// src/lib/ai.ts
import { NeuraAPI } from '@neuraapi/sdk'
const ai = new NeuraAPI(process.env.NEURA_API_KEY!)
export async function generateContent(prompt: string, userId: string) {
// Vérifier le quota utilisateur
const credits = await checkCredits(userId)
if (credits <= 0) {
throw new Error('Crédits épuisés. Passez au plan supérieur.')
}
const result = await ai.generate({
prompt,
maxTokens: 1000,
})
// Déduire un crédit
await consumeCredit(userId)
return result.content
}Ajoutez des fonctionnalités intelligentes à votre SaaS.
Étape 7 : SEO
Optimisez le SEO de votre SaaS.
# Installer Vercel CLI
npm i -g vercel
# Déployer en staging
vercel
# Configurer les variables d'environnement
vercel env add DATABASE_URL
vercel env add NEXTAUTH_SECRET
vercel env add STRIPE_SECRET_KEY
vercel env add STRIPE_WEBHOOK_SECRET
vercel env add NEURA_API_KEY
# Déployer en production
vercel --prodLes balises meta et le sitemap sont déjà configurés.
Étape 8 : Déploiement
Déployez sur Vercel en un clic.
- Next.js 14 App Router
- Tailwind CSS
- Stripe Billing
- Authentification complète
- Dashboard admin
- SDK IA intégré
Récapitulatif
Commencer
Commencez votre SaaS dès maintenant. NeuraSaaS: Créez votre compte pour accéder au template.
Voir les tarifs