UX/UI Case Study
ACADEMIA CHECK-IN

Administra, organiza y haz crecer
tu escuela de artes marciales, baile y más.

Diseñé y desarrollé una aplicación móvil para ayudar a maestros y administradores a gestionar alumnos, asistencias y pagos de forma sencilla, rápida y desde cualquier lugar.

Gestión de alumnos
Check-ins rápidos
Control de pagos
Crecimiento de la academia
Herramientas
Expo
Supabase
Figma
Mi Rol
Product Design
Dev
Dashboard — Hola Maestro Kim
Pantalla de inicio Academia Check-in
Pagos pendientes
Detalle de alumno Carlos Méndez
Resultados clave
~150 alumnos activos, uso diario 4 roles con permisos reales vía Row Level Security 14 pantallas diseñadas y llevadas a código, con estados vacíos y de error 1 incidente real en producción, diagnosticado y resuelto Free + Pro producto público, abierto a cualquier escuela

"Cada sensei lleva su propio Excel, y alguien tiene que juntarlo todo a mano."

Así describió el dueño del Dojang el problema en nuestra primera conversación. No llegó pidiendo una app: llegó describiendo una operación que ya había crecido más allá de lo que una hoja de cálculo por instructor podía sostener.

1 Excel
por sensei, cada uno con su propio formato para alumnos, asistencia, pagos y avance de cinta, sin ningún estándar entre instructores.
100%
del trabajo de consolidación era manual: la administración central tenía que pedir, revisar y juntar archivos de cada sensei antes de poder responder algo tan simple como "¿quién no ha pagado este mes?"
Control de alumnosExcel por sensei
Pagos y mensualidadesExcel por sensei
Asistencia a clasesLista en papel
Cintas y promocionesExcel por sensei
Exámenes y diplomasManual
Informes de rendimientoEl punto de dolor real

El síntoma que más le costaba a la administración central no era ningún proceso individual, era la recopilación: juntar seis fuentes distintas cada vez que necesitaban dar seguimiento a un caso particular o armar un informe de rendimiento por escuela.

La investigación no fue un ejercicio simulado — fue un cuestionario real, respondido por el dueño real del negocio.

No hubo entrevistas formales con múltiples usuarios ni sesiones de investigación de agencia. El discovery fue directo: un cuestionario estructurado que Leonel, dueño de IDAR, respondió describiendo cómo opera su escuela hoy. Sus respuestas, no mis suposiciones, definieron el alcance del sistema.

~150
alumnos activos repartidos entre 6 instructores: la escala real que tenía que soportar el sistema desde el primer día, no un caso de prueba hipotético.
4 roles
emergieron directamente de cómo Leonel describió su operación: él decide, administración cobra, los senseis dan clase, los auxiliares apoyan, cada uno con acceso distinto a la misma información.
¿Cómo prefieren llevar asistencia?→ QR, no lista en papel
¿Cómo cobran hoy la mensualidad?→ Tarifas fijas + recargo día 10
¿Necesitan factura fiscal ya?→ No, recibo simple es más urgente
¿Quién evalúa un examen de cinta?→ A veces alguien externo ("sinodal")

Ese último punto (un evaluador externo sin cuenta fija en el sistema) no habría aparecido en ningún benchmark de competidores. Solo apareció porque se le preguntó directamente al dueño cómo funciona su escuela en la práctica.

Cuatro personas reales, no arquetipos inventados.

No construí personas ficticias con biografías de agencia: construí perfiles a partir de necesidades reales que el sistema de roles y permisos tiene que resolver todos los días, verificadas directamente con el flujo de trabajo que describió el cliente.

Dueño — control total

  • Necesita ver ingresos agregados del mes, no solo pagos individuales
  • Es el único que puede dar de alta o quitar administración
  • Le urge un panorama semanal, no reportes que tenga que armar a mano

Administración — operación diaria

  • Cobra, marca pagos, manda recordatorios: necesita hacerlo rápido, entre clase y clase
  • No debe ver el total de ingresos agregado: ese dato es del dueño, no de su rol
  • Da de alta alumnos y crea grupos nuevos

