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)
NVS Platform — vista principal del proyecto

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

  1. 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
  2. 02Builder de 7 pasos con autoguardado, vista previa en vivo y subida de fotos a Cloudinary
  3. 03Roles admin, editor y atleta con Supabase Auth (acceso con código de un solo uso por email) y políticas RLS en PostgreSQL
  4. 04Flujo de revisión con diff de cambios desde la última publicación y solicitud de cambios por email (Resend)
  5. 05Migración de los perfiles existentes desde Carrd con un script que re-aloja las fotos en Cloudinary
  6. 06Tracking de visitas, exportación CSV y opciones para compartir cada perfil: QR, WhatsApp y ficha imprimible en PDF
  7. 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

  1. 01

    Builder

    El equipo o el atleta completa el perfil; cada cambio se autoguarda en Supabase.

  2. 02

    Revisión

    El staff ve qué cambió desde la última publicación y aprueba o pide cambios.

  3. 03

    DNS

    Se crea un registro A en Cloudflare para nombre.playwithnewvision.com.

  4. 04

    Subdominio

    Alta del subdominio en cPanel a través de su API (UAPI).

  5. 05

    HTML estático

    Se genera el perfil con su SEO y JSON-LD, más una ficha imprimible con QR.

  6. 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.

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
NVS Platform — captura 2NVS Platform — captura 3NVS Platform — captura 4NVS Platform — captura 5NVS Platform — captura 6NVS Platform — captura 7

Siguiente proyecto · 02

New Vision Sports →