Une application web moderne de gestion de recettes construite avec Next.js 15, permettant aux utilisateurs de découvrir, créer et sauvegarder leurs recettes préférées.
- Authentification sécurisée : Système d'inscription et de connexion avec gestion de session JWT
- Gestion de recettes : Création, consultation et filtrage de recettes
- Système de favoris : Sauvegardez vos recettes préférées
- Stockage d'images : Upload et hébergement d'images via Cloudflare R2
- Interface moderne : Design responsive avec shadcn/ui et Tailwind CSS
- Thème adaptatif : Adaptation automatique au thème système (clair/sombre)
- Routes protégées : Middleware pour sécuriser l'accès aux fonctionnalités authentifiées
- Framework : Next.js 15 avec App Router et Turbopack
- Base de données : PostgreSQL avec Prisma ORM
- Authentification : NextAuth.js (stratégie JWT)
- Stockage : Cloudflare R2 (compatible S3)
- UI : shadcn/ui + Tailwind CSS v4
- Validation : React Hook Form + Zod
- Notifications : Sonner (toast notifications)
- Node.js 20+ et npm
- Docker et Docker Compose (pour PostgreSQL)
- Un compte Cloudflare avec R2 activé
- Cloner le projet et installer les dépendances
git clone <votre-repo>
cd recettes-nextjs
npm install- Configurer les variables d'environnement
Copiez le fichier .env.example vers .env et remplissez les valeurs :
cp .env.example .envVariables à configurer :
DATABASE_URL: URL de connexion PostgreSQLNEXTAUTH_URL: URL de l'application (http://localhost:3000 en dev)NEXTAUTH_SECRET: Clé secrète pour NextAuth (générez-en une avecopenssl rand -base64 32)R2_ACCOUNT_ID,R2_ACCESS_KEY_ID,R2_SECRET_ACCESS_KEY,R2_BUCKET_NAME,R2_PUBLIC_URL: Identifiants Cloudflare R2
- Démarrer la base de données
docker-compose up -d- Initialiser la base de données
npm run prisma:sync- Lancer l'application en développement
npm run devL'application sera accessible sur http://localhost:3000
# Développement
npm run dev # Démarre le serveur de développement (Turbopack)
# Production
npm run build # Compile l'application pour la production
npm start # Démarre le serveur de production
# Qualité du code
npm run lint # Analyse le code avec ESLint
# Base de données (Prisma)
npm run prisma:generate # Génère le client Prisma
npm run prisma:migrate # Exécute les migrations
npm run prisma:sync # Génère le client + migrations (recommandé après modification du schéma)
npm run prisma:studio # Ouvre l'interface Prisma Studiorecettes-nextjs/
├── app/ # Routes et pages Next.js (App Router)
│ ├── api/ # API routes
│ │ └── auth/ # Endpoints NextAuth
│ ├── recipes/ # Pages recettes
│ │ ├── utils.ts # Server Actions pour les recettes
│ │ ├── page.tsx # Liste des recettes
│ │ ├── new/ # Création de recette
│ │ └── [recipeID]/ # Détail d'une recette
│ ├── favorites/ # Page des favoris (protégée)
│ ├── login/ # Page de connexion
│ ├── register/ # Page d'inscription
│ └── layout.tsx # Layout racine avec providers
├── components/ # Composants React réutilisables
│ ├── ui/ # Composants shadcn/ui
│ ├── navbar.tsx # Barre de navigation
│ ├── providers.tsx # SessionProvider
│ └── theme-provider.tsx # Gestion du thème
├── lib/ # Utilitaires et configurations
│ ├── authOptions.ts # Configuration NextAuth
│ ├── prisma.ts # Instance Prisma Client
│ ├── r2.ts # Client Cloudflare R2
│ └── utils.ts # Fonctions utilitaires
├── prisma/
│ └── schema-postgres.prisma # Schéma de base de données
├── middleware.ts # Middleware de protection des routes
└── docker-compose.yml # Configuration PostgreSQL
L'application utilise NextAuth.js avec une stratégie JWT :
- Les mots de passe sont hachés avec bcryptjs
- Les sessions sont stockées côté client (JWT) pour de meilleures performances
- Le middleware protège automatiquement
/recipes/newet/favorites - Les utilisateurs non authentifiés sont redirigés vers
/loginavec un message
Le schéma Prisma se trouve dans prisma/schema-postgres.prisma.
Modèles principaux :
User: Utilisateurs avec authentificationRecipe: Recettes (titre, description, image, temps de préparation, difficulté, portions)Favorite: Relation many-to-many entre utilisateurs et recettes- Modèles NextAuth :
Account,Session,VerificationToken,Authenticator
Assurez-vous de configurer toutes les variables d'environnement sur votre plateforme de déploiement :
- Variables de base de données (DATABASE_URL)
- Variables NextAuth (NEXTAUTH_URL, NEXTAUTH_SECRET)
- Variables Cloudflare R2 (R2_*)
npm run build
npm start