AR.v2.0.0 · Bogotá, Colombia
Disponible
Cotizar
← Trabajo seleccionado

Sports & Communities · Colombia · 2026

WSKF Colombia · Sitio + Plataforma de Gestión

Monorepo WordPress que entrega dos productos en uno: sitio editorial público y una plataforma SaaS interna para gestión de dojos.

Sitio oficial + sistema de gestión de dojos para la seccional colombiana de la World Shotokan Karate-do Federation. Un solo monorepo WordPress entrega dos productos distintos: el sitio público con un lenguaje visual editorial-marcial (papel washi, hinomaru rojo, kanji decorativo), y un plugin SaaS interno con dos React SPAs para sensei y alumnos.

El reto

WSKF necesitaba presencia pública con identidad propia y, al mismo tiempo, un sistema operativo interno para administrar sedes, instructores, alumnos, horarios y asistencia. La restricción era que todo viviera en el mismo WordPress — sin servicios externos, sin Cloud Functions, autenticación nativa.

Lo que construí

Dos productos sobre un mismo monorepo WordPress: tema público con lenguaje "editorial marcial" y plugin SaaS para gestión de dojos.

  • 40+ bloques Gutenberg custom (cero dependencia de ACF) que se componen vía patterns reusables.
  • Tipografía editorial: Cormorant Garamond para titulares + Noto Serif JP para marcas decorativas en kanji.
  • Blog nativo con post formats castellanizados (Standard → NOTA, Video → VIDEO, Gallery → GALERÍA), sin necesidad de CPT.
  • Bloque wskf/gallery propio con lightbox custom: core/gallery tenía conflictos irresolubles con el layout system de WP 6.4+.
  • Plugin standalone (wskf-tatami) con arquitectura en capas (Api/, Setup/, Database/) y migraciones SQL incrementales versionadas.
  • Dos React SPAs en un solo bundle compartiendo chunk vendor.js: panel admin (/wp-admin) y portal alumno/instructor (frontend shortcode).
  • API REST custom en namespace wskf/v1 con permission callbacks por rol.
  • Roles custom registrados idempotentemente: wskf_instructor, wskf_alumno.

Stack y arquitectura

  • PSR-4 + Composer para autoload del plugin.
  • Auth nativo de WP (cookies + nonces) — zero JWT.
  • React Router en HashRouter (requerido por vivir dentro de URLs de WP).
  • Castellanización de la UI del admin (Posts → Noticias) sin tocar core.
  • Cache buster por filemtime en enqueue → invalidación automática en cada build.
  • Path aliases compartidos entre tsconfig.json y vite.config.js para mantener consistencia entre TypeScript checks y bundling.

Decisiones notables

  • Componer todo desde bloques nativos en vez de Timber/Twig — el cliente puede armar páginas sin tocar código.
  • Render server-side en todos los bloques con ServerSideRender para preview en editor → el editor ve exactamente lo que el público va a ver.
  • Una galería propia desde cero después de descubrir que WP inyecta is-layout-flex !important vía theme.json y pelea cualquier override — más simple recrear que parchear.
  • Cache buster con filemtime porque LiteSpeed + browsers cachean agresivamente y los hot-reloads de CSS estaban siendo invisibles.

Aprendizajes

  • WordPress 6.4+ cambió cómo se renderiza el block layout system: los bloques nativos generan CSS inline en <head> que sobreescribe theme styles con misma especificidad. La solución no es siempre pelear la cascada — a veces conviene construir tu propio bloque.
  • Mantener UX consistente entre el admin de WP (donde los autores escriben) y el render público requirió escribir un editor.css específico que imita los estilos del frontend.
  • Diseñar para autores no-técnicos: cada bloque tiene defaults razonables y panel de Inspector con controles autoexplicativos en castellano.