Fallstudie · Hart College

Individuelles Student Information System (SIS) für ein kanadisches Berufskolleg – Kurskatalog, Einschreibung mit mehreren Aufnahmeterminen, Stripe-Studiengebühren & Gutschein-gesteuerte Administration (Next.js + Django + PostgreSQL)

Wie UnlockLive drei unverbundene Tools und ein gemeinsames Postfach durch ein einziges individuelles Student Information System für ein kanadisches Berufskolleg ersetzt hat – einen öffentlichen Next.js-Kurskatalog, ein Studierendenportal für Einschreibung und Stripe-Studiengebühren sowie eine Django-Admin-Konsole für Kurstermine, Kurse, Gutscheine, Bewerber und Dokumentenanhänge. Ergebnis: 100 % der Studiengebühren werden online eingezogen, die Einschreibung ist 5-mal schneller, und es gibt keine Abstimmungstabellen mehr.

  • BrancheHochschulbildung / Berufskolleg-SaaS
  • Jahr2024
  • LandKanada
  • Dauer5 Monate
Custom Student Information System (SIS) for a Canadian Career College — Course Catalog, Multi-Intake Enrolment, Stripe Tuition & Coupon-Driven Admin (Next.js + Django + PostgreSQL) hero screenshot

Ergebnisse auf einen Blick

  • 100%Der Studiengebühren werden nun online über Stripe eingezogen (keine Schecks / E-Transfers)
  • 5xSchnellerer Einschreibungs-Workflow gegenüber der Baseline aus Tabellen und Posteingang
  • 0Abstimmungstabellen zum Monatsende (das SIS ist die einheitliche Datenquelle)
  • 5Monate von der Discovery bis zur ersten Live-Aufnahme im neuen SIS

Die Herausforderung

Das Hart College wickelte die Zulassung über eine öffentliche Marketing-Website ab, die Kursanmeldung über eine separate Tabelle, den Einzug der Studiengebühren per Scheck und E-Transfer und die Kommunikation mit Studierenden über ein gemeinsames Postfach. Nichts ließ sich abgleichen. Administratoren erfassten jeden neuen Studierenden in drei Systemen neu, das Studierendensekretariat hatte keine einheitliche Antwort auf die Frage „Wer ist in diesem Durchgang eingeschrieben?“, und die Finanzabteilung verbrachte jeden Monat eine ganze Woche damit, fehlenden Zahlungen nachzujagen und sie mit Namen abzugleichen, die über die Systeme hinweg nicht ganz übereinstimmten.

Die Aufgabe klang trügerisch einfach: alles durch ein einziges Student Information System (SIS) zu ersetzen, in dem ein Interessent auf einer öffentlichen Marketing-Seite einen Kurs entdecken, sich für einen bestimmten Durchgang einschreiben, die Studiengebühren online bezahlen und in einem Self-Service-Portal seinen Stundenplan und Zahlungsverlauf einsehen kann – und in dem ein Administrator Kurstermine, Kurse, Gutscheine, Bewerber und Anhänge in einem einzigen Dashboard anlegen kann, ohne Parallel-Tabellen und ohne Abstimmungsarbeit zum Monatsende.

Unsere Lösung

Wir haben ein einziges individuelles SIS in drei aufeinander abgestimmten Oberflächen gebaut: einen öffentlichen Next.js-Kurskatalog, ein Studierendenportal für Einschreibung und Studiengebühren sowie eine Django- + Django-REST-Framework-Admin-Konsole – alles gestützt auf PostgreSQL und eine Stripe-Payments- und Webhooks-Integration, die das SIS zur einzigen maßgeblichen Quelle für jeden Dollar macht.

Die öffentliche Website liefert einen schnellen, SEO-optimierten Next.js-Katalog: Jeder Kurs hat eine eigene indexierbare Detailseite, einen Terminplan, Voraussetzungen, eine Aufschlüsselung der Studiengebühren und einen eingebetteten CTA „Jetzt einschreiben“ – die Marketing-Website ist damit zugleich der Beginn des Einschreibe-Funnels und keine separate Broschüre. Sobald ein Interessent weiterklickt, landet er in einer serverseitig erstellten Stripe-Checkout-Sitzung, in deren Metadaten der richtige Betrag, die Währung, der Gutschein und die Durchgangs-ID hinterlegt sind.

Nach erfolgreicher Zahlung trifft ein Stripe-Webhook bei der Django-API ein, legt den Studierenden idempotent an oder aktualisiert ihn, verknüpft ihn mit dem gewählten Kurstermin, hängt die Quittung an und versendet die Bestätigung per E-Mail – alles in einer einzigen signierten Transaktion. Das Portal des Studierenden zeigt anschließend „Meine Kurse“, „Mein Stundenplan“, „Meine Studiengebühren“ (mit vollständigem Zahlungs- und Erstattungsverlauf) und einen Dokumente-Tab für Zeugnisse, Ausweis und unterzeichnete Vereinbarungen.

