- Next.js 14 App Router
- Supabase (Auth + PostgreSQL + RLS)
- Tailwind CSS
- TypeScript
src/
app/
login/ Page de connexion
mot-de-passe-oublie/
dashboard/
civil/ Etat civil
habitants/ Registre habitants
taxes/ Taxes et recettes
courriers/ Courriers
devlocal/ Developpement local
personnel/ Personnel
foncier/ Foncier
marches/ Marches publics
audit/ Journal d'audit
components/
layout/ Sidebar, Topbar
ui/ Badge, Button, Modal, Table, StatCard, ProgressBar, PageHeader
lib/
supabase/ client.ts, server.ts, admin.ts
utils/ index.ts (helpers), audit.ts
hooks/ useProfile.ts
types/ index.ts (tous les types TS)
middleware.ts Protection des routes
supabase/
schema.sql Schema SQL complet avec RLS
npm install
cp .env.local.example .env.local
# Remplir NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY- Creer un projet sur https://supabase.com
- Aller dans SQL Editor
- Executer le contenu de
supabase/schema.sqlen entier - Verifier que les tables sont creees dans l'onglet Table Editor
Dans le dashboard Supabase > Authentication > Users > Invite user:
- Email: votre@email.com
- Apres creation, mettre a jour le profil via SQL Editor:
UPDATE profiles SET role = 'super_admin', actif = true WHERE email = 'votre@email.com';INSERT INTO mairies (nom, province, pays, statut)
VALUES ('Mairie de Gamba', 'Ogooue-Maritime', 'Gabon', 'active');Depuis Supabase Auth ou via l'interface admin (a venir):
-- Apres avoir invite l'utilisateur via Supabase Auth
UPDATE profiles
SET role = 'admin', mairie_id = '<uuid_mairie>', actif = true, nom = 'Ibinga', prenom = 'Robert', poste = 'Maire'
WHERE email = 'maire@mairie-gamba.ga';npm run build
# Deployer sur Vercel, ajouter les variables d'environnement- super_admin : acces total, gestion de toutes les mairies
- admin : maire, acces total a sa mairie
- senior : lecture/ecriture sur son service
- saisie : saisie uniquement, pas de modification ni suppression
- RLS active sur toutes les tables
- Session expiree apres 8h (a configurer dans Supabase Auth settings)
- Blocage apres 5 tentatives (gere cote client + a configurer dans Supabase)
- Soft delete sur tous les enregistrements (deleted_at)
- Journal d'audit complet