Aller au contenu principalAller au pied de page
NeuraAPI
NeuraAPI
Navigation
SaaS 25 mai 2024 15 min de lecture

Créer un SaaS complet en 48h avec Next.js et l'IA

Partager :

Créer un SaaS en 48h semble ambitieux ? Pas avec les bons outils. Voici comment j'ai procédé.

Jour 1 : Les fondations

Setup du projet

J'ai commencé par initialiser le projet Next.js avec le template NeuraSaaS qui inclut déjà l'auth, le dashboard et l'intégration Stripe.

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/sdk

Authentification

L'authentification était prête grâce au template. J'ai simplement configuré les providers.

// 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("starter")
  apiKey    String   @unique @default(cuid())
  createdAt DateTime @default(now())
  projects  Project[]
}

Dashboard

J'ai ajouté les fonctionnalités IA en appelant les endpoints NeuraAPI.

// 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' },
})

Jour 2 : Les fonctionnalités IA

Intégration IA

// 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!)

export async function POST(req: NextRequest) {
  const session = await auth()
  if (!session?.user) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
  }

  const { plan } = await req.json()
  const checkoutSession = await stripe.checkout.sessions.create({
    mode: 'subscription',
    payment_method_types: ['card'],
    customer_email: session.user.email!,
    line_items: [{ price: PLANS[plan].priceId, quantity: 1 }],
    success_url: `${process.env.NEXT_URL}/dashboard?success=true`,
    cancel_url: `${process.env.NEXT_URL}/pricing?canceled=true`,
    metadata: { userId: session.user.id, plan },
  })

  return NextResponse.json({ url: checkoutSession.url })
}

Déploiement

# Installer Vercel CLI
npm i -g vercel

# Déployer
vercel

# Configurer les variables d'environnement
vercel env add DATABASE_URL
vercel env add NEXTAUTH_SECRET
vercel env add STRIPE_SECRET_KEY

# Déployer en production
vercel --prod

Récapitulatif des 48h

12hSetup projet et dépendances
24hAuthentification et utilisateur
36hDashboard et billing
44hIntégration IA
52hTests et ajustements
62hDéploiement et lancement

Commencer maintenant

Commencez votre SaaS dès maintenant avec NeuraAPI. NeuraSaaS Créez votre compte gratuit et commencez à construire.

Voir les tarifs