Die Django-Admin-Konsole gibt dem Studierendensekretariat einen zentralen Ort für das gesamte Programm: einen Kurstermin anlegen, Kurse und Dozenten zuordnen, Gutscheincodes definieren (prozentual oder pauschal, je Durchgang oder Kurs), Bewerberdaten und Anhänge hochladen, Ankündigungen versenden sowie Einschreibe- und Umsatzberichte abrufen, ohne jemals Excel zu öffnen. Rollen trennen Sekretariat, Finanzen, Dozenten und Administration, sodass jeder Nutzer nur die Oberfläche sieht, die er braucht.

Schließlich haben wir Stripe-Webhooks idempotent angebunden, Studiengebühren-Datensätze per Prüfsumme abgesichert, damit die Finanzabteilung belegen kann, dass SIS und Stripe übereinstimmen, jeden Endpunkt mit Sentry + CloudWatch instrumentiert und jedes signierte PDF bzw. jeden Ausweis-Upload in S3 mit zeitlich begrenzten signierten URLs gespeichert (kein direkter Objektzugriff).

  • Öffentlicher, SEO-optimierter Next.js-Kurskatalog mit einer indexierbaren Seite pro Kurs, Terminplan und eingebettetem CTA „Jetzt einschreiben“
  • Serverseitig erstellte Stripe-Checkout-Sitzungen mit Durchgangs-ID, Gutscheincode, Währung und Gebührenaufschlüsselung in den Metadaten
  • Idempotente Stripe-Webhooks – Studierender, Verknüpfung mit dem Kurstermin, Gebührenzeile und Quittungs-E-Mail werden in einer signierten Transaktion geschrieben
  • Studierendenportal mit Meinen Kursen, Meinem Stundenplan, Meinen Studiengebühren (vollständiger Zahlungs- und Erstattungsverlauf) und Dokumenten-Uploads
  • Django-Admin-Konsole: Kurstermine, Kurse, Gutscheine (prozentual oder pauschal, je Durchgang oder Kurs), Bewerber, Anhänge, Ankündigungen
  • Rollengetrennter Zugriff für Sekretariat, Finanzen, Dozenten und Administration – jeder Nutzer sieht nur die Oberfläche, die er tatsächlich verwendet
  • Abstimmung der Studiengebühren per Prüfsumme, damit die Finanzabteilung jederzeit belegen kann, dass SIS und Stripe übereinstimmen – ohne Excel zu öffnen
  • S3 + signierte, zeitlich begrenzte URLs für jedes Zeugnis, jeden Ausweis und jede unterzeichnete Vereinbarung – kein direkter Objektzugriff

Wie wir es gebaut haben

  1. 01

    Discovery, Begleitung der Registrierungsstelle, Datenmodell mit Berücksichtigung der Aufnahmetermine

    Wir saßen eine Woche lang mit den Teams des Studienbüros und der Finanzabteilung zusammen und erfassten jede Stelle, an der ein Studierendendatensatz angelegt, bearbeitet oder bezahlt wurde – auf der Marketing-Website, in der Anmeldetabelle, bei der Bank, im E-Mail-Postfach und auf dem gemeinsamen Laufwerk. Daraus entstand ein aufnahmebezogenes Datenmodell mit den vollwertigen Konzepten `Batch`, `Course`, `Coupon`, `Candidate` und `Tuition` – anstatt den Studierendenstatus an ein generisches CRM anzuflanschen.

  2. 02

    Öffentlicher Next.js-Katalog + Studierendenportal + Stripe-first-Checkout

    Wir haben einen schnellen, SEO-optimierten öffentlichen Next.js-Katalog mit einer indexierbaren Seite pro Kurs geliefert, dazu Inline-CTAs „Jetzt anmelden“, die an eine serverseitig erzeugte Stripe-Checkout-Session mit eingebetteten Aufnahme- und Gutschein-Metadaten übergeben. Das Studierendenportal zeigt anschließend Stundenplan, Zahlungsverlauf, Belege und Dokumenten-Uploads. Die Marketing-Website ist der Funnel, keine Broschüre.

  3. 03

    Django-Admin-Konsole + idempotente Stripe-Webhooks

    Auf der Betriebsseite haben wir ein Django- + Django-REST-Framework-Admin-Backend geliefert: CRUD für Jahrgänge, Kurse, Gutscheine, Bewerber und Anhänge, Rollentrennung zwischen Studienbüro, Finanzen, Dozenten und Admin sowie eine Oberfläche für Einschreibe- und Umsatzberichte. Stripe-Webhooks landen idempotent in einem einzigen Django-Endpunkt, der den Studierenden anlegt bzw. aktualisiert, ihn dem richtigen Jahrgang zuordnet, die Studiengebühren-Zeile schreibt und die Bestätigung per E-Mail versendet – alles in einer signierten Transaktion.

  4. 04

    Abstimmung, S3, Observability, Übergabe

    Wir haben Studiengebührenzeilen gegen eine Prüfsumme gesichert, damit die Finanzabteilung jederzeit nachweisen kann, dass SIS und Stripe übereinstimmen, jedes signierte PDF und jeden ID-Upload in S3 mit zeitlich begrenzten signierten URLs gespeichert und jeden Endpunkt mit Sentry und CloudWatch instrumentiert. Das Sekretariat erhielt ein Runbook zum Eröffnen eines neuen Jahrgangs, Ausstellen eines Gutscheins, Erstatten einer Studiengebühr und Exportieren eines Einschreibungsberichts – und wir blieben für Erweiterungen per Retainer an Bord.

