Skip to content

Portal del alumno

Ruta: /student?tab=classes|book|shop|purchases|documents · Auth: Magic link (alumno)

El portal del alumno es una SPA single-page con 5 tabs accesibles via URL search param ?tab=. Cada tab es un componente React lazy-loaded (React.lazy + Suspense) para code-splitting. La ruta por defecto es ?tab=classes.

Las rutas legacy (/student/book, /student/packages) redirigen automaticamente al tab correspondiente.


┌─────────────────────────────────────────────┐
│ Logo · Nombre del alumno · Logout │
├─────────────────────────────────────────────┤
│ [Mis clases] [Reservar] [Tienda] [Compras] [Docs] │
├─────────────────────────────────────────────┤
│ │
│ <Suspense fallback> │
│ Tab content │
│ │
└─────────────────────────────────────────────┘
TabIDIconoComponenteArchivo
Mis clasesclassesCalendarTabClassestab-classes.tsx (968 lines)
ReservarbookBookOpenTabBooktab-book.tsx (704 lines)
TiendashopShoppingBagTabShoptab-shop.tsx (307 lines)
Mis compraspurchasesReceiptTabPurchasestab-purchases.tsx (393 lines)
DocumentosdocumentsShieldTabDocumentstab-documents.tsx (289 lines)
ArchivoProposito
shared-types.tsInterfaces: StudentMeData, Session, SessionDetail, LegalDoc, etc.
student-helpers.tsUtilities: moodEmojis, generateIcsContent, downloadIcs, getGreetingKey, relativeLabel, useCountdown, fmtDate
booking-calendar.tsxComponente BookingCalendar — grid semanal visual

Muestra las sesiones del alumno divididas en proximas y pasadas.

CardDatos
DisponiblesCreditos libres para reservar
ReservadosCreditos en sesiones programadas
ConsumidosCreditos de sesiones completadas

Si hay creditos por expirar, se muestra aviso ambar con la fecha mas proxima.

Tarjeta destacada con:

  • Bloque de fecha grande (dia, numero, mes) con fondo primary
  • Nombre del servicio, rango horario, duracion, etiqueta relativa (“Hoy”/“Manana”)
  • Countdown en tiempo real hasta la clase
  • Chips de recursos y homework vinculados
  • Acciones: Entrar a clase (icono video), reprogramar, cancelar, descargar .ics

Filas colapsables con bloque de fecha, expandibles para ver detalle:

  • URL de reunion, recursos, resumen, rating, mood, avatar del profesor

Badge con sesiones completadas, canceladas y tasa de consistencia.

Filas agrupadas por mes con busqueda y filtros por estado/fecha. Notas del profesor renderizadas con MarkdownPreview.

Para sesiones completadas:

  • Selector de mood dual: 5 emojis para student mood + teacher mood
  • Review prompt: Formulario inline que aparece automaticamente despues de enviar mood

Ver documentacion completa en Reservar clase.

Calendario semanal visual con los huecos libres del profesor. Auto-seleccion inteligente cuando solo hay un paquete/servicio disponible.


Ver documentacion completa en Tienda.

Grid de servicios disponibles con precios, codigos de descuento y checkout via Stripe.


Ver documentacion completa en Mis compras.

Historial de enrollments, gestion de suscripciones y acceso al billing portal de Stripe.


Ver documentacion completa en Documentos.

Documentos legales con historial de versiones firmadas y workflow de aceptacion.


ArchivoProposito
apps/app/src/routes/student/index.lazy.tsxContainer de tabs (lazy loading)
apps/app/src/routes/student/index.tsxRoute config con validateSearch para ?tab=
apps/app/src/routes/student.tsxLayout (header + outlet)
apps/app/src/components/student/tab-classes.tsxTab Mis clases
apps/app/src/components/student/tab-book.tsxTab Reservar
apps/app/src/components/student/tab-shop.tsxTab Tienda
apps/app/src/components/student/tab-purchases.tsxTab Mis compras
apps/app/src/components/student/tab-documents.tsxTab Documentos
apps/app/src/components/student/booking-calendar.tsxCalendario visual de reservas
apps/app/src/components/student/shared-types.tsTipos compartidos
apps/app/src/components/student/student-helpers.tsUtilidades compartidas
EndpointMetodoProposito
/student/meGETInfo del alumno + creditos
/student/sessionsGETLista de sesiones (filtros: from, to, status)
/student/sessions/:idGETDetalle de sesion
/student/sessions/:id/cancelPOSTCancelar sesion
/student/sessions/:id/moodPOSTEnviar mood
/student/sessions/:id/reviewPOSTEnviar review
/student/sessions/:id/reschedulePOSTReprogramar
/student/teacherGETInfo del profesor + servicios
/student/enrollmentsGET/POSTLista / crear enrollment
/student/preferred-hoursGET/PATCHPreferencias horarias
/student/sessionsPOSTReservar sesion
/student/sessions/batchPOSTReservar multiples sesiones
/student/legal-documentsGETDocumentos legales pendientes y firmados
/student/legal-documents/:id/acceptPOSTAceptar documento
/public/:slug/service-availabilityGETSlots disponibles
/public/:slug/validate-discountPOSTValidar codigo de descuento