Tabla de Contenidos
- Stack Tecnológico
- Requisitos Previos
- Configuración e Instalación
- Diseñar el Modelo de Datos
- Cómo Funciona Trophy
- Configurar Trophy
- Acciones del Servidor
- El Sistema de Niveles
- Crear el Panel de Control
- Registrar Entrenamientos
- Implementar Clasificaciones
- Crear la Página de Logros
- Crear la Página de Perfil
- El Resultado
Stack Tecnológico
- Framework: Next.js 15 (App Router)
- UI: Shadcn/UI + TailwindCSS
- Iconos: Lucide React
- Gamificación: Trophy
Requisitos Previos
- Una cuenta de Trophy (regístrate aquí).
- Node.js 18+ instalado.
Configuración e Instalación
Primero, clona el repositorio inicial o crea una nueva aplicación Next.js:.env.local:
Diseñar el Modelo de Datos
Para una aplicación de fitness multideporte, necesitamos normalizar los esfuerzos. Un ciclo de 10 km no es lo mismo que una carrera de 10 km. Utilizaremos tres métricas distintas para rastrear datos sin procesar y un sistema de XP unificado para la progresión.
- Las Métricas
Rastrearemos la distancia como el valor principal.
distance_run(km) - con atributopace(caminar/correr).distance_cycled(km)distance_swum(m) - con atributostyle(estilo libre/braza).
- Los Atributos
Para habilitar clasificaciones locales, etiquetaremos a cada usuario con un atributo city.
Cómo Funciona Trophy
Antes de profundizar en el código, entendamos cómo Trophy impulsa nuestra capa de gamificación. En Trophy, las Métricas representan diferentes interacciones que los usuarios pueden realizar e impulsan funciones como Logros, Rachas y Correos Electrónicos. Cuando se registran eventos para un usuario específico, cualquier logro vinculado a la métrica especificada se desbloqueará si se cumplen los requisitos, las rachas se calcularán automáticamente, las clasificaciones se actualizarán y cualquier correo electrónico configurado se programará. Esto es lo que hace que construir experiencias gamificadas con Trophy sea tan poderoso: hace todo el trabajo detrás de escena.Configuración de Trophy
Así es como configuraremos Trophy para nuestra aplicación de fitness:Crear métricas
Crear métricas
Dirígete a la página de métricas de Trophy y crea tres métricas:
distance_run— Total de kilómetros corridosdistance_cycled— Total de kilómetros en bicicletadistance_swum— Total de metros nadados

Crear atributos
Crear atributos
Mientras aún estás en la página de métricas, configura
los atributos de evento pace y style:
Luego, ve a la página de atributos de usuario
y crea el atributo de usuario city:


Crear logros
Crear logros
Ve a la página de logros de Trophy
y crea logros de hitos para cada deporte. Por ejemplo:Running:
- First 5K (5km en total)
- Half Marathon Hero (21.1km en total)
- Marathon Master (42.2km en total)
- Century Rider (100km en total)
- Tour Stage (200km en total)
- Pool Regular (1000m en total)
- Open Water Ready (5000m en total)

Configurar clasificaciones
Configurar clasificaciones
Ve a la página de clasificaciones y configura
clasificaciones semanales para impulsar la competencia. Cada clasificación debe configurarse
con Unidad de repetición: Días e Intervalo de repetición: 7 para
repetirse semanalmente.
Clasificaciones globales:

weekly-distance-runweekly-distance-cycledweekly-distance-swum
weekly-distance-run-citiesweekly-distance-cycled-citiesweekly-distance-swum-cities

Configurar puntos XP
Configurar puntos XP
Ve a la página de puntos y crea un sistema de puntos
llamado
Luego configura Niveles de puntos en el mismo sistema
xp que otorgue puntos según la actividad:- Running: 10 XP por km
- Cycling: 3 XP por km
- Swimming: 10 XP por cada 100m

