Plateforme d'entraide citoyenne marocaine construite avec Next.js 15, Better-Auth, Drizzle ORM et PostgreSQL.
- Prérequis
- Installation
- Configuration de la Base de Données
- Configuration de Better-Auth
- Variables d'Environnement
- Migrations de Base de Données
- Démarrage du Projet
- Structure du Projet
- Fonctionnalités
- Tester les Fonctionnalités
- Dépannage
Avant de commencer, assurez-vous d'avoir installé :
- Node.js 18+ et npm
- PostgreSQL (local ou service cloud comme Neon.tech, Supabase, etc.)
- Git
- Cloner le projet (si ce n'est pas déjà fait) :
git clone <votre-repo>
cd dir-khir-platform- Installer les dépendances :
npm installLes dépendances principales installées :
next- Framework Reactbetter-auth- Système d'authentificationdrizzle-orm- ORM pour PostgreSQLpostgres- Client PostgreSQLzod- Validation de schémasreact-hook-form- Gestion de formulaires@hookform/resolvers- Résolveurs pour react-hook-form
Si vous utilisez PostgreSQL en local :
- Créez une base de données :
CREATE DATABASE dir_khir;- Notez vos informations de connexion :
- Host:
localhost - Port:
5432(par défaut) - Database:
dir_khir - User:
votre_utilisateur - Password:
votre_mot_de_passe
- Créez un compte sur neon.tech
- Créez un nouveau projet
- Copiez la connection string (format :
postgresql://user:password@host/database)
- Créez un compte sur supabase.com
- Créez un nouveau projet
- Allez dans Settings > Database
- Copiez la connection string
Better-Auth est déjà configuré dans lib/auth/config.ts. Il utilise :
- Email/Password pour l'authentification
- Sessions avec expiration de 7 jours
- Drizzle adapter pour la base de données
Les routes API sont configurées dans app/api/auth/[...all]/route.ts.
Créez un fichier .env.local à la racine du projet :
# Base de Données PostgreSQL
DATABASE_URL=postgresql://user:password@host:port/database
# Better Auth (Optionnel - pour la production)
BETTER_AUTH_SECRET=votre-secret-key-tres-long-et-aleatoire
BETTER_AUTH_URL=http://localhost:3000Pour générer une clé secrète sécurisée :
# Sur Linux/Mac
openssl rand -base64 32
# Sur Windows (PowerShell)
[Convert]::ToBase64String((1..32 | ForEach-Object { Get-Random -Maximum 256 }))Important :
- Ne commitez JAMAIS le fichier
.env.localdans Git - Utilisez des secrets différents pour le développement et la production
- Pour le développement local,
BETTER_AUTH_SECRETest optionnel
Après avoir configuré DATABASE_URL, générez les migrations :
npm run db:generateCette commande va :
- Analyser votre schéma dans
lib/db/schema.ts - Créer les fichiers de migration dans le dossier
drizzle/
npm run db:pushCette commande applique directement les changements à la base de données sans créer de fichiers de migration SQL.
Si vous préférez utiliser des migrations SQL :
# Générer les migrations SQL
npm run db:generate
# Appliquer les migrations (nécessite une configuration supplémentaire)
npm run db:migrateOuvrez Drizzle Studio pour visualiser votre base de données :
npm run db:studioCela ouvre une interface web (généralement sur http://localhost:4983) où vous pouvez :
- Voir toutes les tables
- Voir les données
- Tester des requêtes
-
Vérifiez que votre
.env.localest configuré avecDATABASE_URL -
Appliquez les migrations :
npm run db:push- Démarrez le serveur de développement :
npm run dev- Ouvrez votre navigateur :
http://localhost:3000
dir-khir-platform/
├── app/
│ ├── api/
│ │ └── auth/
│ │ └── [...all]/
│ │ └── route.ts # Routes API Better-Auth
│ ├── auth/
│ │ ├── login/
│ │ │ └── page.tsx # Page de connexion
│ │ └── register/
│ │ └── page.tsx # Page d'inscription
│ ├── components/
│ │ ├── dashboard-content.tsx # Contenu du dashboard
│ │ └── needs-list.tsx # Liste des besoins
│ ├── dashboard/
│ │ └── page.tsx # Page dashboard
│ ├── post-need/
│ │ └── page.tsx # Formulaire de publication
│ └── page.tsx # Page d'accueil
├── lib/
│ ├── auth/
│ │ ├── config.ts # Configuration Better-Auth
│ │ └── actions.ts # Server Actions auth
│ ├── db/
│ │ ├── schema.ts # Schéma Drizzle (tables)
│ │ └── index.ts # Instance Drizzle
│ └── actions/
│ └── needs.ts # Server Actions pour les besoins
├── components/
│ └── ui/ # Composants UI (Shadcn)
├── drizzle.config.ts # Configuration Drizzle
├── .env.local # Variables d'environnement (à créer)
└── package.json
-
Inscription :
/auth/register- Formulaire avec validation
- Création de compte avec email/password
- Redirection vers le dashboard
-
Connexion :
/auth/login- Formulaire de connexion
- Gestion des erreurs
- Redirection vers le dashboard
-
Déconnexion : Bouton dans le dashboard
- Route :
/post-need - Fonctionnalités :
- Formulaire multi-étapes avec validation Zod
- Champs : titre, description, catégorie, ville, WhatsApp, urgence
- Validation en temps réel
- Publication via Server Action
- Redirection vers le dashboard après publication
- Route :
/ - Fonctionnalités :
- Affichage des besoins depuis la base de données
- Filtres par ville et catégorie
- Compteur de volontaires en temps réel
- Bouton "Je participe" (nécessite connexion)
- Bouton WhatsApp pour contacter
- Route :
/dashboard - Fonctionnalités :
- Statistiques personnelles
- Onglet "Mes Demandes" :
- Liste des besoins publiés
- Option "Marquer Résolu"
- Bouton WhatsApp
- Onglet "Mes Engagements" :
- Liste des missions où l'utilisateur a participé
- Bouton WhatsApp
- Allez sur
/auth/register - Créez un compte avec :
- Nom complet
- Email valide
- Mot de passe (min 8 caractères)
- Ville
- Vous serez redirigé vers
/dashboard
- Connectez-vous
- Allez sur
/post-need - Remplissez le formulaire :
- Étape 1 : Titre (min 10 caractères) et Catégorie
- Étape 2 : Description (min 20 caractères) et Niveau d'urgence
- Étape 3 : Ville et WhatsApp (format : +212 6XX XXX XXX ou 06XX XXX XXX)
- Étape 4 : Révision
- Cliquez sur "Publier Votre Besoin"
- Vérifiez que le besoin apparaît sur la page d'accueil
- Allez sur la page d'accueil (
/) - Cliquez sur "Je participe" sur un besoin
- Vérifiez que le compteur de volontaires augmente
- Vérifiez dans le dashboard > "Mes Engagements" que la mission apparaît
- Sur la page d'accueil, utilisez les filtres :
- Par ville (Casablanca, Marrakech, etc.)
- Par catégorie (Environnement, Éducation, etc.)
- Vérifiez que la liste se met à jour
- Connectez-vous
- Allez sur
/dashboard - Vérifiez les statistiques :
- Besoins publiés
- Missions rejointes
- Bénévoles trouvés
- Impact communautaire
- Testez les onglets "Mes Demandes" et "Mes Engagements"
- Testez "Marquer Résolu" sur un de vos besoins
Solution : Vérifiez que votre fichier .env.local existe et contient DATABASE_URL.
Solutions :
- Vérifiez que PostgreSQL est démarré (si local)
- Vérifiez que la connection string dans
.env.localest correcte - Vérifiez les credentials (user, password)
- Vérifiez que le firewall autorise la connexion
Solution : Appliquez les migrations :
npm run db:pushSolution :
- Vérifiez que vous êtes connecté
- Vérifiez que la session est valide (essayez de vous reconnecter)
- Vérifiez les cookies de votre navigateur
Solutions :
- Vérifiez que vous avez publié des besoins
- Vérifiez que les besoins ont le statut "open"
- Ouvrez la console du navigateur pour voir les erreurs
- Vérifiez que
getNeeds()fonctionne danslib/actions/needs.ts
Solutions :
- Vérifiez que vous êtes connecté
- Vérifiez que vous n'avez pas déjà participé à ce besoin
- Vérifiez que vous n'êtes pas le créateur du besoin
- Ouvrez la console pour voir les erreurs
# Développement
npm run dev # Démarrer le serveur de développement
# Build
npm run build # Construire pour la production
npm run start # Démarrer le serveur de production
# Base de Données
npm run db:generate # Générer les migrations
npm run db:push # Appliquer les changements directement
npm run db:migrate # Appliquer les migrations SQL
npm run db:studio # Ouvrir Drizzle Studio
# Linting
npm run lint # Vérifier le code- ✅ Validation Zod sur tous les formulaires
- ✅ Authentification requise pour les actions sensibles
- ✅ Protection CSRF via Better-Auth
- ✅ Sessions sécurisées
- ✅ Validation des numéros WhatsApp
- ✅ Vérification des permissions (un utilisateur ne peut pas participer à son propre besoin)
Pour contribuer au projet :
- Créez une branche pour votre fonctionnalité
- Faites vos modifications
- Testez toutes les fonctionnalités
- Créez une pull request
Ce projet est sous licence [votre licence].
Note : Ce guide est destiné au développement. Pour la production, assurez-vous de :
- Utiliser des variables d'environnement sécurisées
- Configurer HTTPS
- Mettre en place un monitoring
- Faire des backups réguliers de la base de données
- Utiliser un service de base de données géré (Neon, Supabase, etc.)