Sensei — su grupo, nada más

  • Solo necesita ver a sus propios alumnos, no los de otro instructor
  • Le interesa saber quién debe, no gestionar el cobro directamente
  • Puede hacer check-in de su clase sin depender de administración

Auxiliar — apoyo operativo, acceso mínimo

  • Solo hace check-in: ni pagos ni alta de alumnos entran en su rol
  • Ve la lista de alumnos de su grupo para reconocerlos al escanear
  • El rol con menos superficie de acceso, a propósito

No se sistematiza todo a la vez — se sistematiza lo que más duele primero.

El problema completo (alumnos, pagos, clases, cintas, exámenes, diplomas, informes) era demasiado grande para atacarlo de un solo golpe sin arriesgar meses de desarrollo sin nada usable. Prioricé junto con el cliente los dos procesos que generaban más fricción diaria: el control de asistencia y el seguimiento de pagos. No por coincidencia, eran los que más tiempo le costaban a la administración central de consolidar a mano cada mes.

Primera fase del sistema

  • Alta de alumnos con datos de contacto del tutor
  • Check-in por código QR único por alumno, reemplaza la lista en papel
  • Dashboard con métricas del día en tiempo real
  • Módulo de pagos: detección automática de mensualidades vencidas
  • Recordatorio de pago vía WhatsApp con un toque
  • Cobro de mensualidad con recibo digital compartido por WhatsApp

Queda para siguientes fases

  • Sistema de cintas y promociones
  • Exámenes y generación de diplomas
  • Informes de rendimiento consolidados por escuela
  • Multi-sede con vista de administración central
  • Cuenta o login para los padres de familia

Dos roles, una fricción mínima.

La decisión de diseño más importante del proyecto: los padres de familia nunca instalan nada. Solo reciben un mensaje de WhatsApp con el comprobante. Toda la complejidad vive del lado del instructor.

01
Login del instructor
02
Dashboard con métricas del día
03
Alta de alumno
04
Check-in con QR
05
Módulo de pagos: detecta vencidos
06
Recordatorio WhatsApp con un toque
07
Cobro + recibo digital

De un prototipo funcional a un producto con identidad propia.

El primer MVP funcionaba perfecto, pero se veía como cualquier tutorial de React Native: azul de Material Design por default, sin tipografía jerárquica, sin iconografía. Definí un sistema de tokens real (color, tipografía, radios, espaciado) y lo apliqué de vuelta al código, pantalla por pantalla.

Antes / después del sistema de marca

Martes 15 de julio
Hola, Maestro Kim
CHECK-INS HOY
18
PAGOS PEND.
5
Registrar
Check-in

Mismo layout, mismos datos, mismo código base: solo cambia el sistema de tokens aplicado. La diferencia es la que separa un tutorial de un producto.

01 · Tokens de color
Marca
Morado principal
#6B3AC9
brand/purple
Morado medio
#A855F7
brand/purple-mid
Naranja acento
#F4721B
brand/orange
Azul institucional
#3947ED
brand/blue
Azul suave
#8B93F5
brand/blue-light
Morado tenue
#F3F2FF
brand/purple-tint
Feedback
Éxito
#15803D
feedback/success
Éxito tenue
#DCFCE7
feedback/success-tint
Error
#DC2626
feedback/error
Error tenue
#FEE2E2
feedback/error-tint
Neutrales
Blanco
#FFFFFF
surface/white
Fondo
#F9FAFB
surface/background
Borde
#E5E7EB
border/default
Texto secundario
#6B7280
text/soft
Texto primario
#111827
text/primary
Navy profundo
#0A2E52
surface/navy

Toca cualquier color para copiar su valor hex.

