
Capacidades
- Rankings y tiempos
- Back office
Frontend
Backend
DiRT Tracker
En desarrolloDiRT Tracker nació de un problema doméstico: un grupo de amigos corriendo en el mismo salón, con una sola sesión abierta, queriendo apuntar sus tiempos sin hacer login y logout cada vuelta. Es una app Next.js 16 con Auth.js, Prisma y PostgreSQL, sembrada con el contenido real del juego.
El reto
Las hojas de cálculo compartidas se rompían enseguida: nadie recordaba en qué tramo, con qué coche ni con qué condiciones se hizo un tiempo, así que comparar era inútil. Hacía falta un modelo que capturase el contexto de cada vuelta y una forma de registrar tiempos ajenos sin ceder la sesión.
Implementación
Catálogo real del juego, sembrado
El seed carga 13 localidades, 156 tramos y 79 coches con sus datos, y es idempotente: se puede volver a ejecutar sin duplicar nada ni perder los tiempos ya registrados.
Tiempos con contexto completo
Cada marca guarda meteorología, hora del día, sentido del tramo y dispositivo de entrada (volante o mando), además del coche. Comparar un tiempo con volante y lluvia contra otro con mando y seco deja de ser una discusión de bar.
Precisión al milisegundo
Los tiempos se almacenan en milisegundos enteros y se convierten a MM:SS.mmm en la capa de presentación, así que los leaderboards ordenan bien y no arrastran errores de coma flotante.
Mutaciones como Server Actions
Localidades, coches, tiempos, usuarios y contraseñas se modifican con Server Actions validadas con Zod, protegidas por helpers de sesión y de rol admin en lugar de repetir comprobaciones por ruta.
Cambio de contraseña forzado en el primer acceso
Auth.js v5 con credenciales y sesión JWT; un middleware edge-safe redirige a cambiar la contraseña sembrada antes de dejar entrar a ninguna otra página.
Mismo esquema en local y en producción
PostgreSQL 16 en Docker para desarrollo y Neon en producción, con las mismas migraciones de Prisma aplicadas en ambos entornos.