Skip to content

CKM Combat Academy

Site for CKM Combat Academy, a combat sports club in Mos, with timetable, prices and a trial-class request

CKM Combat Academy first screen: the «Todo por la lucha» claim in huge type over a black background with a red glow, with «Mos · Pontevedra» above it, the «temple of contact sports» line below, the «first class free» and «see the classes» buttons, and the club’s opening hours and address at the foot.
My role
Design, development, content model and deployment
Year
2026
Status
In production

Site for CKM Combat Academy, a club in Mos (Pontevedra): boxing, kickboxing, MMA and strength work, with a weekly timetable, prices, coaches and a gallery. Before the project the club lived on Instagram, and anyone looking for a gym could not find the timetable or the price without sending a message.

Everything published lives in the Sanity panel and the club edits it themselves; trial-class requests travel separately to MongoDB and never touch the CMS. The site decides what is content and what is people’s data, and keeps them apart.

What's inside

  1. Two sources with one rule: the repository is the floor and the panel wins when it has documents. Both validate against the same zod schema, so the site can be cloned and run with no credentials at all.

  2. The timetable never repeats text: each slot points to its activity by reference, so renaming “Kickboxing” does not mean going through twenty cells of the calendar.

  3. The trial-class request is a Server Action with zod validation and a limit of five submissions every ten minutes: a public form with no brake is an invitation to spam.

  4. One branch per environment (dev, test, prod) and only the production one is indexed, decided by branch rather than by `VERCEL_ENV`, because in the test project that branch is also “production”.

Stack

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