Páginas, roles y búsqueda
Qué hace cada página, qué rol la ve, qué abre cada permiso y cómo encuentra la búsqueda páginas y registros.
Para el paquete Full Stack
Las páginas de un miembro
Cada página existe en inglés en /en y en árabe en /ar. El panel se abre en /en/dashboard, después del inicio de sesión en /en/auth/login. Las páginas de un miembro necesitan fitness.view, que solo tiene el rol Member.
| Elemento de la barra lateral | Ruta | Qué hace |
|---|---|---|
| Panel | /en/dashboard | El día de un vistazo: frecuencia cardíaca, energía y recuperación, los anillos de actividad, calorías y macros, las semanas de sueño y de frecuencia cardíaca, los próximos entrenamientos y los pasos. |
| Asistente de IA | /en/dashboard/ai-assistant | Un chat que responde sobre el entrenamiento propio del miembro y registra datos por él. |
| Actividad | /en/dashboard/activity | Pasos, tiempo activo, calorías y distancia por día, semana o mes, un mapa de calor por horas, un desglose por tipo y una página por cada actividad registrada con su ruta, parciales, desnivel y cadencia. |
| Entrenamientos | /en/dashboard/workouts | El plan de la semana, el trabajo asignado por el coach y el check-in semanal, los programas, la página de cada entrenamiento y la sesión en vivo. |
| Biblioteca de ejercicios | /en/dashboard/workouts/exercises | Cada movimiento, filtrado por músculo, equipamiento y dificultad, con una página por movimiento. |
| Nutrición | /en/dashboard/nutrition | Calorías, macros, hidratación y la ingesta de la semana. |
| Planificador de comidas | /en/dashboard/nutrition/meal-planner | Las comidas de un día en una línea de tiempo, donde el miembro registra lo que come. |
| Sueño | /en/dashboard/sleep | Fases, horario, recuperación y la tendencia de la semana. |
| Salud | /en/dashboard/health | Una puntuación de salud, lo esencial del día, constantes vitales y ocho semanas de tendencias. |
| Progreso | /en/dashboard/progress | Rendimiento, medidas corporales, rachas de hábitos, récords y logros. |
| Fotos de progreso | /en/dashboard/progress/photos | Fotos de antes y después con un objetivo de peso. |
| Comunidad | /en/dashboard/community | Grupos, retos, debates, eventos y la clasificación. |
| Ajustes | /en/dashboard/settings | Perfil, contraseña, alertas, privacidad, apariencia, dispositivos conectados, facturación y eliminación de la cuenta. |
Páginas del personal
El personal llega al resumen del coach en /en/dashboard: la lista de clientes de un vistazo, los clientes que dejaron de dar señales, los check-ins semanales que esperan respuesta, el trabajo asignado para hoy y las cuentas del gimnasio. Los paneles de la lista de clientes solo tienen datos para una cuenta con coaching.clients (el Head Coach y los Personal Trainer), y las cuentas del gimnasio solo aparecen con members.view; para cualquier otra cuenta de personal, como los Coach de la carga de datos, los paneles de la lista de clientes no tienen nada que mostrar. Cada una de las demás páginas solo aparece para un rol que concede su permiso.
| Elemento de la barra lateral | Ruta | Permiso | Qué hace |
|---|---|---|---|
| Mis clientes | /en/dashboard/clients | coaching.clients | La lista de clientes propia del coach, y una página por cliente con su plan, sus check-ins semanales y sus mensajes. |
| Gimnasio | /en/dashboard/users/all | members.view | Todos los miembros, la página de cada uno y los miembros eliminados con un botón para restaurarlos. |
| Contenido | /en/dashboard/content | fitness.manage | Los catálogos que leen los miembros: ejercicios, entrenamientos, programas, platos, grupos, eventos, retos, logros e insignias. |
| Coaches | /en/dashboard/coaches | coaches.view | Las cuentas del personal y sus roles. |
| Roles de coach | /en/dashboard/coach-roles | roles.view | Los roles y los permisos que concede cada uno. |
| Ajustes | /en/dashboard/settings | Todos | Perfil, contraseña, apariencia y los ajustes de la aplicación. |
Hay dos entradas más en Demos: UI Component, cada componente compartido mostrado en vivo con su código, y Onboarding, el recorrido guiado de primer uso para un miembro. Quítalas de navigationData.ts cuando ya no las quieras.
Los buscadores nunca indexan el panel: cada página lleva una etiqueta noindex y public/robots.txt bloquea todas las rutas.
Los roles incluidos
Los miembros y el personal comparten una tabla de cuentas y un inicio de sesión; los roles deciden lo que ve cada uno. Una cuenta tiene todos los permisos de todos sus roles. La carga de datos crea siete roles:
| Rol | Qué concede |
|---|---|
| Head Coach | Todos los permisos salvo el par de entrenamiento fitness.view y fitness.edit |
| Coach | Los miembros, los coaches, el contenido, la lista de roles, los ajustes de la aplicación y mover miembros entre coaches |
| Gym Manager | Los miembros, el contenido, las listas de coaches y de roles, y mover miembros entre coaches |
| Editor | El contenido, y las listas de miembros y de coaches |
| Viewer | Todos los permisos .view salvo fitness.view: pantallas del gimnasio de solo lectura |
| Personal Trainer | Su propia lista de clientes (coaching.clients) y el contenido, sin la lista de miembros |
| Miembro | El par de entrenamiento: sus propias páginas de fitness, y nada detrás de ellas |
Todos los roles tienen también ai_chat.use, ai_chat.view_models y settings.view: el asistente, y su propio perfil y preferencias. Solo el rol Member entrena, así que una cuenta del personal nunca tiene páginas de fitness propias. Una cuenta nueva creada en la página de registro es un Member.
Permisos
| Módulo | Permisos |
|---|---|
| Miembros | members.view, members.create, members.update, members.delete, members.restore, members.verify |
| Coaches | coaches.view, coaches.create, coaches.edit, coaches.delete, coaches.assign_roles |
| Roles | roles.view, roles.create, roles.edit, roles.delete, roles.assign_permissions |
| Ajustes | settings.view, settings.edit |
| Fitness | fitness.view, fitness.edit (una cuenta que entrena), fitness.manage (los catálogos de contenido) |
| Coaching | coaching.clients (tu propia lista de clientes), coaching.assign (mover miembros entre coaches) |
| Asistente de IA | ai_chat.use, ai_chat.view_models |
La barra lateral, las páginas y la API comprueban los mismos nombres, así que un rol editado en la pantalla Coach Roles cambia lo que ven sus cuentas. Una cuenta con la sesión iniciada cuando cambian sus roles recibe los nuevos permisos al instante, mediante un socket en vivo.
Búsqueda
Ctrl+K, o Cmd+K en un Mac, abre la búsqueda desde cualquier página, igual que el cuadro de búsqueda de la barra superior. Las flechas recorren los resultados, Enter abre uno y Escape la cierra.
- Encuentra las páginas que la cuenta puede abrir y, para un miembro, las actividades, entrenamientos, ejercicios, platos, noches de sueño, logros, grupos, retos y debates de su índice integrado. Ese índice se lee de los propios datos de ejemplo del panel, no de la base de datos: con la API conectada, esas filas siguen viniendo del conjunto de ejemplo, no de lo que registró cada miembro.
- Con la API conectada, también pide al servidor los registros que la cuenta puede abrir: miembros, coaches, roles y los catálogos de contenido. Cada tipo necesita el permiso que necesita su propia pantalla, así que un miembro nunca ve a otro miembro en los resultados.
- Las columnas laterales reducen los resultados a un solo tipo. Las últimas seis búsquedas se recuerdan en el navegador.
- Con los datos de ejemplo, la misma búsqueda se ejecuta sobre los registros de ejemplo.
Cómo funciona la búsqueda en el servidor
GET /api/search?q=<term>&locale=<en|ar>&limit=<1-10> necesita un token de sesión iniciada y ningún permiso concreto. Ejecuta un buscador por cada tipo que quien llama puede abrir y deja fuera los demás.
| Tipo | Coincide con | Permiso |
|---|---|---|
member, coach | Nombre, apellido, los dos juntos, nombre de usuario, correo | members.view, coaches.view |
role | Nombre, descripción | roles.view |
exercise, workout, program, dish, group, event, challenge, achievement, badge | El nombre y los campos propios del tipo, en los dos idiomas, y el slug o la clave | fitness.manage |
- Un término de menos de 2 caracteres no da resultados; uno más largo se recorta a 100.
limites por tipo, 5 por defecto y como máximo 10. - Una fila cuyo texto empieza por el término queda por encima de una con una palabra que empieza por él, que a su vez queda por encima de una que solo lo contiene. En caso de empate, primero va la actualizada más recientemente.
- Cada resultado lleva
kind,title,detail,imagey unhrefsin el prefijo de idioma. Las cuentas eliminadas se dejan fuera.
Ajustes
- Perfil y contraseña: cada cuenta edita los suyos.
- Alertas, privacidad, dispositivos y facturación: los de cada miembro. Los cuatro interruptores de alertas, compartir la actividad con la comunidad, los dispositivos y fuentes de datos conectados, y el plan con sus facturas. La facturación es de solo lectura: nada en la plantilla cobra pagos.
- Apariencia: tema claro, oscuro o del sistema, un color de acento y movimiento reducido, guardados con la cuenta para que el aspecto la siga entre dispositivos.
- Exportar: un miembro descarga todo lo que ha registrado en un único archivo JSON.
- Eliminar cuenta: una cuenta se cierra a sí misma después de confirmar su contraseña.
- Ajustes de la aplicación: el personal con
settings.editcambia los ajustes compartidos.
Los ajustes de aplicación de los datos de demostración son el nombre y el eslogan del sitio, dos direcciones de correo, el modo de mantenimiento, las unidades predeterminadas, el primer día de la semana, los objetivos predeterminados (pasos, agua, sueño y calorías) y dos interruptores de funciones, para la comunidad y el asistente. Solo el asistente de IA lee alguno de ellos: las unidades y los objetivos. El resto se guarda y se puede editar, pero nada lo lee: activar el modo de mantenimiento o desactivar una función no cambia nada en pantalla hasta que lo conectes a tu propio código.