Freelance / Proyecto para cliente · 2026

Copon

Torneos privados de prode

Plataforma para armar torneos privados de prode con puntaje automático y tabla en vivo. Está online en copon.com.ar corriendo sus primeros torneos.

Rol

Desarrollador Full Stack (proyecto para cliente)

Contexto

Freelance / Proyecto para cliente

Año

2026

Enlaces

Tecnologías: Next.jstRPCDrizzle ORMSupabaseTanStack QueryBetter-AuthTailwindshadcn/ui

Resumen

Copon es una plataforma web para armar torneos privados de prode entre amigos, el laburo o una comunidad. El que organiza crea el torneo, invita con un link, y la app puntúa cada fecha sola. No es una plataforma de apuestas: es la herramienta que reemplaza la planilla.

El problema

Un cliente vino con el prode de su grupo corriendo en un Excel y un chat de WhatsApp. Alguien tenía que cargar cada resultado a mano, recalcular la tabla y arbitrar discusiones sobre quién había pronosticado qué y cuándo. Los pronósticos llegaban tarde, los puntos salían mal y nadie podía ver la tabla sin pedir el archivo.

Lo que hacía falta no era una planilla más grande: era pronósticos que cierran con una fecha límite, puntaje calculado por el sistema y una tabla que cualquiera abra desde el celular.

Landing: organizá tu torneo, gestioná el prode

Unirse a un torneo

Flujo mobile: unirse a un torneo por link de invitación (fase de grupos del Mundial 2026)

Decisiones

  • Puntaje y tabla como módulo puro (@repo/core): es la parte que tiene que estar bien, así que vive sin framework alrededor, devuelve Result<T,E> en vez de tirar excepciones y está testeada con Vitest antes de que se renderice nada.
  • tRPC en vez de una capa REST: un solo desarrollador, un solo codebase, y cada router tipado del servidor al cliente, así un cambio en un payload rompe el build y no el prode.
  • Drizzle ORM sobre Postgres de Supabase: el schema es TypeScript, las migraciones quedan versionadas en el repo y las queries se leen al lado de la lógica de negocio.
  • Monorepo T3-turbo separado por responsabilidad (@repo/db, @repo/api, @repo/auth, @repo/core, @repo/ui, @repo/validators): la lógica pura nunca importa Next.js, así se mantiene testeable y portable.
  • Better-Auth con links de invitación: entrar a un torneo tenía que ser un tap desde WhatsApp, no un formulario de registro más un código.
  • Tres formatos configurables (Liga todos contra todos, Grupos más Llaves, Solo Llaves) con equipos custom o reales, fixture editable y sistemas de puntos configurables: cada grupo puntúa su prode distinto y la app tenía que absorber eso en vez de imponer un reglamento.
  • TanStack Query en el cliente: la tabla y las fechas cambian mientras la gente mira el partido, así que la caché revalida en vez de que el usuario recargue.
Formato Grupos más Llaves: vista de llave
Formato Liga: tabla de posiciones
Jornada finalizada: fixture y resultados
Tabla del prode: quién va ganando el pozo

Resultado

Copon está online en copon.com.ar corriendo los prodes del grupo del cliente, arrancando por la fase de grupos del Mundial 2026. Ya nadie carga puntos a mano: entran los resultados, la tabla se actualiza y el pozo por ronda lo resuelve el mismo código que está cubierto por tests.

Lo que me confirmó es que mantener la lógica de negocio pura se paga en la primera semana: cada discusión sobre el puntaje se cerró leyendo un test, no leyendo la interfaz.