Skip to content

Ajustes

Ruta: /teacher/settings · Atajo: g j · Sidebar: Ajustes

Configuracion del profesor organizada en tabs: General, Apariencia, Integraciones, Notificaciones, Privacidad, Disponibilidad, Politicas de cancelacion, Documentos legales y Contratos.

Settings page
  • Desktop: Sidebar izquierdo sticky (w-40) con tabs verticales + indicador de borde derecho
  • Movil: Dropdown select para cambiar entre tabs

Configuracion basica de la cuenta:

Inicio de semana:

  • Toggle de 2 opciones: Lunes (default) / Domingo
  • Se guarda en teachers.weekStartDay (INTEGER: 0=Domingo, 1=Lunes) via PATCH /teacher/settings/scheduling
  • Afecta la vista semanal del calendario, el reschedule sheet y la action sheet
  • Tambien configurable desde el icono de configuracion (engranaje) en la pagina del Calendario

Moneda predeterminada:

  • Selector dropdown con 19 monedas comunes (EUR, USD, GBP, BRL, MXN, COP, ARS, CLP, PEN, etc.)
  • Default: EUR
  • Se guarda en teachers.defaultCurrency via PATCH /teacher/settings/scheduling
  • Usado por el dashboard para formatear ingresos y precios

KPIs del dashboard:

  • Grid de 8 botones toggle (2 columnas) con icono + label para cada metrica disponible
  • El profesor selecciona exactamente 4. Los no seleccionados se deshabilitan cuando hay 4 activos
  • Metricas disponibles: month_revenue, month_lessons, active_students, attendance_rate, pending_revenue, teaching_streak, new_students, completed_sessions
  • Default: las primeras 4 (ingresos, clases, alumnos activos, asistencia)
  • Boton “Guardar” aparece solo cuando la seleccion difiere de la guardada y hay exactamente 4
  • Se guarda en teachers.dashboardConfig (JSONB) via PATCH /teacher/settings/dashboard
  • Invalida queries ['teacher', 'settings'] y ['teacher-dashboard-summary']

Personalizacion de colores de la plataforma. El profesor define un color primario y un color secundario, y el sistema genera automaticamente:

  • Paletas completas de 11 tonos (50–950) para ambos colores usando manipulacion HSL
  • Variantes de dark mode con escala invertida
  • Colores de contraste (texto blanco/oscuro) segun WCAG 2.1

Color pickers:

  • Input nativo type="color" + campo hex manual + 12 colores preset
  • Validacion hex: ^#[0-9a-fA-F]{6}$
  • Presets: naranja, orange, rojo, rosa, violeta, indigo, azul, sky, teal, verde, lima, gris

Preview en tiempo real:

  • La paleta generada se muestra con los 11 tonos en barra horizontal
  • Componentes de ejemplo: boton primario, boton outline, badge, ring de foco
  • Los colores se aplican en vivo mientras el profesor los selecciona (sin guardar)

