Preparando la cartelera
Preparando la cartelera
Wargonaut · Ultimate
Avance del MVP · Actualizado el
Base técnica y visual
Proyecto local, identidad Wargonaut, módulos base y controles automáticos.Producto y modelo de datos
Rutas, wireframes, reglas de producto, modelo PostgreSQL y datos de demostración.Avance visible del desarrollo
El inicio muestra un historial centralizado con la fecha y el estado real de cada entrega.Trazabilidad de errores
Registro central, PostgreSQL local, respaldo seguro, correlación y límites de error verificados.Autenticación local sustituible
Registro, acceso, cierre y recuperación local con credenciales y sesiones verificadas en el servidor.Acceso responsive e interacción
Acceso móvil unificado, cierre con respuesta visible y desarrollo en Windows sin escanear rutas protegidas.Autorización y RLS
Sesión validada, permisos por recurso y políticas RLS bajo roles PostgreSQL no propietarios.Fechas y estados centralizados
La fecha del inicio se deriva del historial central y autorización/RLS quedó validada con el resto de la Semana 2.Administración de torneos
Panel único por pestañas y gestión de torneos, plantillas, calendario y roles de planillero asignables, revocables o reasignables bajo RLS.Directorio global de usuarios
Consulta paginada de cuentas, perfiles vinculados y roles activos o revocados, exclusiva para superadministración activa y protegida por RLS.Autogestión y operación ampliada
Autogestión pública, capitanía, etapas personalizadas y soporte global seguro agregados al backlog; todavía sin implementación.Panel de trazabilidad de errores
Consulta, filtros y seguimiento auditado de errores para superadministración agregados al cronograma; todavía sin implementación.Estado de cuentas y vínculos
Estado operable desde cada card y vínculos de jugador junto al perfil, auditados y protegidos ante concurrencia para superadministración activa.Administración de roles
Roles en lista con alta, revocación, reactivación y borrado lógico confirmado, transaccional, auditado y seguro ante concurrencia.Terminología y controles compartidos
UserRole y user_role unificados, controles asíncronos recuperables, backdrops locales y estilos compartidos verificados de extremo a extremo.Sesión sobre usuarios
Cambio completo y auditado desde una sesión superadministradora hacia otra cuenta activa, sin retorno directo ni exposición de credenciales.Recuperación administrativa
Enlaces administrativos efímeros sobre la recuperación normal, con uso único, vencimiento, hash persistido y auditoría sin secretos.Historial de vinculaciones
Vínculo inmediato sin confirmación adicional y revinculación compacta con indicador de espera desde el historial, con bloqueo informativo cuando el perfil pertenece a otra cuenta.Operación rápida de partidos
Calendario filtrable por división y estado, partidos desplegables y creación o edición programada mediante formularios modales compartidos.Gestión rápida de plantillas
Plantillas filtrables por división, equipos desplegables, altas modales y acciones visibles de edición o retiro auditado por jugador.Gestión rápida de equipos
Equipos filtrables por división, con altas y ediciones modales, eliminación confirmada y auditada, y una dirección web más clara en los formularios.Acciones administrativas más claras
Creación de torneos desde un formulario modal con acciones bien alineadas y cierre de sesión legible en todos sus estados.División mixta garantizada
Cada torneo nace con la división Mixta, las divisiones se pueden eliminar con confirmación y auditoría, y ninguna operación deja un torneo sin divisiones.Calendario para fechas de torneo
Fechas inicial y final seleccionables desde un calendario Wargonaut responsive, accesible por teclado y compartido entre creación y edición.Autogestión de torneos públicos
Creación desde Inicio, acceso a torneos propios desde Mi Arena y archivo seguro desde administración, con cartelera e inscripción reservadas para la Etapa 3.Capitanía, plantillas y etapas
Capitanía asignable, plantillas editables por el capitán dentro de su alcance y etapas personalizadas y ordenadas; el capitán no puede borrar etapas en uso.Torneos públicos navegables
Cartelera, torneo y partido abiertos sin sesión desde el inicio en uno o dos toques, con posiciones, resultados e inscripción personal sobre proyecciones que no publican datos privados.Restauración de torneos archivados
Archivar deja de ser definitivo: la creadora o la superadministración devuelven el torneo al estado que tenía antes, con confirmación y la misma auditoría del archivado.Tienda, carrito y pedido pendiente
Escaparate público con búsqueda y filtros, detalle por producto, carrito persistente de cuenta o invitado y pedido pendiente cuyo precio, existencias y total decide PostgreSQL; store_admin crea productos y variantes y ajusta inventario con auditoría y sin SQL manual.Compra rápida desde el catálogo
Card flotante del carrito, compra directa desde la tarjeta, filtros plegables en móvil que no consultan al servidor, cantidades que se guardan solas y datos de entrega en un modal antes de confirmar el pedido.Cabecera fija con iconos de destino
La cabecera se queda arriba en toda la aplicación con el mismo icono por destino que las tarjetas del inicio, Administración incluida; bajo 900 px es una sola fila con el isotipo y objetivos táctiles de 44 px.Catálogo demostrativo sin duplicados
El escaparate vuelve a mostrar un solo catálogo demostrativo: los datos de muestra viven únicamente en la semilla local y ninguna migración lleva productos ni precios ficticios a otros entornos.Presencia de Wargonaut en torneos
El organizador solicita la presencia de Wargonaut en su torneo y solo un superadministrador la confirma o la rechaza, con auditoría de quién pidió y quién decidió. Es el dato que habilitará la entrega en torneo; la tienda todavía no la ofrece.Método de entrega y tarifa de envío
El carrito elige entre entrega en torneo sin costo y entrega a domicilio con tarifa por ciudad, y el servidor calcula el envío dentro de la misma transacción del pedido: el total deja de asumir cero. store_admin edita las tarifas desde /admin/tienda con auditoría y sin SQL manual. Sin método disponible el carrito lo dice y no crea el pedido.Pedidos y reprogramación de entrega
store_admin ve todos los pedidos desde /admin/tienda, con el contacto y la dirección necesarios para despachar y filtros por torneo y método de entrega. Puede reprogramar un pedido pendiente con entrega en torneo a otro torneo confirmado y en plazo: el total y el inventario no cambian y el estado del pedido no se toca. El lector corre bajo la RLS de un rol no propietario y la reprogramación queda auditada solo con actor, fecha, pedido y los dos torneos, sin datos del comprador.Ronda de interfaz posterior a P0.8.1
El menú de cuenta ofrece accesos rápidos a mi cuenta, cerrar sesión, planillar, administrar torneos y administrar usuarios según lo que cada cuenta puede hacer; /admin/tienda pasa de un tablero único a pestañas de Catálogo, Pedidos y Torneos con Envíos e Históricos reservadas; la presencia de Wargonaut sale de la pestaña de datos del torneo a su propia tarjeta y Archivar torneo pasa a icono con confirmación. Correcciones de presentación en cabecera, tienda, carrito, administración de torneos y sección pública de torneos entre 320 y 650 px, sin tocar reglas de negocio ni migraciones.Confirmar pago y empacar pedidos
La pestaña Pedidos de /admin/tienda filtra en el cliente por todos, pagos y por confirmar pago, siempre del más viejo al más nuevo, sin volver a PostgreSQL. Confirmar pago —exclusivo del superadmin— pide banco obligatorio y número de transacción opcional y pasa un pendiente a pagado; Empacado pasa un pagado a preparando y lo traslada a la pestaña Envíos o a la de Torneos según su método de entrega. Cada transición queda auditada sin datos del comprador. Checkout, pasarela, «Enviado», confirmación de entrega por código, tarifas dentro de Envíos e Históricos siguen pendientes.Categoría de producto editable
Un store_admin o superadmin crea, renombra y archiva tipos de categoría desde /admin/tienda sin SQL manual, cada cambio auditado con actor y diferencia antes/después. El catálogo de administración filtra por categoría real de product_category —ya no el enum fijo disc/pin/sticker/dinoclip—, y una categoría archivada sigue apareciendo en el filtro mientras algún producto la conserve. Los cuatro productos sembrados mantienen su categoría original tras la migración de datos, y renombrar una categoría propaga el nombre a sus productos automáticamente.Cancelar la presencia de Wargonaut y asistir sin invitación
Junto al estado de cada torneo en «Torneos autorizados», el superadmin tiene un botón que cambia con la presencia de Wargonaut: confirma la asistencia si el torneo la solicitó, la cancela si ya estaba confirmada, o la declara sin invitación si el torneo nunca la pidió —y ahí solicitante y decisor quedan auditados como la misma cuenta—. Cancelar una presencia confirmada reprograma los pedidos con entrega en ese torneo al siguiente torneo confirmado y dice cuántos movió; si no hay ninguno al que trasladarlos, quedan pendientes de confirmación en vez de bloquear la cancelación. Una presencia cancelada es un estado propio y no se confunde con un rechazo, y ni ella ni un rechazo ofrecen más transiciones.Pago por transferencia y estados del pedido
El carrito muestra a dónde transferir antes de crear el pedido y lo deja «por confirmar pago»; la confirmación repite los datos de la cuenta. /admin/tienda completa sus cinco pestañas: Envíos marca Enviado y agrupa por la ventana de tres días de «en tránsito», Torneos cierra la entrega con el código que solo su comprador ve, Históricos lista y pagina los pedidos cerrados, y las tarifas de envío pasan a vivir dentro de Envíos. Cancelar un pedido pide un motivo obligatorio y no devuelve existencias: ese pendiente queda registrado en el backlog. En Mi Arena, «Mis pedidos» muestra el estado de cada compra y el código de entrega en torneo, sin repetir el contacto que la cuenta ya conoce. Queda fuera la pasarela de pago: no hay proveedor aprobado ni credenciales de sandbox, así que el botón del carrito conserva su rótulo actual y no existe checkout en línea.Planillaje rápido
Handshake preparado con contrato, reparto entre dos desarrolladores y criterios de captura móvil, goles pendientes y correcciones sin borrar historial. Este registro corresponde al contrato inicial previo a la implementación.Planillaje rápido y recuperación segura
Corrección local validada con migración 0058, reintentos sin duplicar goles y recuperación de participantes y diálogos. Cuatro pruebas PostgreSQL y partido móvil completo 2–1; aprobación funcional de Luis registrada el 8 de septiembre.Presentación del partido y próximos ajustes
Historial móvil con local y visitante, goles sin identificar, marcador flotante e iconos de edición. Corregir conserva auditoría sin pedir motivo. Agrupación gol/asistencia y tabs programadas para el siguiente corte P0.10; posesión y actualización parcial para P0.11.Gol y asistencia vinculados
Gol y asistencia en una tarjeta pública; pestañas para identificar en cualquier orden y retomar participantes. Seis pruebas PostgreSQL y simulación móvil 2–1 con 40 eventos, reintentos y cierre con anotador pendiente aprobadas. Aprobación funcional de Luis registrada el 8 de septiembre.Pestañas de identificación reconocibles
Pestañas Gol/Asistencia con contenedor oscuro común, selección de fondo cian y texto oscuro, foco visible y controles de 48 px. Reutiliza la presentación de pestañas existente.Cancelar un gol accidental
Cancelar gol desde el selector anula el gol y su asistencia sin borrar historial. Conserva la intención durante fallos de red y bloquea dobles envíos.Posesión, estadísticas y actualización de partidos
Posesión reconstruible, turnover público por equipo, estadísticas y actualización parcial automática/manual. Cierre técnico verificado: lector público corregido, recuperación de red, migraciones verificadas y las dos pruebas de estadísticas públicas alineadas con el dorsal de la migración 0071 (suite PostgreSQL P0.11 29/29, npm run check y db:verify en verde). Luis autorizó la integración el 9 de septiembre de 2026.Turnover cambia la posesión sin jugador
Turnover directo en un toque: no solicita ni muestra jugador, registra la transición de posesión y deja al otro equipo como atacante. La atribución individual queda fuera del evento.Turnover centrado en el historial
En la vista pública, cada turnover ocupa una fila central única y muestra solamente la hora y el tipo de evento, sin equipo, lado ni marcador circular.Estadísticas de equipo desplegables
Las estadísticas públicas por equipo ahora se presentan en una card desplegable al final del partido, debajo del historial, con interacción accesible por teclado.Estadísticas de jugador desplegables
Las estadísticas públicas por jugador pasan a una card desplegable al final de la vista, después del historial y de las estadísticas por equipo, con el mismo patrón accesible.Gol y asistencia en una sola jugada
El historial de planillaje agrupa gol y asistencia en una sola fila con acciones compartidas. Identificar abre un modal cuando falta el anotador o la asistencia.Asistencia pendiente visible en cada gol
Cada gol del historial del planillero muestra su asistencia; cuando aún no fue registrada, queda visible como Por identificar.Bloqueos pendientes de identificación
Los bloqueos pueden registrarse sin jugador y completarse después con Identificar, conservando equipo, posesión, estadísticas e historial append-only. La prueba específica pasó; las dos pruebas de estadísticas públicas que faltaban se alinearon con las columnas de dorsal de la migración 0071 y la suite PostgreSQL P0.11 completa quedó en 29/29.Acciones priorizadas según la posesión
La acción propia de la posesión aparece primero y ocupa todo el ancho: Gol para el atacante y Bloqueo para el defensor. La acción alternativa queda después y compacta sin reducir su área táctil de 48 px.Ataque y defensa visibles en el marcador
El marcador público muestra, sin halo, una espada junto a Local cuando ataca y un escudo junto a Visitante cuando defiende —o a la inversa—, alineados con esos rótulos en el borde interior de cada columna.Indicador de ataque refinado
En el historial público, la espada de posesión ahora comparte el gris tenue del escudo y adopta una silueta más angular, con guarda y empuñadura visibles.Icono de espada alineado con la referencia
La espada que identifica al equipo atacante se redibujó con la silueta diagonal de referencia: hoja angular, guarda amplia y empuñadura visible, sin una rotación adicional.Plan de trabajo independiente para Mi Arena
Plan aprobado con contrato común, datos e interfaz en ramas independientes y una sincronización tras completar ambas primeras entregas. Incluye prompts de handshake, desarrollo y recepción en integración; la implementación de Mi Arena sigue pendiente.Mi Arena: datos y vistas integrados
Integración recibe A1 —lectura privada completa: servicio, runtime arenaPlayerReader, migración 0072 y pruebas de comportamiento y PostgreSQL— y B1 —vistas tipadas de panel, calendario y equipo con fixtures solo de prueba—. Sin conflictos de contenido: los conjuntos de archivos son disjuntos y el contrato H0 no cambió por ninguna de las dos ramas. npm run check en verde (lint, tipos, 340 pruebas, build). En I1 el contrato suma una señal opcional calculada por servidor para distinguir un partido programado con hora pasada, la única incompatibilidad que A1 y B1 reportaron por separado. Faltan las rutas conectadas al runtime, los recorridos reales en móvil y escritorio y la robustez de datos sobre I1: la Parte 2 (A2 y B2) continúa desde este punto.Mi Arena: espacio privado del jugador
Cierre técnico de Mi Arena con las cuatro entregas recibidas (A1, B1, A2, B2). /mi-arena, /mi-arena/calendario y /mi-arena/equipo quedan conectadas al lector privado arenaPlayerReader como Server Components que derivan la identidad de la sesión: partido prioritario, posición, estadísticas propias y pendientes del equipo, calendario y plantilla, con estados ready/empty/blocked/unavailable y sin caché compartida. La función SECURITY DEFINER (migraciones 0072+0073) reúne las tres lecturas en un snapshot con un solo now() y puebla scheduleState (upcoming/overdue) para que la interfaz no consulte el reloj del navegador; el único privilegio nuevo es EXECUTE para wn_arena_app. Merge limpio y sin código duplicado —matchStatusLabels quedó unificado en player-arena-shared—. Verificación: npm run check (346 pruebas, build), npm run db:verify (71 migraciones), arena-player-postgres 15/15 y regresión de objetos compartidos en verde. Limitación transversal conocida y documentada: currentUser() no distingue un fallo técnico de «sin sesión» durante una caída de PostgreSQL; su corrección se propone fuera de P0.12. Luis completó la revisión funcional el 10 de septiembre de 2026.Panel visible para cuentas nuevas
La navegación flotante de Mi Arena permanece disponible para toda cuenta autenticada aunque todavía no tenga perfil deportivo, equipo, calendario o contexto de torneo. Panel, Calendario y Equipo siguen accesibles sin inventar un contexto, mientras las visitas anónimas conservan el acceso protegido. Regresión automatizada, 347 pruebas y compilación de producción en verde.Solicitudes de vinculación cuenta–jugador
Solicitud guiada con desplegables filtrables y encadenados de torneo, equipo y jugador; cancelación y decisión con alcance de capitanía, dueño exacto y superadministración; aprobación transaccional con rol y auditoría. Pendiente de aprobación de Luis.Ubicación del torneo con listas oficiales
Crear un torneo ya no pide escribir la ubicación a mano: país, departamento y ciudad son desplegables filtrables encadenados —el mismo combobox de la vinculación de jugador, ahora compartido— con Colombia y su bandera preseleccionadas. El departamento acota la lista oficial de municipios (32 departamentos y 1104 ciudades tomadas del conjunto público marcovega/colombia-json y volcadas en el repositorio, sin dependencia nueva) y solo guía la búsqueda: del torneo se siguen guardando ciudad y código de país. Fuera de Colombia la ciudad se escribe completa. El selector de zona horaria queda oculto con America/Bogota fija mientras la operación sea colombiana. Aplica a la creación desde administración y desde Mi Arena; la edición del torneo no cambió. Pendiente de revisión de Luis.Estados de calificación de espíritu verificados
La calificación de espíritu identifica el equipo propio y el rival, explica la escala de cinco criterios y presenta el plazo calculado con la hora del servidor. Los estados de ventana abierta o cerrada distinguen una calificación conservada del 10 derivado por ausencia de envío. Fixtures exclusivos de prueba cubren edición, cierre, bloqueo y caída del lector, con controles compartidos, teclado y adaptación móvil verificados.Configuración de clasificación y desempate
La casilla «Cuenta para la clasificación» ya se guarda: hasta ahora viajaba desde el formulario hasta la base y se perdía en la función que escribe la etapa, así que el organizador la marcaba y la tabla no cambiaba. Ahora la decisión se escribe, se audita con su antes y su después, y solo la mueve quien puede organizar el torneo con rol vigente. El orden de posiciones queda cerrado: partidos ganados, el segundo criterio que eligió el torneo entre diferencia de puntos y espíritu, el que no eligió, puntos a favor y el nombre del equipo. Excluir una etapa mueve las posiciones y su promedio de espíritu, y deja intacta la tabla general del torneo. Luis dio por cerrada la etapa de espíritu el 10 de septiembre de 2026; la decisión queda registrada en docs/decisions/0038-spirit-of-the-game-closure.md.Isotipo animado y acceso directo a los paneles
Inicio con el contorno oficial animado en bucle, accesos por iconos, cartelera que prioriza torneos en curso e historial desplegable. El panel de creación cierra la página. La animación respeta movimiento reducido.Productos visibles al entrar a la tienda
La tienda abre directamente sobre el catálogo: filtros, carrito y productos visibles desde el primer momento. Se retiró el bloque promocional que retrasaba la compra, manteniendo el catálogo público y su navegación móvil.Arena y Torneos con responsabilidades claras
Arena queda reservada para la vista de inicio. La cartelera, los torneos y sus partidos pasan al módulo Torneos bajo /torneos, con contratos, API, pruebas y documentación alineados.Catálogo compacto y filtros consistentes
El catálogo de tienda presenta tarjetas más compactas, cuatro columnas en escritorio y dos productos por fila incluso en celular. El carrito rápido comparte la línea del nombre, el acceso al carrito se alinea con los filtros en escritorio y la categoría reutiliza el selector visual de creación de torneos: vacío significa sin filtro, sin una opción redundante de «Todas». Su chevrón SVG simétrico gira sobre su propio eje sin cambiar de posición. Editar una selección ya no reinicia el desplegable; al tocar fuera se cierra. En móvil, el panel de filtros flota sobre el catálogo. El modal de variantes conserva el foco sin reiniciarlo en cada selección, evitando saltos o reaperturas del control.Errores con salida y página 404 personalizada
Las pantallas de error recuperable permiten reintentar o regresar al inicio, y cualquier dirección inexistente muestra una vista 404 propia con accesos al inicio y a los torneos públicos.Eliminación visual de productos
La acción para retirar un producto del carrito usa un icono de basurero compacto y conserva un nombre accesible específico para cada producto.Datos de compra precargados y selectores filtrables
La confirmación del pedido precarga el nombre y correo de la cuenta sin impedir editarlos, y ciudad y dirección guardada reutilizan los desplegables filtrables del formulario de torneos.Acciones de torneos más claras en celular
La cancelación de asistencia se distingue desde el inicio con el tono rojizo de las acciones de riesgo, y los accesos de la cabecera de torneos permanecen juntos en una sola línea en celular.Resumen compacto de torneos accesibles
La lista administrativa de torneos se vuelve más compacta en celular: estado, nombre, lugar, fechas y cifras se recorren con menos desplazamiento, mientras un ojo y un caret hacen evidente dónde entrar a cada torneo.Cabecera y acciones móviles refinadas
La cabecera de torneos ocupa menos alto, las acciones móviles recuperan rótulos claros y el acceso visual al detalle aparece justo debajo del botón de presencia, dentro de su misma columna.Panel modular compacto
Mi Arena organiza cada módulo como una sección plegable con título, resumen breve y caret, y añade iconos a Panel, Calendario y Equipo para que la navegación sea más compacta e intuitiva.Transferencia bancaria y llave Bre-B
El panel de pago distingue la transferencia bancaria del pago con llave Bre-B, permite copiar la llave y obtiene ambas opciones desde la configuración del servidor.Perfil personal editable
Mi Arena incorpora un panel de datos de cuenta para consultar y editar nombre, correo, apodo y número predeterminado, con validación y escritura propia auditada.Desvinculación directa del perfil
Una cuenta con perfil de jugador activo puede desvincularlo directamente desde Mi Arena, con confirmación clara, conservación del historial y auditoría del cambio.Panel de espíritu con alcance administrativo
Mi Arena reúne las calificaciones de espíritu pendientes y enviadas. Capitanes califican desde su equipo; organizadores y superadministradores pueden completar cualquiera de los dos lados del partido, siempre dentro de la ventana y con autorización revalidada en la base.Estadísticas en una pestaña propia
Mi Arena separa el resumen deportivo del panel de cuenta en una pestaña Estadísticas que conserva el torneo y el equipo seleccionados, reúne próximo partido, clasificación y rendimiento personal, y mantiene los mismos estados de acceso y recuperación.Pestañas adaptables sin desplazamiento lateral
La navegación de Mi Arena elimina el desplazamiento horizontal en pantallas pequeñas: primero reduce cada pestaña a su icono accesible y, en los teléfonos más estrechos, distribuye los cuatro accesos en dos filas. Equipo comparte el glifo de tres siluetas usado en la administración de torneos.Mis partidos y estadísticas de amistosos
Cualquier cuenta activa crea amistosos desde Planilleros o Mi Arena. Mis partidos reúne planillas y enlaces públicos con marcador actualizado; los perfiles vinculados acumulan sus estadísticas en Amistosos, separados de los torneos. Migraciones locales, permisos y recorrido móvil verificados.Formulario de partido más rápido
Crear mi partido propone Blanco y Negro como nombres iniciales, precarga la fecha y hora actuales de Colombia, usa los mismos controles del administrador de torneos y permite omitir claramente la hora y el lugar.Vista pública unificada
La vista pública de los amistosos adopta la misma cabecera, marcador fijo, historial visual y estadísticas desplegables de los partidos de torneo, conservando el enlace compartible y la actualización automática.Inscripción de jugadores mediante enlace
Capitanes y organizadores pueden crear un enlace revocable para una plantilla concreta. Cualquier jugador con el enlace registra su nombre y dorsal sin entrar a la administración; el servidor vuelve a validar el equipo, evita dorsales repetidos y conserva el alcance del enlace.Acceso público de enlaces corregido
La visita pública ya puede resolver y usar los enlaces de inscripción de plantilla. El permiso se limita a entrar al esquema y ejecutar las dos funciones protegidas, sin abrir acceso directo a tablas ni a otras operaciones.Inscripción adaptable a celular
La inscripción por enlace adopta una tarjeta propia de Wargonaut con contexto visible de torneo y división, jerarquía compacta, campos táctiles y composición a sangre en celular. Verificada visualmente a 390 px y al ancho mínimo de 320 px.Inscripción vinculada con la cuenta
La inscripción permite iniciar sesión, cargar el apodo o nombre y dorsal guardados en Mis datos y editarlos. Un aviso explica que el jugador quedará vinculado con la cuenta; el usuario puede desactivar esa decisión antes de enviar y el servidor deriva nuevamente la identidad y reutiliza el perfil existente cuando corresponde.Enlaces públicos sin abrir el esquema privado
Las dos funciones que resuelven un enlace de inscripción pasan al esquema público con permiso explícito, y el esquema privado vuelve a cerrarse al visitante anónimo. El verificador local recupera sus cien migraciones y comprueba de nuevo las invariantes de acceso que habían quedado sin ejecutar.Menos consultas repetidas
Sesión y acceso compartidos durante cada render, producto leído una sola vez para página y metadatos, presencia de torneos consultada en lote y amistosos cerrados sin consultas automáticas. La codificación SQL se centraliza conservando permisos y contratos; las oportunidades de conexiones persistentes y estadísticas acumuladas quedan documentadas.Conexiones persistentes verificadas
La aplicación reutiliza conexiones PostgreSQL, conserva el aislamiento de usuarios y recupera conexiones tras fallos. La preparación de credenciales, recuperación de cuentas y alojamiento queda documentada como pendiente antes de publicar.Salud real de la base de datos
El sondeo público confirma PostgreSQL mediante el pool con un plazo breve y responde de forma segura cuando la base falla, sin llenar el registro técnico.Cierre ordenado de PostgreSQL
SIGTERM y SIGINT dejan de aceptar conexiones nuevas, dan hasta diez segundos a las peticiones y consultas en curso, cierran el pool PostgreSQL una sola vez y fuerzan la salida si una operación queda colgada. El servidor de desarrollo conserva el pool global durante la recarga automática.Seguimiento técnico append-only
Superadministración consulta errores sanitizados por severidad, código, módulo, fecha y estado, localiza el detalle por correlación y conserva reconocimientos, notas y resoluciones en un historial inmutable con revalidación de acceso.E2E con navegador y base real
Cuatro recorridos reales y repetibles validan el torneo público, Mi Arena, un partido completo y la compra hasta pedido pendiente; cada uno siembra datos aislados y confirma el desenlace en PostgreSQL.Acceso y recuperación con tope
El acceso y la solicitud de recuperación limitan los intentos antes de derivar la contraseña, con un contador en PostgreSQL que sobrevive a un reinicio y comparten todas las instancias. El mensaje del bloqueo no revela si el correo tiene cuenta, el plazo se levanta solo y cada bloqueo queda registrado sin datos personales.Cabeceras HTTP estrictas
Las respuestas incorporan una política de contenido con nonce por petición, bloqueo de marcos y detección de tipos, referencia restringida y HSTS reservado para conexiones HTTPS.Pago en línea con Wompi
Wompi se suma a la transferencia con checkout firmado desde el total del servidor, consulta autoritativa del estado y webhook verificado e idempotente. Ninguna credencial ni importe confiado al navegador decide el pago.Aviso de beta y sugerencias
Un distintivo Beta en la cabecera avisa que la aplicación sigue en construcción y lleva a /sugerencias, donde cualquier cuenta activa deja ideas o problemas con un límite diario. Solo superadmin las lee en /admin/sugerencias.Migraciones contra la base remota
Las migraciones se aplican a la base remota desde Node con TLS verificado y la credencial dueña del esquema, sin Docker. Un comando de solo lectura confirma la versión antes de dar tráfico. Falta la primera ejecución contra Neon.Restauración real de producción verificada
La base de producción tiene política de respaldo, acceso y retención documentada. Una copia real se restauró en PostgreSQL vacío: 40 tablas coincidieron por filas y contenido, y la aplicación respondió saludable contra ella en un ejercicio de 39,380 segundos.Primer superadmin sin SQL manual
Un comando de operación designa el primer superadmin de una base vacía sobre una cuenta ya registrada, con la credencial dueña del esquema y la misma auditoría que cualquier asignación. Se niega si la base ya tuvo un superadmin. Falta ejecutarlo contra Neon.Correo de recuperación real
La recuperación conserva el buzón local en desarrollo y envía por Resend en producción, con credenciales externas, respuesta indistinguible y fallos técnicos correlacionados sin exponer datos sensibles.Operación del lanzamiento
Los errores altos avisan por correo y el panel permite probar la alerta. Un comando verifica dominio, HTTPS, salud y páginas públicas; otro decide si una reversa es segura según las migraciones. La reversa se ensayó en local con la versión anterior, incluido el caso incompatible. Falta que Luis conecte dominio y monitores.Tu competencia, tus reglas
Empieza con los datos básicos y continúa la configuración desde tu espacio de administración.
Cuando se abra la próxima competencia aparecerá aquí, sin necesidad de iniciar sesión.