Le login et le mot de passe temporaire s'affichent sur la fiche de l'adherent. Apres creation, AddMemberPanel redirige desormais vers /backend/adherents/[id] pour les rendre visibles immediatement. addMember retourne l'id du nouvel adherent. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Plein R
Site de l'association Plein R — les commerçants et entreprises du Bassin de Pompey. Réseau · Rencontre · Réussite.
Deux surfaces, une seule application :
- Accueil (
/) — vitrine publique : héro + recherche, métiers, promotions des adhérents, mises à l'honneur. - Backend (
/backend) — back-office authentifié avec rôles : tableau de bord, adhérents, modération des promotions, administrateurs, et l'espace adhérent.
Stack
| Couche | Choix |
|---|---|
| Framework | Next.js 15 (App Router, TypeScript, sortie standalone) |
| Base de données | PostgreSQL 16 (conteneur externe) |
| Accès données | Drizzle ORM + drizzle-kit (migrations versionnées) sur le driver pg |
| Authentification | Auth.js v5 (NextAuth) — provider credentials, sessions JWT, RBAC |
| Conteneurisation | 1 conteneur applicatif + 1 conteneur Postgres (docker-compose) |
L'application tourne dans un seul conteneur Docker. Postgres est un conteneur séparé (externe).
Démarrage rapide (Docker)
cp .env.example .env
# AUTH_SECRET est optionnel : s'il est vide, le conteneur en génère un et le
# persiste automatiquement. Pour le fixer vous-même : openssl rand -base64 32
docker compose up --build
Au démarrage, le conteneur applique les migrations puis (si SEED_ON_START=true)
charge des données de démonstration. Ensuite :
- Site public : http://localhost:8413
- Espace adhérent / admin : http://localhost:8413/backend
- Connexion admin par défaut :
admin@plein-r.fr/changeme123
Ports (volontairement peu courants pour éviter les conflits) : l'app est publiée sur l'hôte en 8413 (→ 3000 dans le conteneur) et Postgres en 54329 (→ 5432). Modifiez la partie gauche des
ports:dansdocker-compose.ymlsi besoin. En dev local (npm run dev), l'app reste sur 3000.
Postgres déjà existant ? Supprimez le service
postgresdedocker-compose.ymlet pointezDATABASE_URLvers votre instance.
Comptes de démonstration (seed)
| Mot de passe | Rôle | |
|---|---|---|
| admin@plein-r.fr | changeme123 | Administrateur |
| claire@plein-r.fr | changeme123 | Administrateur |
| thomas@plein-r.fr | changeme123 | Modérateur |
| sophie@plein-r.fr | changeme123 | Éditeur |
| contact@aubonpain.fr | changeme123 | Adhérent (Au Bon Pain) |
Rôles & permissions
| Capacité | admin | moderator | editor | member |
|---|---|---|---|---|
| Tableau de bord | ✅ | ✅ | ✅ | — |
| Adhérents (CRUD) | ✅ | ✅ | ✅ | — |
| Modération des promotions | ✅ | ✅ | — | — |
| Administrateurs | ✅ | — | — | — |
| Mon espace (publier une promo) | — | — | — | ✅ |
/backend est protégé par le middleware ; chaque vue affine l'accès selon le rôle.
Développement local (sans Docker)
npm install
# Postgres accessible via DATABASE_URL (voir .env.example)
npm run db:generate # (re)génère le SQL de migration depuis le schéma
npm run db:migrate # applique les migrations
npm run db:seed # données de démonstration
npm run dev # http://localhost:3000
Scripts
| Script | Rôle |
|---|---|
npm run dev |
Serveur de développement |
npm run build |
Build de production (standalone) |
npm run build:scripts |
Bundle des scripts migrate/seed (utilisé par Docker) |
npm run db:generate |
Génère les migrations Drizzle |
npm run db:migrate |
Applique les migrations |
npm run db:seed |
Insère les données de démonstration |
Variables d'environnement
Voir .env.example. Les principales :
DATABASE_URL— chaîne de connexion PostgresAUTH_SECRET— secret de signature des sessions (obligatoire)AUTH_URL— URL publique de l'applicationSEED_ON_START—truepour seeder au démarrage du conteneurSEED_ADMIN_EMAIL/SEED_ADMIN_PASSWORD/SEED_ADMIN_NAME— premier admin
Note sur le logo
Le logo (public/assets/logo.svg) est une recréation vectorielle aux couleurs de
la marque. Remplacez ce fichier par le logo officiel quand vous le souhaitez
(les pages le référencent via /assets/logo.svg).
Architecture du dépôt
src/
├── app/
│ ├── page.tsx # Accueil (public)
│ ├── login/ # connexion
│ ├── api/auth/[...nextauth]/ # routes Auth.js
│ └── backend/ # back-office
│ ├── layout.tsx # garde d'auth + shell
│ ├── page.tsx # tableau de bord
│ ├── adherents/ # adhérents (liste, ajout, édition)
│ ├── promotions/ # modération
│ ├── administrateurs/ # gestion des accès
│ ├── espace/ # espace adhérent (publication)
│ └── actions.ts # server actions (mutations)
├── db/ # schéma Drizzle, client, migrate, seed
├── lib/ # requêtes, RBAC
└── types/ # augmentation des types Auth.js