NVS Platform
Plataforma interna para crear, revisar y publicar perfiles digitales de atletas, cada uno en su propio subdominio, con DNS, hosting y fotos automatizados.
- Año
- 2026
- Rol
- Desarrollador principal — Guarapo Media
- Stack
- Astro, TypeScript, Supabase, PostgreSQL, Cloudinary, Cloudflare API, cPanel UAPI, Resend, Vitest, Vercel
- Enlaces
- Herramienta interna (privada)

El proyecto
New Vision Sports conecta a atletas de Latinoamérica, Centroamérica y España con becas deportivas en universidades de EE. UU., y cada atleta necesita un perfil profesional online para enviar a entrenadores. Antes vivían en Carrd, sin datos estructurados ni un flujo común. Desarrollé una plataforma con la que el equipo crea, revisa y publica esos perfiles desde un panel, y con la que los propios atletas pueden editar el suyo y enviarlo a revisión.
Qué hice
- 01Publicación en un clic: crea el registro DNS en Cloudflare y el subdominio en cPanel, genera el HTML estático del perfil y lo sube vía la API de cPanel, registrando cada paso que falla
- 02Builder de 7 pasos con autoguardado, vista previa en vivo y subida de fotos a Cloudinary
- 03Roles admin, editor y atleta con Supabase Auth (acceso con código de un solo uso por email) y políticas RLS en PostgreSQL
- 04Flujo de revisión con diff de cambios desde la última publicación y solicitud de cambios por email (Resend)
- 05Migración de los perfiles existentes desde Carrd con un script que re-aloja las fotos en Cloudinary
- 06Tracking de visitas, exportación CSV y opciones para compartir cada perfil: QR, WhatsApp y ficha imprimible en PDF
- 07TypeScript estricto, 50 tests unitarios con Vitest y CI en GitHub Actions
Resultados
- perfiles de atletas creados en la plataforma
- 76
- perfiles de atletas creados en la plataforma
- perfiles publicados, cada uno en su propio subdominio
- 27
- perfiles publicados, cada uno en su propio subdominio
- perfiles migrados automáticamente desde Carrd
- 19
- perfiles migrados automáticamente desde Carrd
Cómo funciona
6 pasos
- 01
Builder
El equipo o el atleta completa el perfil; cada cambio se autoguarda en Supabase.
- 02
Revisión
El staff ve qué cambió desde la última publicación y aprueba o pide cambios.
- 03
DNS
Se crea un registro A en Cloudflare para nombre.playwithnewvision.com.
- 04
Subdominio
Alta del subdominio en cPanel a través de su API (UAPI).
- 05
HTML estático
Se genera el perfil con su SEO y JSON-LD, más una ficha imprimible con QR.
- 06
Publicado
Subida a cPanel, snapshot de la versión anterior y email de bienvenida al atleta.
Decisiones técnicas
Las decisiones que más pesaron en la arquitectura, y lo que costó cada una.
- 01
Perfiles como HTML estático
Los perfiles se generan una vez al publicar y se sirven desde Apache en cPanel, sin renderizado por visita: cargan rápido y siguen online aunque el panel de Vercel no esté disponible.
Trade-off
Un cambio no se ve hasta volver a publicar, así que el panel marca los perfiles editados después de su última publicación y permite republicarlos en lote.
- Astro SSR
- Apache
- cPanel UAPI
- 02
Código por email en vez de magic link
El acceso es con un código de un solo uso que se escribe en la web. Los magic links se «gastaban» antes de que el atleta los abriera: los escáneres de correo y los filtros de colegios visitaban el enlace primero.
Trade-off
Un paso más para el usuario (copiar el código), a cambio de eliminar la principal queja de acceso.
- Supabase Auth
- OTP
- Resend
- 03
Seguridad en la base de datos, no solo en la API
RLS por rol y propiedad, más un trigger que impide a un atleta modificar columnas del sistema (estado, subdominio) aunque llame directamente a la API REST de Supabase.
Trade-off
La lista de campos editables vive en dos sitios (la API y el trigger): más mantenimiento, pero un fallo en uno no abre la puerta.
- PostgreSQL
- RLS
- Triggers
- 04
Publicación tolerante a fallos
Cada paso es idempotente («ya existe» cuenta como éxito), los fallos se registran por etapa y, antes de sobrescribir, se guarda una copia de la versión publicada para poder hacer rollback.
Trade-off
Las copias se acumulan sin límite; es una decisión consciente mientras el espacio en disco no sea un problema.
- Idempotencia
- Audit log
- Rollback
- 05
PDF sin servidor de PDF
La ficha de reclutamiento es una página optimizada para imprimir, con QR al perfil: el PDF lo genera el navegador, sin mantener un Chromium en una función serverless.
Trade-off
El PDF depende del diálogo de impresión del navegador en lugar de descargarse directamente.
- Print CSS
- QR






Siguiente proyecto · 02
New Vision Sports →