xp para que Trophy pueda rastrear el nivel de cada usuario. Usa las claves y umbrales a continuación para que el código de esta guía coincida con tu panel:| Nombre | Clave | Umbral de puntos | |
|---|---|---|---|
| Rookie | rookie | 0 | |
| Active | active | 100 | |
| Mover | mover | 500 | |
| Athlete | athlete | 2500 | |
| Pro | pro | 10000 |
Configurar racha diaria
Configurar racha diaria
Dirígete a la página de rachas y configura una
racha diaria vinculada a cualquiera de las métricas de distancia. Los usuarios mantendrán su
racha registrando al menos una actividad por día.
Configurar correos electrónicos
Configurar correos electrónicos
Dirígete a la página de correos electrónicos y añade y activa plantillas para estos correos electrónicos automatizados de participación:
- Logro desbloqueado — Celebra nuevas insignias
- Racha en riesgo — Recuerda a los usuarios antes de que pierdan su racha
- Resumen semanal — Resumen del progreso y posición en la clasificación
Acciones del Servidor
Crearemos un archivosrc/app/actions.ts para manejar todas las interacciones con la API de Trophy. Esto mantiene nuestras claves API seguras y nos permite aprovechar las Server Actions de Next.js.
src/app/actions.ts
El Sistema de Niveles
Trophy almacena el nivel de cada usuario en el sistema de puntosxp cuando configuras Niveles de Puntos. La carga útil de puntos de usuario incluye un objeto level. La API de lista de niveles devuelve cada nivel y umbral para que puedas mostrar el progreso hacia el siguiente.
Añade un pequeño ayudante junto a las constantes de tu aplicación en src/lib/constants.ts:
src/lib/constants.ts
Construyendo el Panel
El panel agrega todas las estadísticas del usuario. Obtenemos los datos del lado del servidor y derivamos barras de progreso de los umbrales devueltos por la API.src/app/page.tsx
LogActivityDialog alrededor del botón—lo construiremos a continuación.
Registrando Entrenamientos
El botón Registrar Entrenamiento abre un cuadro de diálogo donde los usuarios seleccionan su tipo de actividad, ingresan la distancia y envían. Esto activa la acción del servidorlogActivity que envía el evento a Trophy.
Primero, instala los componentes requeridos de shadcn/ui:
components/log-activity-dialog.tsx
Contexto del Usuario
El diálogo necesita acceso al ID del usuario actual. Crea un proveedor de contexto:components/user-provider.tsx
layout.tsx:
app/layout.tsx
Utilidades Auxiliares
El contexto del usuario depende de funciones auxiliares para gestionar la identidad del usuario en localStorage:lib/user.ts
lib/city.ts
Implementando Clasificaciones
Construiremos una interfaz con pestañas que permite a los usuarios cambiar entre actividades (Correr/Ciclismo/Natación) y alcances (Global vs. Ciudad Local).src/app/leaderboards/page.tsx
Construyendo la Página de Logros
Un espacio dedicado para mostrar insignias es esencial para la retención a largo plazo. Usaremos los datos destats.achievements para renderizar una cuadrícula de insignias, distinguiendo visualmente entre estados ganados (coloridos) y bloqueados (escala de grises).
src/app/achievements/page.tsx
Construyendo la Página de Perfil
Finalmente, la página de perfil lo integra todo. Muestra las “Estadísticas de por Vida” del usuario, su progresión actual de XP y les permite actualizar su configuración (como su ciudad).src/app/profile/page.tsx
El Resultado
¡Ahora tienes un ciclo de gamificación de fitness completamente funcional! Los usuarios pueden registrar entrenamientos en múltiples deportes, progresar a través de niveles de Puntos, ganar insignias y competir en las Clasificaciones.Lo Que Has Construido
- Seguimiento multideporte con XP normalizado entre carrera, ciclismo y natación
- Clasificaciones semanales con competencia global y por ciudad
- Progresión por niveles desde Principiante hasta Profesional
- Sistema de logros con insignias de hitos
- Rachas diarias para impulsar la retención
Próximos Pasos
- Conecta dispositivos de fitness — Integra con Strava, Apple Health o Google Fit para registrar entrenamientos automáticamente
- Añade funciones sociales — Permite que los usuarios sigan amigos, comparen estadísticas y compartan logros
- Crea una experiencia móvil — Convierte a PWA o empaqueta con Capacitor para distribución en tiendas de aplicaciones
- Añade notificaciones push — Alerta a los usuarios cuando su racha esté en riesgo o hayan sido superados en la clasificación