02 · Tipografía
Display / H1Plus Jakarta Sans · 800 · 44px
Academia Check-in
Heading / H2Plus Jakarta Sans · 800 · 40px
Sistema de diseño
Heading / H3Plus Jakarta Sans · 700 · 20px
Antes / después del sistema
Body / LargeInter · 400 · 17px
Gestiona alumnos, asistencias y pagos desde cualquier lugar.
Body / DefaultInter · 400 · 16px
Diseñé 14 pantallas incluyendo estados vacíos y de error.
Caption / LabelInter · 700 · 12px · caps
06 — Sistema de diseño
Mono / CodeJetBrains Mono · 400 · 13px
brand/purple · #6B3AC9
03 · Fundamentos
8pxSistema de espaciado base
4 colGrid móvil · 390px
14 pxRadio tarjetas
100pxRadio pill / badges
4Pesos tipográficos: 400 · 500 · 700 · 800

El prototipo no fue el final del proceso, fue el punto medio.

Diseñé 14 pantallas de alta fidelidad en Figma (incluyendo estados vacíos y de error, no solo el camino feliz) y las llevé directo a código: Expo (React Native) para la app, Supabase como backend con Row Level Security real, y un modelo de datos que creció de 3 tablas iniciales a 7 tablas relacionadas conforme el sistema de roles y el modelo de negocio se volvieron reales.

Dashboard de Academia Check-in mostrando check-ins del día, pagos pendientes y la lista de alumnos registrados

Dashboard: la pantalla que ve el instructor al abrir la app cada día.

Acceso
Bienvenida Onboarding Login Registro con selector de rol
Operación diaria
Dashboard Alta de alumno Lista de alumnos Perfil de alumno Menú lateral
Check-in: un flujo, tres estados
Escaneo Éxito Error
Casos límite (no solo el camino feliz)
Estado vacío Estado de error general
Frontend
Expo + React Native
Backend
Supabase (Postgres + RLS)
Diseño
Figma + tokens
Cámara / QR
expo-camera
Navegación
Expo Router
Documentos
expo-print + Sharing

Facturación CFDI sigue en el roadmap, pero no parte de cero: diseñé el portal de facturación CFDI de Salud Digna, así que entiendo el proceso de timbrado y los requisitos fiscales de primera mano. Para este piloto, sin embargo, el cliente pidió explícitamente algo más simple y urgente: ver más abajo.

Un fragmento real del componente de check-in, el estado de la máquina que gobierna las tres pantallas (escaneo, éxito, error) como un único flujo y no como pantallas sueltas:

type Resultado =   | { estado: 'escaneando' }   | { estado: 'procesando' }   | { estado: 'exito'; nombre: string; hora: string }   | { estado: 'error' };
// El QR se valida contra Supabase antes de registrar el check-in. // Nunca se confía en el contenido del código por sí solo.

De un número en el dashboard a una acción concreta.

"Pagos pendientes" ya existía como métrica desde el primer MVP, pero era solo un dato: no decía quién debía ni qué hacer al respecto. Este módulo lo convierte en una lista accionable: el sistema compara cada alumno contra los pagos registrados del mes actual y separa automáticamente quién está al día de quién no.

Pantalla de pagos pendientes con lista de alumnos, botones de Recordar por WhatsApp y Marcar pagado

La lista de "Pendientes" real. Cada fila se resuelve en un toque: recordar o marcar pagado.

Cómo detecta un pago vencido

  • Cada pago se guarda con un periodo: el mes que cubre, no solo la fecha en que se hizo
  • Al abrir la pantalla, compara la lista completa de alumnos contra los pagos con periodo = mes actual
  • Quien no tiene un pago registrado ese mes cae automáticamente en "Pendientes"

Decisión de alcance: envío manual, no automático

  • Automatizar el envío sin intervención humana requiere la API de negocio de WhatsApp (Twilio o Meta), con proceso de aprobación y costo
  • Fase 1: un toque abre WhatsApp con el mensaje ya redactado, cero fricción y cero dependencias externas
  • Fase 2 (siguiente iteración): automatización real programada a fin de mes y día 1

Al marcar un pago, el sistema genera un recibo en PDF con folio, fecha, concepto y monto, y lo comparte directo por WhatsApp en un solo paso, sin abrir dos veces la app de mensajería. El mismo mecanismo genera credenciales imprimibles por alumno: nombre, grupo, color de cinturón y su código QR de check-in, listas para que la escuela las mande a laminar.

