Saltar al contenido

CKM Combat Academy

Web para CKM Combat Academy, un club de deportes de contacto de Mos, con horario, tarifas y solicitud de clase de prueba

Primera pantalla de CKM Combat Academy: el lema «Todo por la lucha» en letras enormes sobre un fondo negro con un halo rojo, con «Mos · Pontevedra» encima, la frase «El templo de los deportes de contacto» debajo, los botones «Primera clase gratis» y «Ver las clases», y el horario y la dirección del club al pie.
Mi papel
Diseño, desarrollo, modelo de contenido y despliegue
Año
2026
Estado
En producción

Web del club CKM Combat Academy, en Mos (Pontevedra): boxeo, kickboxing, MMA y preparación física, con horario semanal, tarifas, entrenadores y galería. Antes del proyecto el club vivía en Instagram, y quien buscaba un gimnasio no encontraba ni el horario ni el precio sin escribir un mensaje.

Todo lo que se publica vive en el panel de Sanity y lo edita el propio club; las solicitudes de clase de prueba viajan por separado a MongoDB y no pasan por el CMS. La web decide qué es contenido y qué son datos de personas, y no los mezcla.

Lo que tiene dentro

  1. Dos fuentes con una regla: el repositorio es el suelo y el panel manda cuando tiene documentos. Las dos validan contra el mismo esquema de zod, así que la web se clona y se levanta sin credenciales de nada.

  2. El horario no repite texto: cada franja apunta por referencia a su actividad, así que renombrar «Kickboxing» no obliga a repasar veinte casillas del calendario.

  3. La solicitud de clase de prueba es una Server Action con validación de zod y un límite de cinco envíos cada diez minutos: un formulario público sin freno es una invitación al spam.

  4. Una rama por entorno (dev, test y prod) y sólo la de producción se indexa, decidido por rama y no por `VERCEL_ENV`, porque en el proyecto de test esa rama también es «producción».

Stack

  • Next.js 16
  • TypeScript
  • Tailwind CSS 4
  • Sanity
  • MongoDB
  • zod
  • Vercel