Le défi
Hart College gérait les admissions sur un site marketing public, les inscriptions aux cours sur une feuille de calcul distincte, l’encaissement des frais de scolarité par chèque et virement Interac, et la communication avec les étudiants via une boîte de réception partagée. Rien ne se rapprochait. Les administrateurs ressaisissaient chaque nouvel étudiant à trois endroits, le registraire n’avait aucune réponse unique à « qui est inscrit à cette cohorte ? », et la finance passait une semaine entière chaque mois à relancer les paiements manquants et à les rapprocher de noms qui ne concordaient pas tout à fait d’un système à l’autre.
La demande semblait simple : tout remplacer par un seul système d’information étudiant (SIS) où un prospect pourrait découvrir un cours sur une page marketing publique, s’inscrire à une cohorte précise, payer ses frais de scolarité en ligne, consulter son horaire et son historique de paiements dans un portail en libre-service — et où un administrateur pourrait créer cohortes, cours, coupons, candidats et pièces jointes depuis un seul tableau de bord, sans feuilles de calcul parallèles ni travail de rapprochement en fin de mois.
Notre solution
Nous avons construit un SIS unique et sur mesure en trois volets coordonnés : un catalogue de cours public en Next.js, un portail étudiant d’inscription + frais de scolarité, et une console d’administration Django + Django REST Framework — le tout adossé à PostgreSQL et à une intégration Stripe Payments + Webhooks qui fait du SIS la source de vérité unique pour chaque dollar.
Le site public propose un catalogue Next.js rapide et optimisé pour le SEO : chaque cours a sa propre page de détail indexable, son calendrier de cohortes, ses prérequis, sa ventilation des frais de scolarité et un CTA « Enrol now » intégré — le site marketing est ainsi aussi le haut de l’entonnoir d’inscription, et non une brochure distincte. Dès qu’un prospect clique, il arrive dans une session Stripe Checkout créée côté serveur avec le bon montant, la bonne devise, le bon coupon et l’identifiant de cohorte intégrés aux métadonnées.
En cas de paiement réussi, un webhook Stripe arrive sur l’API Django et crée ou met à jour l’étudiant de façon idempotente, le rattache à la cohorte choisie, joint le reçu et envoie un e-mail de confirmation — le tout dans une seule transaction signée. Le portail de l’étudiant expose alors « My Courses », « My Schedule », « My Tuition » (avec l’historique complet des paiements et remboursements) et un onglet de documents pour les relevés de notes, pièces d’identité et ententes signées.
La console d’administration Django donne au registraire un seul endroit pour piloter tout le programme : créer une cohorte, y associer cours et professeurs, définir des codes de coupon (en pourcentage ou montant fixe, limités à une cohorte ou à un cours), téléverser des dossiers de candidats et des pièces jointes, diffuser des annonces et extraire des rapports d’inscriptions et de revenus sans jamais ouvrir Excel. Les rôles séparent registraire, finance, professeurs et administrateurs afin que chacun ne voie que l’interface dont il a besoin.
Enfin, nous avons câblé les webhooks Stripe de façon idempotente, verrouillé les enregistrements de frais de scolarité par somme de contrôle afin que la finance puisse prouver que le SIS et Stripe concordent, instrumenté chaque point de terminaison avec Sentry + CloudWatch, et stocké chaque PDF signé / pièce d’identité téléversé dans S3 avec des URL signées à durée limitée (sans accès direct aux objets).
- Catalogue de cours Next.js public et optimisé SEO avec une page indexable par cours, un calendrier de cohortes et un CTA « Enrol now » intégré
- Sessions Stripe Checkout créées côté serveur avec l’identifiant de cohorte, le code de coupon, la devise et la ventilation des frais de scolarité intégrés aux métadonnées
- Webhooks Stripe idempotents — étudiant, lien vers la cohorte, ligne de frais de scolarité et e-mail de reçu écrits en une seule transaction signée
- Portail étudiant avec My Courses, My Schedule, My Tuition (historique complet des paiements et remboursements) et téléversement de documents
- Console d’administration Django : cohortes, cours, coupons (en pourcentage ou montant fixe, limités à une cohorte ou à un cours), candidats, pièces jointes, annonces
- Accès séparé par rôle pour le registraire, la finance, les professeurs et les administrateurs — chaque utilisateur ne voit que l’interface qu’il utilise réellement
- Rapprochement des frais de scolarité par somme de contrôle pour que la finance puisse prouver à tout moment que le SIS et Stripe concordent, sans ouvrir Excel
- S3 + URL signées à durée limitée pour chaque relevé de notes, pièce d’identité et entente signée — aucun accès direct aux objets