Persistencia:

  • Colores guardados en teachers.brandColors (JSONB: { primary: "#hex", secondary: "#hex" })
  • Se cargan al iniciar la app via GET /auth/me → campo brandColors en la respuesta
  • Inyectados como CSS custom properties (--color-primary-*, --color-secondary-*, --color-ring) via <style> en <head>
  • Boton “Restaurar colores” elimina la personalizacion (vuelve a defaults: naranja #ffab1a + indigo #6366f1)

Alcance de los colores:

  • Primario → botones, enlaces, sidebar activo, badges, progress bars, seleccion de tabs
  • Secundario → ring de foco, accent colors, badges secundarios
  • Afecta toda la plataforma del profesor automaticamente gracias a las CSS custom properties de Tailwind

Archivos clave del sistema de theming:

ArchivoProposito
apps/app/src/lib/brand-colors.tsGenerador de paletas HSL, contraste WCAG, CSS vars
apps/app/src/hooks/use-brand-theme.tsHook que inyecta <style> con las variables
apps/app/src/routes/teacher.tsxPunto de montaje de useBrandTheme() en el layout
apps/app/src/styles/globals.cssVariables CSS default (primary naranja, secondary indigo)

Grid de 3 tarjetas de integracion:

Google Calendar:

  • Emoji calendario + punto de estado (verde si conectado)
  • Estado de conexion + conteo de calendarios sincronizados
  • Boton “Conectar” → redirect OAuth Google

Stripe:

  • Emoji tarjeta + punto de estado
  • Estado de conexion
  • Boton “Conectar” → redirect Stripe Connect OAuth
  • Boton “Refrescar” estado

Google Drive:

  • Emoji carpeta + punto de estado
  • Estado de conexion
  • Si habilitado: estado de carpeta, stats de copias (copiados/pendientes), link directo a Drive
  • Botones habilitar/deshabilitar auto-copy

Coming Soon: Zoom, WhatsApp (tarjetas deshabilitadas con borde discontinuo)

Selector de calendarios Google:

  • Componente GoogleCalendarSelector dentro de la tarjeta de Google Calendar
  • Lista de calendarios de lectura con checkboxes (cuales se sincronizan para disponibilidad)
  • Selector de calendario de escritura con radio buttons (donde se crean los eventos)
  • Boton “Guardar” llama a PATCH /teacher/settings/google/calendars
  • Solo visible cuando Google Calendar esta conectado

7 toggles de notificacion con persistencia real:

ToggleDefault
Nueva reservatrue
Reserva confirmadatrue
Reserva canceladatrue
Recordatorio antes de sesiontrue
Pago recibidotrue
Creditos por expirartrue
Reporte semanalfalse
  • Estado inicial cargado via GET /teacher/settings (campo notificationPreferences JSONB)
  • Deteccion de cambios (hasChanges) — el boton “Guardar” solo aparece cuando hay cambios pendientes
  • Boton “Guardar” llama a PATCH /teacher/settings/notifications
  • Preferencias almacenadas en teachers.notificationPreferences (JSONB, migration 0057)

Exportar datos:

  • Boton “Descargar datos” → genera JSON con todos los datos del profesor
  • Archivo: pinteach-data-export-YYYY-MM-DD.json

Eliminar cuenta:

  • Seccion con borde rojo y fondo destructive
  • Flujo de 2 pasos: click → confirmacion
  • DELETE /api/teacher/privacy/delete-account
  • Redirect a /login despues de eliminar

UI completa para gestionar schedules de disponibilidad directamente desde Ajustes:

  • Lista de schedules con toggle activar/desactivar
  • Crear, renombrar, duplicar y eliminar schedules
  • Editor de reglas por dia de la semana (hora inicio/fin, multiple reglas por dia)
  • Activaciones por rango de fechas con calendar picker
  • Equivalente funcional al selector de schedules en el Calendario

Editor visual de politicas de cancelacion por servicio:

  • Lista de politicas existentes con el servicio asociado
  • Badge “Default” para la politica de cancelacion predeterminada del profesor
  • Formulario CRUD de reglas (JSONB rules): condicion + accion + descripcion
  • 4 plantillas predefinidas: individual_relaxed, group_strict, course_no_refund, subscription_flexible
  • Boton “Crear desde plantilla” carga la configuracion del preset seleccionado
  • Toggle “Establecer como default” (unica default por profesor)

Gestion de documentos legales (contratos, politicas, terminos) enviables a alumnos:

  • Lista de documentos con tipo (contract/policy/terms/privacy), version y estado
  • Crear y editar documentos con editor Markdown
  • Reordenar documentos via drag-and-drop
  • Vista previa del documento antes de publicar
  • Historial de versiones por documento

Gestion de contratos para alumnos:

  • Lista de contratos activos por alumno
  • Estado de aceptacion (firmado/pendiente/expirado)
  • Reasignar contrato a alumno
  • Historial de aceptaciones con timestamp

FeatureDescripcionEstadoImplementado
Configuracion de pagos avanzadaNo hay gestion de metodos de pago ni facturas. La moneda predeterminada ya se puede configurar en la tab General. El resto se maneja via Stripe Dashboard externoAplazado
Integracion Zoom/WhatsAppMarcadas como “Coming Soon” pero sin fecha ni prioridad definidaAplazado

BugDescripcionEstadoCorregido
Slug check no bloquea guardadoLa verificacion de disponibilidad del slug era advisory (hint visual) pero no bloqueaba el submit. Ahora bloquea el submit si retorna available: falseBatch 3

MejoraDescripcionDificultadEstadoImplementado
Stripe Customer PortalLink directo al Stripe Customer Portal para gestion avanzada de pagos, facturas y metodos de pagoMedioImplementado ✅
Unificar sub-rutas de settingsLas tabs de Disponibilidad, Politicas de cancelacion, Documentos legales y Contratos ya son accesibles desde AjustesMedioBatch 3
UI de politicas de cancelacionEditor visual con plantillas predefinidasMedioBatch 3

ArchivoProposito
apps/app/src/routes/teacher/settings.lazy.tsxPagina completa con 9 tabs
apps/api/src/services/teacher/settings-service.tsServicio de settings
apps/api/src/routes/teacher/settings.tsRutas HTTP principales
apps/app/src/lib/brand-colors.tsGenerador de paletas HSL + contraste WCAG
apps/app/src/hooks/use-brand-theme.tsHook de inyeccion de CSS variables
EndpointMetodoProposito
/teacher/settingsGETSettings completos
/teacher/settings/profilePATCHActualizar perfil (slug, name, bio, tz)
/teacher/settings/schedulingPATCHActualizar scheduling + general (defaultCurrency, buffer, etc.)
/teacher/settings/dashboardPATCHActualizar dashboard KPIs config. Body: { kpis: string[4] }
/teacher/settings/notificationsPATCHActualizar preferencias de notificacion. Body: JSONB de toggles
/teacher/settings/brand-colorsPATCHActualizar colores de marca. Body: { primary: "#hex", secondary: "#hex" }
/teacher/settings/brand-colorsDELETERestaurar colores a los valores predeterminados
/teacher/settings/slug-checkGETVerificar disponibilidad de slug
/teacher/settings/stripe/connectPOSTURL de OAuth Stripe
/teacher/settings/stripe/statusGETEstado de conexion Stripe
/teacher/settings/drive/enablePOSTHabilitar auto-copy Drive
/teacher/settings/drive/disablePOSTDeshabilitar auto-copy
/teacher/settings/drive/statusGETEstado Drive + stats
/teacher/privacy/export-dataPOSTExportar datos profesor
/teacher/privacy/delete-accountDELETEEliminar cuenta
PrefijoProposito
/teacher/settings/google/calendarsCalendarios Google (GET + PATCH, UI en tab Integraciones)
/teacher/settings/driveConfiguracion Drive
/teacher/settings/availabilityDisponibilidad
/teacher/settings/stripeStripe Connect
/teacher/settings/policiesPoliticas de cancelacion
/teacher/settings/contractsContratos
/teacher/settings/legal-documentsDocumentos legales