Credencial imprimible de alumno con foto, nombre, cinturón, código QR de check-in y opciones para imprimir o enviar por WhatsApp

La credencial física reutiliza el mismo QR que el check-in en pantalla: un solo identificador, dos formas de leerlo.

Por qué recibo digital, no CFDI todavía

  • El cliente lo pidió explícitamente como algo "más simple y urgente" que la factura fiscal
  • Resuelve el dolor real: un comprobante que el padre de familia pueda guardar
  • CFDI vía PAC queda documentado como fase siguiente, no descartado

Credencial con QR reutiliza el mismo QR del check-in

  • Un solo identificador por alumno, no dos sistemas de códigos distintos
  • El sensei escanea la credencial física igual que el QR en pantalla
  • Pensado para escuelas donde no todos los alumnos llevan celular a clase

Cuatro roles, un mismo dato, permisos distintos.

Dueño, administración, sensei y auxiliar ven la misma base de datos, pero nunca la misma información. Esto no se resuelve escondiendo botones en la pantalla: un botón oculto no protege nada si alguien puede llamar a la base de datos directamente. Se resuelve en el servidor, con Row Level Security de Postgres evaluando cada consulta según quién la hace.

Pantalla de Equipo mostrando colaboradores con su rol (Administración, Sensei) y una invitación pendiente con código de acceso

Cada colaborador tiene un rol asignado desde que se une: el permiso real vive en el servidor, no en esta pantalla.

Qué ve cada rol

  • Dueño: todo, incluyendo el total de ingresos del mes
  • Administración: alumnos, pagos y grupos, sin ver el total agregado de ingresos
  • Sensei: solo alumnos, pagos y check-ins de sus propios grupos
  • Auxiliar: solo alumnos de su grupo, puede hacer check-in, sin acceso a pagos

La lección técnica más cara del proyecto

  • Cuando una política de RLS bloquea un UPDATE o DELETE, Postgres no regresa error: regresa éxito con cero filas afectadas
  • Un botón "Eliminar" puede parecer roto sin ningún mensaje de error en pantalla
  • La privacidad de un total agregado (ingresos) no se resuelve con RLS por fila: se resuelve con una función de base de datos que verifica el rol antes de calcular la suma

El límite del plan gratuito no vive en la interfaz — vive en la base de datos.

Cada regla de negocio de este proyecto tuvo que traducirse en una decisión de arquitectura concreta, no solo en una nota de producto. "Administración no debe ver ingresos totales" se convirtió en una función de base de datos con validación de rol. "Tres grupos gratis, después se paga" se convirtió en un trigger de Postgres, no en un mensaje de la interfaz que cualquiera podría ignorar editando la petición directo a la API. Antes de ofrecer esto a una segunda escuela, necesitaba un plan free real. Definí los límites con la operación real del Dojang como referencia: su propia estructura de grupos fue el piso mínimo del plan gratuito, no un número arbitrario.

3 grupos
tope del plan free, con 2 maestros por grupo y una sola sede: cubre la estructura típica de una escuela chica (infantil, juvenil y adultos) sin sentirse restrictivo desde el primer día.
40 alumnos
tope del plan free: el punto donde una escuela ya genera ingresos suficientes para que una suscripción de software sea una decisión obvia, no una carga.
Alumnos, grupos y maestros ilimitadosPro
Varias sucursales en una sola cuentaPro
Exportar reporte financiero a Excel y PDFPro
Soporte prioritarioPro
Check-in QR, credenciales, pagos y reportes en pantallaFree
Descarga de toda la información en CSVFree

Los límites se aplican con triggers de Postgres, no con validaciones que el cliente pudiera saltarse editando la petición directo a la API. La interfaz solo avisa antes de que el límite truene: la protección real vive un nivel más abajo.

Academia Check-in Pro cuesta $249 MXN al mes por escuela, precio fijo sin importar cuántos alumnos tenga. No hay periodo de prueba: el plan Free es la prueba permanente. Si una escuela deja de pagar, nada se borra: regresa a Free, su primera sucursal sigue operando y las demás quedan en modo consulta.

