Paquetes
Ruta: /student/packages · Auth: Magic link (alumno)
Pagina de compra de servicios del profesor. Muestra los paquetes disponibles con precios y redirige a Stripe Checkout para el pago.
Que hay
Section titled “Que hay”Grid de servicios
Section titled “Grid de servicios”Grid responsive (3 columnas lg, 2 sm, 1 movil) con tarjetas de servicio:
- Nombre del servicio
- Numero de creditos
- Dias de validez (si aplica)
- Precio grande + desglose por clase (ej: “$19.80 por clase”)
- Boton CTA
Flujo de compra:
- Servicios de pago: Click en CTA →
POST /student/enrollments→ redirect a Stripe Checkout → retorno al portal - Servicios gratuitos: Click en CTA → enrollment creado inmediatamente → toast de exito
Formatos de precio:
- Usa
Intl.NumberFormatcon la moneda del servicio - Desglose por clase: precio / creditos
Estados especiales:
- Loading: 3 tarjetas skeleton
- Vacio: Icono de paquete + “No hay paquetes disponibles”
- Impersonacion: Aviso ambar + boton deshabilitado
Que falta
Section titled “Que falta”| Feature | Descripcion | Estado | Implementado |
|---|---|---|---|
| Descripciones completas | Las tarjetas de servicio ahora incluyen headline y description completa del servicio con detalles de que incluye | ✅ | Batch 4 |
| Comparacion de precios | Desglose de precio por clase visible para facilitar la comparacion entre paquetes con diferentes cantidades de creditos | ✅ | Batch 4 |
| Mensajes de error diferenciados | Los errores como TRIAL_REQUIRED ahora incluyen enlace directo a la pagina de booking para hacer el trial | ✅ | Batch 4 |
| Codigos de descuento | Input para codigo de descuento en el flujo de compra. Validacion via API, precio tachado con precio final. Descuento server-side antes de Stripe (no Stripe Coupons). Soporte para porcentaje y monto fijo, limites de uso, fecha de vigencia | ✅ | Batch 4 |
| Gestion de suscripciones | La pagina es solo de compra. No hay gestion de suscripciones activas (cancelar, cambiar plan, ver facturas) | Implementado ✅ |
Que falla
Section titled “Que falla”| Bug | Descripcion | Estado | Corregido |
|---|---|---|---|
| Sin retry si Stripe redirect falla | Timeout de 10s via STRIPE_REDIRECT_TIMEOUT_MS resetea redirectingServiceId. Error handler tambien resetea estado inmediatamente | ✅ | Batch 5 |
| Error TRIAL_REQUIRED generico | Cuando se requeria trial previo, el error TRIAL_REQUIRED mostraba un mensaje especifico pero no enlazaba a la pagina de booking para hacer el trial | ✅ | Batch 4 |
Que cambiaria
Section titled “Que cambiaria”| Mejora | Descripcion | Dificultad | Estado | Implementado |
|---|---|---|---|---|
| Mostrar descripcion completa | Las tarjetas incluyen headline y description del servicio | Facil | ✅ | Batch 4 |
| Enlace a trial desde error | El error TRIAL_REQUIRED incluye link directo a la pagina de booking | Facil | ✅ | Batch 4 |
| Portal de suscripciones | Pagina para gestionar suscripciones activas: cancelar, ver historial de pagos, cambiar de plan. Usar Stripe Customer Portal | Medio | Implementado ✅ |
Referencia tecnica
Section titled “Referencia tecnica”Archivos clave
Section titled “Archivos clave”| Archivo | Proposito |
|---|---|
apps/web/src/routes/student/packages.lazy.tsx | Pagina de compra |
| Endpoint | Metodo | Proposito |
|---|---|---|
/student/teacher | GET | Info del profesor + servicios disponibles |
/student/enrollments | POST | Crear enrollment (retorna checkoutUrl si pago) |