El reto
Hart College gestionaba las admisiones en un sitio web de marketing público, el registro de cursos en una hoja de cálculo aparte, el cobro de matrículas por cheque y transferencia electrónica, y la comunicación con los estudiantes a través de una bandeja de entrada compartida. Nada cuadraba. Los administradores volvían a introducir cada nuevo estudiante en tres lugares, el registro académico no tenía una respuesta única a '¿quién está inscrito en esta convocatoria?', y finanzas gastaba una semana completa cada mes persiguiendo pagos pendientes y cotejándolos con nombres que no coincidían del todo entre sistemas.
El encargo era engañosamente simple: reemplazar todo con un único Sistema de Información Estudiantil (SIS) donde un prospecto pudiera descubrir un curso en una página de marketing pública, inscribirse en una convocatoria concreta, pagar la matrícula en línea y consultar su horario e historial de pagos en un portal de autoservicio — y donde un administrador pudiera crear grupos, cursos, cupones, candidatos y adjuntos desde un único panel, sin hojas de cálculo paralelas ni trabajo de conciliación a fin de mes.
Nuestra solución
Construimos un único SIS a medida en tres superficies coordinadas: un catálogo público de cursos en Next.js, un portal de inscripción y matrícula para estudiantes, y una consola de administración con Django + Django REST Framework — todo respaldado por PostgreSQL y una integración de Stripe Payments + Webhooks que mantiene al SIS como la única fuente de verdad de cada dólar.
El sitio público ofrece un catálogo en Next.js rápido y optimizado para SEO: cada curso tiene su propia página de detalle indexable, calendario de convocatorias, requisitos previos, desglose de matrícula y un CTA 'Inscribirse ahora' integrado — de modo que el sitio de marketing es también la parte superior del embudo de inscripción, no un folleto aparte. Cuando el prospecto hace clic, llega a una sesión de Stripe Checkout creada en el servidor con el importe, la moneda, el cupón y el ID de la convocatoria correctos incluidos en los metadatos.
Cuando el pago se realiza con éxito, un webhook de Stripe llega a la API de Django y, de forma idempotente, crea o actualiza al estudiante, lo vincula al grupo elegido, adjunta el recibo y envía el correo de confirmación — todo en una única transacción firmada. El portal del estudiante muestra entonces 'Mis cursos', 'Mi horario', 'Mi matrícula' (con historial completo de pagos y reembolsos) y una pestaña de documentos para expedientes, identificaciones y acuerdos firmados.
La consola de administración de Django ofrece al registro académico un único lugar desde el que gestionar todo el programa: crear un grupo, asociar cursos y profesorado, definir códigos de cupón (porcentuales o fijos, por convocatoria o por curso), cargar registros de candidatos y adjuntos, publicar anuncios y obtener informes de inscripción e ingresos sin abrir nunca Excel. Los roles separan registro, finanzas, profesorado y administración, de modo que cada usuario solo ve la superficie que necesita.
Por último, conectamos los webhooks de Stripe de forma idempotente, bloqueamos los registros de matrícula con una suma de verificación para que finanzas pueda demostrar que el SIS y Stripe coinciden, instrumentamos cada endpoint con Sentry + CloudWatch y almacenamos cada PDF firmado y cada identificación subida en S3 con URL firmadas de duración limitada (sin acceso directo a los objetos).
- Catálogo público de cursos en Next.js optimizado para SEO, con una página indexable por curso, calendario de convocatorias y CTA 'Inscribirse ahora' integrado
- Sesiones de Stripe Checkout creadas en el servidor con el ID de convocatoria, el código de cupón, la moneda y el desglose de matrícula incluidos en los metadatos
- Webhooks de Stripe idempotentes — estudiante, vínculo con el grupo, fila de matrícula y correo del recibo, todo escrito en una única transacción firmada
- Portal del estudiante con Mis cursos, Mi horario, Mi matrícula (historial completo de pagos y reembolsos) y carga de documentos
- Consola de administración de Django: grupos, cursos, cupones (porcentuales o fijos, por convocatoria o curso), candidatos, adjuntos, anuncios
- Acceso por roles para registro, finanzas, profesorado y administración — cada usuario solo ve la superficie que realmente usa
- Conciliación de matrículas con suma de verificación para que finanzas pueda demostrar en cualquier momento que el SIS y Stripe coinciden, sin abrir Excel
- S3 + URL firmadas de duración limitada para cada expediente, identificación y acuerdo firmado — sin acceso directo a los objetos