Un piloto en manos del cliente cambia qué es "urgente" construir.

Con el sistema base ya funcionando, el trabajo se volvió menos sobre arquitectura y más sobre fricción real de uso: cosas que solo aparecen cuando alguien que no eres tú, sin tu contexto, intenta dar de alta a un colaborador nuevo un martes en la noche.

Invitaciones, no cuentas creadas a mano

  • Antes, cada sensei o auxiliar nuevo significaba que el cliente me escribiera para que yo corriera SQL manualmente
  • Ahora, el dueño genera un código desde la app, vigente 7 días, con rol y grupo ya resueltos de antemano
  • La persona invitada crea su propia cuenta; un trigger de Postgres arma su perfil automáticamente, sin intervención mía

Perfil de alumno real, no un modal con un QR

  • Foto con recorte automático, edad calculada desde fecha de nacimiento, estado de cuenta con semáforo de días de atraso
  • Credencial imprimible rediseñada con la foto real del alumno, no solo el código
  • Selectores de fecha y hora construidos a mano (rueda con banda de selección), replicando el diseño de Figma exacto en vez de depender del picker nativo de Android, que se veía distinto según la marca del teléfono
Perfil de alumno con foto recortada automáticamente, grupo, edad, tutor, estado de cuenta y historial de asistencia

Perfil de alumno real: foto, estado de cuenta con semáforo de días de atraso, e historial de asistencia.

La pieza más interesante de esta ronda fue el historial de asistencia con faltas reales, no solo asistencias. Estructurar el horario del grupo (días de la semana + hora, en vez de texto libre como "Lun/Mié 5pm") permitió calcular con precisión qué días tocaba clase y comparar contra los check-ins reales. Sin ese paso previo, "falta" era una palabra sin datos detrás.

Resuelto

El cliente reportó un error. La causa no estaba en el código que revisé primero.

Leonel intentó consultar el perfil de un alumno y le apareció "no se encontró este alumno", con la cuenta de dueño, que tiene todos los permisos. El error no era de permisos: era que su base de datos de producción no tenía las columnas que el código nuevo esperaba.

La causa real

  • Cada sesión de desarrollo aplicaba cambios de esquema (columnas, tablas, funciones) directo en el proyecto de Supabase de desarrollo
  • Los builds nuevos sí llevaban el código actualizado, pero nadie había migrado el esquema equivalente al proyecto de producción del cliente
  • El código pedía columnas que, para Leonel, simplemente no existían: la consulta fallaba en silencio y la app mostraba un mensaje genérico

El diagnóstico y la corrección

  • Un solo query contra information_schema confirmó exactamente qué faltaba: dos columnas de horario, una tabla completa de invitaciones, dos funciones, y un bucket de Storage
  • Se aplicó cada migración pendiente directo en producción, en el orden correcto, sin tocar los datos reales ya capturados
  • Quedó como práctica fija: antes de generar un build nuevo, revisar y aplicar primero cualquier migración acumulada, no después de que el cliente encuentre el hueco

Construir en código real significa que las cosas se rompen — y eso también es parte del producto.

A diferencia de un prototipo en Figma, aquí hubo errores de sintaxis, cache corrupto, archivos que se sobrescribían entre sí, y navegación que fallaba silenciosamente. Documentar ese proceso, no solo el resultado, es parte de lo que hace este case study distinto.

Fase 1 — Fundamentos

Entorno de desarrollo desde cero

Node desactualizado, versión de Expo Go incompatible con el SDK del proyecto, primer error resuelto antes de escribir una sola pantalla.

Conexión con Supabase

Modelo de datos inicial de tres tablas (alumnos, pagos, checkins) con relaciones, incluyendo el error clásico de URL mal copiada del dashboard.

Ciclo completo: alta → check-in → dashboard

Primera versión funcional, pero visualmente genérica: validó la arquitectura antes de invertir en diseño.

Fase 2 — Sistema y seguridad

Sistema de diseño aplicado a código real

Tokens, tipografía, iconografía consistente. Una colisión de nombres de archivo rompió temporalmente la navegación completa de la app.