Tech-Stack

  • Next.js (React)
  • Django
  • Django REST Framework
  • PostgreSQL
  • Stripe Payments + Webhooks
  • AWS S3 (Dokumentenspeicher)
  • Sentry + CloudWatch
  • Docker
  • Individuelle Softwareentwicklung
  • SaaS-Engineering für den Hochschulbereich
  • Stripe-Zahlungsintegration
  • UI/UX-Design
  • DevOps und Observability

Häufig gestellte Fragen

Wie gleichen Sie Studiengebührenzahlungen ab, wenn ein Stripe-Webhook doppelt oder in falscher Reihenfolge eintrifft?

Zwei Sicherungen. (1) Der Webhook-Handler ist idempotent: Jede Stripe-`event.id` wird vor jedem Schreibzugriff mit einer Tabelle `processed_webhooks` abgeglichen, sodass eine Wiederholung wirkungslos bleibt. (2) Jede Studiengebühren-Zeile speichert eine Prüfsumme, die aus `(student_id, batch_id, amount, currency, coupon_code, stripe_payment_intent)` abgeleitet wird. Die Finanzabteilung kann jederzeit mit einer einzeiligen Abstimmungsabfrage belegen, dass SIS-Zeilen und Stripe-Abbuchungen übereinstimmen – ohne Excel, ohne manuelles Zuordnen, ohne Panik zum Monatsende.

Wie werden Einschreibungen mit mehreren Aufnahmeterminen im SIS modelliert?

Wir behandeln `Batch` als vollwertige Entität, nicht als Tag an einem Studierenden. Ein Batch hat ein eigenes Startdatum, eine Kapazität, Kurse und Dozentenzuordnungen. Ein Studierender gehört zu einem oder mehreren Batches; ein Gutschein kann pro Aufnahme oder pro Kurs begrenzt werden; Berichte lassen sich mit einem Klick nach Batch filtern. Das ist der Unterschied zwischen „einem CRM mit Aufnahmefeld“ und einem echten SIS – und der Grund, warum das Sekretariat keine parallele Tabelle mehr führt.

Lässt sich die Plattform auf andere Berufskollegs oder Weiterbildungsanbieter ausweiten?

Ja. Das Datenmodell ist institutionsunabhängig – `Batch`, `Course`, `Coupon`, `Candidate`, `Attachment` und `Tuition` sind nicht Hart-spezifisch. Eine zweite Institution lässt sich einbinden, indem das Next.js-Frontend neu gestaltet und ein neues Stripe-Konto eingerichtet wird; das Django-Admin-Backend und das zugrunde liegende Schema sind wiederverwendbar. Wir haben es so ausgelegt, dass die Erweiterung auf K-12, berufliche Bildung und Weiterbildungsprogramme eine Konfigurationsänderung ist, kein Neuaufbau.

Wie lange hat der Aufbau des Hart-College-SIS gedauert, und wie war das Team aufgestellt?

Fünf Monate von Anfang bis Ende mit einem vierköpfigen Team (1 Produkt/PM, 2 Full-Stack-Entwickler, 1 Designer). Grob: 3 Wochen Discovery und Hospitation bei der Studienverwaltung; 12 Wochen für Django-REST-API + öffentlichen Next.js-Katalog + Studierendenportal + Admin-Konsole; 3 Wochen für Stripe-Webhook-Härtung, S3-Anhänge, Observability und Schulung der Studienverwaltung; 2 Wochen Pilot-Aufnahme, bevor die nächste reguläre Aufnahme über das neue SIS eröffnet wurde.

Welcher Stack treibt das Studierendeninformationssystem des Hart College an?

Eine öffentliche Next.js-(React-)Website und Portale für Studierende und Admins, eine Django- + Django-REST-Framework-API, PostgreSQL für transaktionale Daten, Stripe Payments + Webhooks für Studiengebühren, AWS S3 für Dokumentenanhänge sowie Sentry + CloudWatch für die Observability – alles mit Docker containerisiert und per Infrastructure-as-Code bereitgestellt.

Möchten Sie ein solches Ergebnis?

Sprechen Sie mit demselben Team, das gebaut hat Individuelles Student Information System (SIS) für ein kanadisches Berufskolleg – Kurskatalog, Einschreibung mit mehreren Aufnahmeterminen, Stripe-Studiengebühren & Gutschein-gesteuerte Administration (Next.js + Django + PostgreSQL). Wir grenzen Ihr Projekt ein, erstellen ein Festpreisangebot und zeigen Ihnen das passendste Beispiel aus unserem Portfolio.

Strategiegespräch buchen