Ejecuta Kinora en local
Pon en marcha tu paquete en tu equipo, con Docker.
Para el paquete Full Stack
Antes de empezar: instala y abre Docker Desktop, o Docker Engine con Compose.
Ver los requisitosDescarga tu plantilla
Abre Mis plantillas y descarga el ZIP de tu paquete.
Resultado esperado: Un archivo con un nombre como
kinora-fitness-full-stack-main-….zipestá en tus descargas.Descomprime y abre la carpeta
Extrae el ZIP y abre una terminal en la carpeta
kinora-fitness-full-stack. En Windows, extráelo en el Explorador de archivos y luego abre una terminal en la carpeta.Terminalunzip kinora-fitness-full-stack-*.zip cd kinora-fitness-full-stackResultado esperado: La carpeta muestra
¿Tienes problemas?back-end,dashboardydocker-compose.yml.Inicia las aplicaciones
Construye e inicia la API y el panel. No hay que configurar nada antes. El primer inicio construye dos imágenes y llena la base de datos con los datos de demostración, lo que tarda unos minutos; los siguientes inicios tardan segundos.
Terminalenkinora-fitness-full-stackdocker compose up --build¿Un puerto ya está en uso?
Si el arranque se detiene con
Un puerto ya está en usoports are not available ... address already in use, otro programa usa el 3030 o el 8000. Detenlo, o crea un archivo llamado.enven la carpetakinora-fitness-full-stackcon el puerto que necesites, por ejemploDASHBOARD_PORT=3040(API_PORTpara la API). Vuelve a ejecutardocker compose up --buildy abre el panel en su nuevo puerto.Resultado esperado: Los dos servicios siguen en ejecución y el registro deja de desplazarse. Deja esta terminal abierta.
¿Tienes problemas?Inicia sesión como coach
Abre localhost:3030Local. El formulario de inicio de sesión viene rellenado con el Head Coach,
headcoach@example.comcon la contraseñaCoach@123. El árabe está en/ar.Resultado esperado: Se abre el resumen del coach: la lista de clientes, los clientes que dejaron de dar señales, los check-ins semanales que esperan respuesta y el trabajo asignado para hoy.
¿Tienes problemas?Inicia sesión como miembro
Cierra sesión y abre localhost:3030/en/auth/login?as=clientLocal. El formulario viene rellenado con el miembro,
member@example.comcon la contraseñaMember@123.Resultado esperado: Se abre el resumen del miembro, con anillos, calorías, sueño, frecuencia cardíaca y los entrenamientos de la semana.
¿Tienes problemas?
Haz un recorrido
Así se ve la demostración cuando todo funciona.

| Cuenta | Correo electrónico | Contraseña | Lo que ve |
|---|---|---|---|
| Head Coach | headcoach@example.com | Coach@123 | Todas las pantallas del personal, con la lista de clientes más completa |
| Miembro | member@example.com | Member@123 | Las páginas de entrenamiento, con el Head Coach como coach |
| Personal Trainer | trainer@example.com | Trainer@123 | Su propia lista de clientes y los catálogos de contenido |
Existen once cuentas de personal más en @staff.com con la contraseña staff123, como Coach, Personal Trainer, Gym Manager, Editor o Viewer. Existen más miembros en @example.com con password123. Son solo cuentas de demostración locales: cambia las contraseñas antes de publicar nada.
El formulario de inicio de sesión se rellena solo: /en/auth/login?as=coach (también el predeterminado) para el Head Coach y /en/auth/login?as=client para el miembro.
Detén e inicia de nuevo
Pulsa Ctrl+C en la terminal para detener las aplicaciones, o ejecuta esto desde la carpeta kinora-fitness-full-stack. Tus datos se conservan en el volumen kinora-data.
kinora-fitness-full-stackdocker compose downVuelve a iniciar con el mismo comando del paso 3. Sin --build, reutiliza las imágenes que ya construiste.
kinora-fitness-full-stackdocker compose upConserva tus datos
docker compose down -v también borra el volumen de la base de datos. El siguiente inicio carga una copia nueva de los datos de demostración, y todo lo que creaste desaparece.
Ejecuta el panel
Este paquete es el panel por sí solo. Sin una API funciona con datos de ejemplo integrados en el navegador: puedes iniciar sesión, registrar un entrenamiento, crear un miembro y editar un rol, y tus cambios se guardan en el navegador. La API es un paquete aparte y no está en esta descarga.
Descomprime y abre la carpeta
Terminalunzip kinora-fitness-dashboard-*.zip cd kinora-fitness-dashboardResultado esperado: La carpeta tiene un
¿Tienes problemas?Dockerfiley unpackage.json.Construye la imagen
Los valores
NEXT_PUBLIC_*se compilan en el JavaScript que carga el navegador, así que son argumentos de construcción. Omítelos para usar los datos de ejemplo; para usar la API de la plantilla, pasa su dirección y su dirección WebSocket (el mismo servidor sin/api).Terminalenkinora-fitness-dashboarddocker build -t kinora-dashboard .Con tu propia API:
¿Tienes problemas?Terminalenkinora-fitness-dashboarddocker build -t kinora-dashboard --build-arg NEXT_PUBLIC_API_BASE_URL=http://localhost:8000/api --build-arg NEXT_PUBLIC_WEBSOCKET_BASE_URL=http://localhost:8000 .Inícialo e inicia sesión
Si el puerto
3030está ocupado, cambia el número a la izquierda de-p, por ejemplo-p 3040:3030, y abre ese puerto en su lugar.Terminalenkinora-fitness-dashboarddocker run -p 3030:3030 kinora-dashboardResultado esperado: localhost:3030Local abre el formulario de inicio de sesión, rellenado con el Head Coach. Un aviso "Sample data" en la parte inferior indica que no hay ninguna API conectada. Con los datos de ejemplo no se comprueba la contraseña:
¿Tienes problemas?member@example.cominicia sesión como el miembro, y un correo que los datos de ejemplo no conocen inicia sesión como el Head Coach.
Ejecuta la API
Este paquete es la API de NestJS por sí sola, con un archivo SQLite guardado en un volumen de Docker. El panel es un paquete aparte y no está en esta descarga.
Descomprime y crea el archivo de entorno
.env.examplefunciona tal cual para una ejecución local. La copia.enves donde irán más adelante tus propias claves.¿Tienes problemas?Terminalunzip kinora-fitness-backend-*.zip cd kinora-fitness-backend cp .env.example .envInícialo con los datos de demostración
Un volumen nuevo recibe tablas vacías salvo que pidas los datos de demostración. El volumen conserva la base de datos entre ejecuciones. Si el puerto
8000está ocupado, cambia el número a la izquierda de-p, por ejemplo-p 8010:8000, y la API responde enhttp://localhost:8010/apien su lugar.Terminalenkinora-fitness-backenddocker run -p 8000:8000 -v kinora-data:/data -e SEED_DEMO_DATA=true kinora-apiResultado esperado: localhost:8000/api/healthLocal responde
¿Tienes problemas?{"status":"ok"}.
El contenedor solo lee tu .env cuando añades --env-file .env a docker run; así es como le llegan tus claves de almacenamiento, IA y MCP. Sin un JWT_SECRET propio, o con el del ejemplo, el contenedor genera un secreto y lo guarda en el volumen.
La imagen permite llamadas del navegador desde http://localhost:3030. Para un panel en otra dirección, pasa -e CORS_ORIGIN= y -e FRONTEND_URL= con esa dirección.