Rosco
Convertí el clásico juego de palabras por letras en un producto web completo: multijugador en tiempo real, ranked con Elo, contenido editorial diario y una app que se instala y se juega sin descargar nada.
Versión mobile





- 01React 19 + Vite + TypeScript
- 02Vercel Serverless API
- 03Neon Postgres (gru1)
- 04Neon Auth (Google)
- 05Motor de juego en tiempo real
- 06Ranked con Elo
- 07Eventos en vivo con ranking
- 08Tema claro / oscuro
- 09PWA + bundles offline
- 10Pipeline editorial JSONL
- 11Panel de administración
- 12i18n (ES/EN)
Sobre el proyecto
Rosco es mi propio producto: un juego de preguntas por letras —el clásico rosco— que funciona 100% en el navegador. Empezó como un juego para jugar solo y hoy es una plataforma con modos locales (1, 2 o más jugadores en la misma pantalla), un rosco diario que queda congelado por día, duelos online 1vs1 con matchmaking, salas de hasta ocho personas, ranking con Elo, amigos e invitaciones. Detrás del juego hay una API serverless en Vercel y una base Postgres en Neon: las preguntas, los resultados, los perfiles y el ranking viven ahí. El contenido se cura por lotes (JSONL) con dry-run, auditoría y validación de fuentes antes de publicarse, y el panel de administración permite editar palabras, resolver reportes y seguir estadísticas de juego. La app también tiene eventos en vivo con estética propia (con podio y ranking en tiempo real) y apariencia configurable: tema claro u oscuro desde Configuración → Apariencia. Todo el frontend está internacionalizado (ES/EN) y la app se instala como PWA, con bundles offline para seguir jugando sin conexión.
El problema
Un juego de preguntas parece simple hasta que lo llevás a multijugador. El rosco online exige que dos personas jueguen exactamente el mismo tablero al mismo tiempo, con un reloj compartido y sin que la respuesta correcta viaje al navegador mientras la letra sigue activa; respuestas, puntos, desempate y Elo se resuelven en el servidor. A eso se suma la latencia: la API y la base tienen que estar en la misma región para que la cola, los turnos y el ranking respondan rápido desde Argentina. El otro desafío fue el contenido. Un rosco necesita preguntas correctas, con variantes de respuesta y dificultad balanceada. Sin un flujo editorial sólido, el juego se desactualiza o acumula errores. Había que construir la máquina de contenido, no solo el juego.
El enfoque
El frontend es React 19 + Vite + TypeScript. La API es una única función serverless en Vercel que centraliza contenido, perfil, estadísticas y juego online; Postgres vive en Neon (São Paulo) y la función corre en la misma región (gru1) para que cada request no cruce el continente. La autenticación usa Neon Auth con Google, y las decisiones sensibles —respuestas, reloj, puntos, Elo— jamás se resuelven en el cliente. Para el contenido armé un pipeline en JSONL con importadores, validación de fuentes y auditoría, más un panel de administración con roles. Los roscos diarios se pre-generan y congelan: si una palabra se edita después, una partida ya jugada no cambia. La dificultad se balancea internamente sin exponerse al jugador, y el catálogo mezcla categorías oficiales con categorías creadas por la comunidad. El deploy es continuo desde Vercel, con Analytics y Speed Insights para seguir el uso real.