Roles reales y Row Level Security

De una política abierta de desarrollo a cuatro roles con permisos evaluados en el servidor: incluyendo el hallazgo de que un DELETE bloqueado por RLS falla en silencio, sin error visible.

Modelo free / premium y límites por base de datos

Triggers de Postgres que bloquean el alta de un cuarto grupo o un alumno 41 cuando el plan es gratuito: la restricción real, no solo un aviso en pantalla.

Fase 3 — Producción

Separación de ambientes: desarrollo y producción

Un segundo proyecto de Supabase, migración completa de esquema, roles y políticas, y perfiles de build distintos en EAS, para que seguir desarrollando no arriesgue los datos reales del cliente.

Piloto entregado al Dojang IDAR

APK instalable, base de datos limpia, cuatro cuentas reales (dueño, administración, sensei, auxiliar), en manos del cliente, no solo datos de prueba.

Fase 4 — Iteración con el cliente

Sistema de invitaciones y perfil completo del alumno

Onboarding de equipo sin depender de mí, foto y credencial con foto real, historial de asistencia con faltas calculadas, no solo asistencias.

Un bug real, encontrado por el cliente, no por mí

Producción y desarrollo se desincronizaron en el esquema de base de datos. Diagnóstico, corrección, y una práctica nueva para que no se repita.

Fase 5 — De piloto a producto

Multi-escuela sin interrumpir al primer cliente

Migración a una base compartida con aislamiento por escuela vía Row Level Security. Dojang IDAR pasó a ser la primera escuela del sistema mientras su equipo seguía pasando lista todos los días.

Plan Pro, cobros automáticos y privacidad

Plan por escuela con fecha de vigencia y días de gracia, tarifas con recargo automático, reportes financieros, descarga de datos en CSV y eliminación de cuenta con periodo de gracia.

Salida al mercado

Landing pública con instalación guiada, aviso de privacidad y términos, SEO técnico y analítica de conversión para medir qué parte de la página lleva a descargar.

Lo que funcionaba para un Dojang tenía que funcionar para la escuela de al lado.

Con el piloto estable, la pregunta cambió de "¿le sirve a Leonel?" a "¿le serviría a una escuela que nunca he visto?". Eso obligó a revisar cada decisión que daba por hecho que el usuario era un Dojang de Taekwondo, y a resolver lo que un producto público necesita y un piloto no: cobrar, proteger datos y conseguir usuarios.

Multi-escuela: cada academia se registra sola

  • Base de datos compartida con aislamiento por escuela vía Row Level Security: una escuela nunca ve los datos ni las cifras de otra
  • Registro autoservicio, sin que yo cree cuentas a mano
  • Dojang IDAR migró como la primera escuela del sistema, sin interrumpir su operación diaria

Cualquier tipo de escuela, no solo artes marciales

  • Al registrarse, cada escuela elige su tipo: las de artes marciales usan cinturones de colores; baile y otras disciplinas usan niveles (Principiante, Intermedio, Avanzado)
  • Los textos, la credencial con QR y los mensajes de WhatsApp se adaptan solos al tipo de escuela
  • "Sensei" pasó a "maestro" como rol genérico: el lenguaje del producto dejó de asumir una disciplina

Cobros que se calculan solos

  • Tarifa general o por grupo: si un grupo no tiene tarifa propia, toma la general, y el monto se precarga al registrar el cobro
  • Recargo automático por atraso: un porcentaje y un día límite para toda la escuela; si el alumno paga tarde, el monto ya incluye el recargo con su desglose
  • Solo el dueño puede cambiar tarifas, y los recordatorios por WhatsApp llevan el nombre de la escuela

Reportes que cuadran

  • Reporte semanal operativo: ingresos del mes, altas, bajas, clases muestra, adeudos y faltas
  • Reporte financiero: ingresos por mes de los últimos 12 meses e ingresos por grupo, con cifras que coinciden entre ambos reportes
  • Se consultan en cualquier plan; exportarlos a Excel y PDF es parte de Pro

