Intranet Prépavogt Alumni
Plateforme de mise en réseau pour les anciens élèves de Prépavogt. RGPD-compliant · Activation par invitation · Annuaire opt-in · Actualités membres.
Périmètre V1
Import CSV depuis Microsoft Forms. Table ContactBase strictement privée, admin uniquement. 187 contacts importés avec 13 champs pré-remplis. Commande import_contacts + UI admin.
Envoi d'emails d'activation via token sécurisé (7 jours). Actions admin : envoyer invitation, renvoyer invitation. Emails via Resend en production, console en dev.
Page Activate.tsx : création de mot de passe + consentement RGPD explicite. Login JWT. vercel.json SPA rewrite. VITE_API_URL corrigé via .env.production.
Connexion API réelle (GET /api/alumni/), pagination 12/page, filtres (promotion, filière, ville, secteur), détail avec "Même promotion". React Query hooks. Mock toggle pour démo.
Connexion API réelle, routage par slug, hero banner cover image. Admin CRUD (liste + formulaire rich text + upload image). 8 articles en base.
GET/PATCH /api/alumni/me/, édition inline (selects + inputs), visibilité toggle, retrait consentement RGPD, jauge complétion sidebar.
Dashboard admin, base de contacts (KPIs + table + invitation + import CSV), CRUD articles, analytics (django-request). ProtectedAdminRoute (staff-only).
Bouton Mock/API dans la topbar. Bascule localStorage sans rebuild. Adapter hybride axios. Auth jamais mockée.
Abonnement/désabonnement utilisateur. Toggle dans NewsDetail. BooleanField User + endpoints subscribe/unsubscribe.
Sidebar redesign (groupes, promo, complétion, social links). Palette verte PVA. Pages FAQ et Événements.
Django 5.1 STORAGES dict. USE_CLOUDINARY=True en staging/prod. Covers articles + uploads → Cloudinary.
Reporté en V2. V1 : contact via mailto: sur le profil. WhatsApp optionnel si numéro fourni.
Stack technique
| Django 5.1 | Backend |
| Django REST Framework | API |
| SimpleJWT | Auth |
| React 18 + TypeScript | Frontend |
| PostgreSQL 16 | Base de données |
| Resend | |
| Cloudinary | Media |
| CKEditor 5 | Éditeur riche |
| WhiteNoise | Statiques |
| drf-spectacular | Documentation |
| Coolify + IONOS VPS S+ | Hébergement |
| Vercel | Frontend hosting |
| Docker Compose | DevOps |
Modèles de données
Dernière version
- Pages FAQ (8 questions) + Événements (6 événements, images Unsplash, 3 colonnes)
- Analytics : django-request activé + page stats (KPIs, AreaChart, BarChart, table requêtes)
- Import CSV contacts depuis l'admin frontend (délimiteur auto-détecté ; vs ,)
- Migration RCT → PROD (pg_dump/psql, 185 contacts, 11 users, 9 alumni)
- Cloudinary fix — Django 5.1 STORAGES (DEFAULT_FILE_STORAGE ignoré)
- Domaines prod : app.prepavogt-alumni.org + intranet.prepavogt-alumni.org
- FRONTEND_URL → app.prepavogt-alumni.org (emails activation)
- Sidebar : titre INTRANET stylisé (gradient), auto-collapse mobile
- Lovable branding retiré (OG tags, title, author → PVA)
- KPI contacts corrigés (page_size 500, max_page_size dynamique)
- Admin exclu des contacts (is_staff) + annuaire
- Docs internes mises à jour (templates pages/)