Una partida publica ya no puede ser desechable
Las ultimas 24 horas en Nima Project tuvieron actividad concentrada en tres sitios:
- el workspace compartido
world-cup-porraworld-cup-api
No hubo una gran expansion funcional como la del dia anterior. Hubo algo mas importante para una app que ya esta viva:
Ultimate Porra empezo a asumir que una partida publica no puede operarse como si fuera un objeto desechable.
Cuando una partida ya tiene usuarios, votos, bloqueos por fase y consecuencias sobre scoring, no basta con dejarla visible en la home. Hay que gobernarla mejor.
La senal mas clara: borrar ya no puede ser un click alegre
En el frontal aparecen varios commits que, juntos, cuentan la misma historia:
Add entry pool card management menuHide public pool management menuRequire name confirmation before deleting gamesPolish entry cards and recovery flow
La secuencia importa.
Primero se abre la puerta a gestionar partidas desde la propia tarjeta. Despues se esconde esa opcion cuando no toca. Y finalmente el borrado deja de ser una accion ligera y pasa a exigir confirmacion por nombre.
Eso es una correccion de tono de producto.
Hace un par de dias la partida se estaba convirtiendo en unidad principal de experiencia. Estas 24 horas anaden la parte incomoda pero necesaria: si la partida es importante, destruirla tiene que sentirse importante.
No es solo UX defensiva.
Es admitir que la interfaz ya no esta manipulando prototipos. Esta manipulando objetos con historia.
El backend acompana: mejor soft delete, mejor restore, menos mutaciones ambiguas
La misma tesis aparece en world-cup-api:
Add safe game management endpointsBlock locked public game joinsAdd admin restore for soft-deleted gamesRestrict API CORS origins
Y tambien en dos commits intermedios que endurecen reglas antes de destruir datos:
Lock preview predictions server-sidePrevent deleting locked match predictions
Aqui el cambio es bastante serio.
La API deja de comportarse como un CRUD tolerante y empieza a comportarse como una superficie operacional con estados.
Una partida ya no es simplemente:
- se crea;
- se usa;
- se borra.
Ahora pasa a ser algo mas real:
- puede estar bloqueada;
- puede impedir joins nuevos;
- puede requerir borrado seguro;
- puede quedar en soft delete;
- y puede necesitar una restauracion administrativa.
Eso cambia la semantica entera del sistema.
La pregunta deja de ser "que endpoint hace esto" y pasa a ser "en que estado esta la partida y que mutacion sigue siendo legitima".
La conversacion de auth apunta en la misma direccion: no ocultar el problema, encauzarlo
En las sesiones de Codex del 17 de junio aparecio una decision muy concreta sobre el alta de usuarios en Porra.
El cierre desplegado lo resume asi:
- Porra ya no lo trata como
ok: true. - Devuelve
409 USER_EMAIL_ALREADY_EXISTS. - La pantalla muestra un aviso claro.
- Aparece una accion visible
Restablecer contraseña. - No redirige automaticamente.
Y la documentacion del contrato del BFF se actualizo en el mismo sentido:
la UI puede mostrar una accion de recovery, pero no debe mandar el email por detras ni forzar al usuario a otro flujo.
Esto no parece una historia sobre partidas, pero en realidad si lo es.
Cuando el producto madura, deja de esconder fricciones operativas detras de respuestas neutras. Empieza a reconocer el estado real y a ofrecer la accion correcta.
Con las partidas pasa lo mismo:
- si esta bloqueada, no debes poder entrar;
- si existe un riesgo de borrado, debes confirmarlo;
- si fue eliminada, necesitas restaurarla de forma explicita;
- si el email ya existe, debes ver la salida real.
La app deja de fingir simplicidad. Empieza a orquestarla.
Incluso el scoring entra en modo "una verdad visible"
No todo en la ventana fue operacion de partidas, pero hay dos commits que sirven de remate:
Unify displayed score sourceFix wildcard bonus scoring
El primero encaja con una idea que ya venia empujando el producto: una sola fuente visible de puntuacion.
El segundo corrige una fuga mas fina: si el bonus comodin no puntua igual en front y back, toda la confianza operacional se resiente.
Eso importa porque las barandillas no sirven de mucho si el producto protege el ciclo de vida de una partida, pero no protege la interpretacion de sus puntos.
Las ultimas horas muestran justo lo contrario:
- la mutacion se restringe mejor;
- la recuperacion se vuelve explicita;
- y la puntuacion se alinea otra vez.
Los retoques de layout no son decoracion; son parte del nuevo contrato
Hay varios commits pequenos del frontal que podrian parecer solo maquillaje:
Show locked public pool countdownsLock public World Cup entry countdownAnchor entry card status footerTighten entry card countdown statusFix home live match card and entry carouselsFix tablet carousel overflow and home live points
Pero todos empujan hacia el mismo sitio.
Si una partida puede bloquearse, si una cuenta puede necesitar recovery y si una accion peligrosa necesita contexto, entonces la tarjeta de entrada deja de ser una portada bonita.
Tiene que convertirse en una superficie de estado legible.
Countdown, footer anclado, overflow corregido, puntos live estables: no son detalles aislados. Son la infraestructura visual que permite que esas restricciones se entiendan sin volver la app confusa.
Lo que realmente cambio en estas 24 horas
Lo facil seria resumir el dia como:
- mas endpoints;
- mas validaciones;
- mas polish.
Pero la historia de fondo es otra.
Ultimate Porra empezo a tratar la partida publica como un objeto persistente, con memoria y con riesgo operacional.
Eso obliga a tres cosas a la vez:
- mejores permisos y bloqueos;
- mejores caminos de borrado y restauracion;
- y mejor explicacion visible del estado para quien juega y para quien opera.
Lo que me llevo de este tramo
- Gestionar una partida desde su tarjeta obliga a endurecer inmediatamente lo que se puede borrar y cuando.
- Soft delete y restore marcan el paso de demo funcional a producto que ya se puede operar sin panico.
- Un join bloqueado por fase o estado pertenece al backend, no solo al copy de la UI.
- El alta con
USER_EMAIL_ALREADY_EXISTSy CTA de recovery sigue la misma logica: dejar de ocultar el estado real y ofrecer la accion correcta. - Unificar la fuente visible de scoring y corregir el bonus comodin protege la confianza justo cuando la operacion se vuelve mas estricta.
- Los ajustes de countdown, cards y carruseles son parte del contrato de estado, no simple maquillaje.
Estas 24 horas no anadieron la novedad mas ruidosa del proyecto.
Anadieron algo mas valioso:
la idea de que una partida publica ya no puede tratarse como algo facil de crear, tocar y borrar, sino como un objeto vivo que hay que bloquear, explicar, recuperar y puntuar con disciplina.
Parte de mis notas de producto y plataforma. Sigue el blog o escribeme.