Privacidad y control de los datos

  • La escuela descarga toda su información en CSV cuando quiere
  • Eliminar la cuenta de una escuela tiene 14 días de gracia para arrepentirse; después se borra todo, incluidas las fotos de los alumnos. Un integrante del equipo puede eliminar su propia cuenta al instante, sin afectar a la escuela
  • Aviso de privacidad y términos alineados con la ley mexicana vigente, pensando en que la mayoría de los alumnos son menores de edad

Plan Pro y salida al mercado

  • Pro a $249 MXN al mes por escuela, con activación manual por ahora: fecha de vigencia por escuela y días de gracia antes de regresar a Free
  • Landing pública con instalación guiada paso a paso (permiso de apps desconocidas y aviso de Play Protect), porque la app aún se distribuye como APK
  • SEO técnico, Search Console y analítica con un embudo visita → clic → descarga para medir qué parte de la página convierte
Producto en operación

Academia Check-in ya está disponible para cualquier escuela

Funciones, planes Free y Pro, y la app para Android, en su sitio público.

Ver el sitio de Academia Check-in

Lo que este proyecto cambió en mi forma de pensar como product designer.

001

El mejor brief no siempre llega en forma de brief

El cliente describió síntomas ("cada sensei lleva su Excel"), no una solicitud de producto. Traducir esa frustración operativa en un alcance de sistema fue el primer trabajo de diseño, antes de dibujar una sola pantalla.

002

Decir "no" a features es una decisión de diseño

Priorizar recibo digital sobre CFDI, o multi-sede fuera del MVP, no fue una limitación técnica: fue foco deliberado en el dolor más urgente y en lo que el cliente pidió de verdad.

003

Un sistema de diseño genérico sigue siendo funcional

La app funcionaba perfecto antes de tener marca. La diferencia entre "funciona" y "se siente terminado" es completamente independiente de la lógica.

004

La seguridad de datos es una decisión de producto, no un detalle técnico

Que administración no vea el total de ingresos no es una restricción de la base de datos: es una decisión sobre qué información le corresponde a cada rol dentro del negocio real del cliente.

005

Nadie reporta fricción espontáneamente: hay que preguntarla

El cliente nunca escribió "no puedo usar la app". Fue un checkpoint estructurado, con preguntas concretas en el momento correcto, lo que sacó a la luz que parte de su equipo usa iPhone. Sin ese proceso, esa fricción hubiera quedado invisible indefinidamente.

El piloto ya es un producto público. Lo que sigue es escalarlo.

PublicadaLanding pública con instalación guiada para Android, SEO técnico y analítica de conversión
HechoMulti-escuela, plan Pro, tarifas con recargo automático y reportes financieros con exportación
En cursoRetroalimentación estructurada del piloto real con el Dojang IDAR
PendientePublicación en Google Play, para instalar sin los permisos de apps desconocidas
PendienteIntegración de facturación CFDI vía PAC (Facturama)
PendienteCobro en línea con Conekta / Clip, ligado al módulo de pagos y a la activación automática del plan Pro
PendienteFase 2 de recordatorios: automatización real vía Twilio/Meta, sin intervención manual

Diseñar Academia Check-in me confirmó dónde quiero pararme como product designer.

Lo que aprendí

Que un discovery real, aunque sea un solo cuestionario respondido por un solo dueño de negocio, vale más que cualquier plantilla de investigación genérica, porque las respuestas fueron específicas de un negocio real, no hipótesis mías sobre cómo "debería" operar una escuela.

De lo que estoy más orgulloso

No es una pantalla: es que el sistema de roles y el modelo de negocio siguen sosteniéndose bajo uso real, con datos reales, en manos de alguien que no soy yo. Eso solo se prueba entregando, no presentando.

Dónde me quiero parar

No soy desarrollador de oficio, y este proyecto no cambió eso. Pero entrar al código, entender Row Level Security, escribir un trigger de Postgres, o depurar por qué un `DELETE` fallaba en silencio: eso sí cambió cómo diseño. Diseño mejor cuando entiendo las restricciones reales del sistema, no solo sus pantallas.