Le tableau de bord d’une association de parents d’élèves.
Événements, bénévoles, adhérents, comptabilité et documents réunis dans une
seule application.
Application de gestion pour une APEL (association de parents d’élèves de l’enseignement libre) ou toute association scolaire équivalente. Elle centralise le travail de l’équipe, de la préparation d’un événement jusqu’au suivi administratif et financier.
Le dépôt ne contient aucune donnée d’association : identité, coordonnées, numéro RNA, événements, adhérents et écritures comptables vivent uniquement dans la base de l’instance déployée et se saisissent depuis l’application.
- Événements et calendrier — fiches détaillées, export iCalendar, modèles réutilisables et inscriptions publiques des bénévoles.
- Check-lists opérationnelles — échéances relatives en jours, semaines ou mois, responsables, descriptions mises en forme et réorganisation par glisser-déposer.
- Membres et adhérents — rôles administrateur, organisateur et membre, coordonnées, année scolaire, statut et suivi des cotisations, export Excel de la liste des adhérents pour l’APEL départementale.
- Comptabilité associative — recettes, dépenses, comptes, catégories (créées à la volée, renommées, désactivées), validation des écritures et justificatifs privés. Chaque écriture peut être rattachée à un événement, qui affiche alors son bilan. Les relevés PDF du Crédit Mutuel s’importent en écritures : soldes vérifiés, opérations déjà importées écartées d’office, et chaque doublon possible soumis au trésorier avant l’enregistrement.
- Documents officiels — procès-verbaux d’AG, attestations et archives avec pièces jointes protégées. Les événements ont leurs propres pièces jointes : devis, affiches, attestations, plans de salle.
- Communication — e-mails via Resend ou SMTP, notifications Telegram et rappels automatiques des tâches.
- Supports de communication — une vidéo en motion design pour présenter l’APEL aux parents, préparée à partir des données de l’association, aux couleurs du logo, avec personnages, photos, musique générée et voix off naturelle open source, calculée sur le serveur (ou enregistrée au micro). Exportée en 1080p directement dans le navigateur.
- Intégration Claude.ai — serveur MCP distant sécurisé par OAuth 2.1 et PKCE pour piloter les modules selon les droits du compte.
Docker Engine et Docker Compose sont les seuls prérequis :
git clone https://github.com/flocom/APEL-manager.git
cd APEL-manager
docker compose up --build -d| Service | Adresse locale |
|---|---|
| Application | http://localhost:3000 |
Boîte e-mail Mailpit (profil mailpit) |
http://localhost:8025 |
| État de santé | http://localhost:3000/api/health |
Au premier lancement, les secrets internes sont générés, PostgreSQL est
initialisé et les migrations sont appliquées automatiquement. Le premier
compte créé depuis /register devient administrateur. Ensuite, chaque
demande se confirme depuis le lien reçu par e-mail, puis reste en attente —
elle ne voit rien — jusqu’à ce qu’un administrateur la valide dans
Utilisateurs. L’administrateur peut ensuite ouvrir
Configuration pour renseigner l’identité officielle (nom de l’association,
établissement, e-mail de contact, numéro RNA), les fenêtres de rappel, Telegram
et le fournisseur e-mail.
Les données restent conservées après un docker compose down. Pour arrêter la
stack :
docker compose downLe logo se règle dans Tableau de bord → Configuration → Logo : importez une image PNG, JPEG ou WebP, elle remplace aussitôt le logo neutre sur le site public, dans l’espace de travail et dans l’onglet du navigateur. Le fichier est conservé dans le volume des pièces jointes, jamais dans le dépôt.
Il figure aussi en tête des e-mails, converti en PNG pour que tous les clients
de messagerie l’affichent (Outlook ignore le WebP). Il faut pour cela que
APP_URL soit renseignée : l’image est chargée depuis le site, et une adresse
relative ne mène nulle part depuis une boîte de réception. Sans logo, les
e-mails gardent leur en-tête habituel.
| Conteneur | Rôle |
|---|---|
app |
Application Next.js 15 et migrations Drizzle |
db |
PostgreSQL 16 avec stockage persistant |
scheduler |
Rappels quotidiens et nettoyage des imports abandonnés |
mailpit |
Facultatif : serveur SMTP d’essai et boîte de contrôle, sur la machine hôte seulement |
caddy |
Reverse proxy HTTP/HTTPS et certificats TLS automatiques |
Des volumes dédiés conservent la base, les pièces jointes, les secrets générés,
les e-mails locaux et les certificats. La procédure de configuration, de
sauvegarde et de mise en production est détaillée dans
docs/DOCKER.md.
Copiez le modèle unique, renseignez les paramètres d’infrastructure, puis
démarrez l’instance. Docker Compose charge automatiquement .env :
cp .env.example .env
docker compose up --build -dCaddy peut obtenir automatiquement un certificat TLS dès qu’un domaine public
pointe vers le serveur. Le choix de Resend ou d’un relais SMTP, ses
identifiants et l’expéditeur se règlent exclusivement dans Tableau de bord →
Configuration. Mailpit reste disponible pour les essais locaux : démarrez-le
avec docker compose --profile mailpit up -d, puis sélectionnez SMTP avec
l’hôte mailpit et le port 1025. Il capture les messages sans les distribuer
et affiche leur contenu, liens de réinitialisation de mot de passe compris :
jamais en production. Hors relais local, l’envoi SMTP exige une connexion
chiffrée.
Installation antérieure : Mailpit démarrait autrefois d’office, avec une
interface ouverte à tout le réseau sur le port 8025. Ni git pull ni
docker compose up -d n’arrêtent cet ancien conteneur, et l’application
continue d’y relayer son courrier si elle était réglée ainsi. Vérifiez-le avec
docker ps --filter name=mailpit --format '{{.Names}} {{.Ports}}' : la
démarche pour le retirer ou le republier sur la seule machine hôte figure dans
docs/DOCKER.md, partie Courrier, sous « Installation
antérieure ».
Les images publiées sont signées : docs/DOCKER.md explique comment figer une
version par son empreinte et vérifier sa signature plutôt que d’installer
automatiquement chaque nouvelle image.
Le .env ne contient que ce dont l’application a besoin avant de pouvoir lire
la base : URL publique, accès PostgreSQL, secrets de sessions/chiffrement,
stockage, orchestration et ports. L’identité, les rappels, Telegram et la
messagerie se règlent dans l’application. Les mêmes noms d’environnement sont
utilisés en exécution directe, dans Docker et chez un hébergeur.
Claude.ai doit joindre une URL HTTPS publique. Le connecteur personnalisé utilise alors l’adresse :
https://votre-domaine.fr/api/mcp
Consultez docs/MCP_CLAUDE.md pour l’authentification et
la connexion du serveur MCP.
npm ci
cp .env.example .env
npm run db:migrate
npm run devRenseignez au minimum DATABASE_URL, AUTH_SECRET et
SETTINGS_ENCRYPTION_KEY dans .env. L’application accepte toute base
PostgreSQL compatible ; le guide Vercel utilise Neon.
Ne versionnez jamais de données réelles : dumps de base, exports d’adhérents, plannings internes, pièces comptables ou fichiers
.envrenseignés.