admin.sozu.com · App Clientes SOZU · Landings de proyecto
Esta semana · 31 de julio al 6 de agosto Agosto a la fecha · 1 al 6 de agosto
Agosto lleva 6 días. Esta vista no es comparable con el cierre de julio (737 commits en 26 días activos): mide una fracción del mes, no una caída de actividad. La vista semanal es la que sirve para comparar contra la semana pasada.
Seis frentes concentraron los 213 commits de esta semana. Dos de ellos no existían el jueves pasado, y uno cerró una exposición de datos que llevaba tiempo abierta.
El hallazgo más importante de la semana. El rol anon —el de cualquier petición hecha con la llave pública que viaja en el bundle del front— podía leer tablas completas sin autenticación de ningún tipo. Verificado por HTTP contra producción: 5,029 personas con 3,805 correos y 4,866 teléfonos, 1,797 cuentas de cobranza con su CLABE, 53,941 propiedades, 1,939 compradores y 623 usuarios.
La causa: trece tablas usaban el patrón current_socio_bancario_id() IS NULL para acotar a los socios bancarios. Para un anónimo esa función devuelve NULL, y NULL IS NULL es verdadero — la restricción funcionaba como pase libre. En personas era peor: la condición era directamente true. La escritura sí estaba bloqueada; el problema era de lectura.
Fase 0 revocó todo privilegio de anon sobre las cuatro tablas que ningún código público necesita, comprobado rastreando las 27 páginas públicas y los 125 archivos que alcanzan. Fase 1 dejó tendidas tres RPC acotadas por id de oferta para sustituir el acceso amplio que hoy requiere el flujo de apartado, sin romper nada todavía.
29 entregas, el segundo frente de la semana. Biometría atada a una cuenta concreta y solo para clientes; el modo administrador dejó de ser un interruptor manual y ahora se abre con Ctrl+Alt+A en escritorio o long-press en móvil. El acceso se gatea por rol_id y no por el nombre del rol, que era frágil. Y los mensajes de error dicen la causa real: por qué Auth rechazó la contraseña, si el enlace venció, o si no se envió por límite de correos.
33 entregas. Arrancó el 3 de agosto con el modelo de datos y cierra la semana con CRUD real contra Supabase, Kanban de columnas colapsables, evidencia en foto y video, notas de voz grabadas o importadas, múltiples solicitantes por ticket, multi-propietario con auditoría, folio buscable, y notificaciones por correo y WhatsApp.
2,938 contactos y 1,846 negocios importados con sus notas, tareas y pipelines, en una migración idempotente respaldada por columnas hubspot_id. Se suma el rol Agente Externo, que solo ve sus propios leads con filtrado del lado del servidor, y el disparo de evento Purchase a Meta al ganar un negocio.
12 entregas en los scripts que usa el equipo a diario: dev.sh resuelve el puente de adb para hot reload en dispositivo físico —calculando el nodo USB real en vez de adivinarlo—, check.sh se alineó con el CI, y web.sh sirve la web en release para medir rendimiento. Trabajo que no se ve en el producto pero que le quita fricción a cada jornada.
Versionado vigesimal automático que mantiene Android, iOS y web en el mismo número; el versionCode se calcula desde lo que ya existe en Play en vez de llevarse a mano. Las credenciales de Play se validan antes de compilar, y cada build o publicación avisa por WhatsApp al terminar.
Los primeros seis días de agosto concentran 183 commits en tres frentes.
33 entregas, todas de agosto: es un módulo que nació este mes. Del modelo de datos al tutorial guiado interactivo, pasando por notas de voz, evidencia multimedia y notificaciones por WhatsApp.
28 entregas: gate de acceso por tipo de rol, confirmación de correo diferenciada, homologación del restablecimiento de contraseña y mensajes de error que dicen la causa real en vez de un fallo genérico.
16 entregas: la migración de 2,938 contactos y 1,846 negocios, el rol Agente Externo con filtrado server-side, adjuntos en comentarios y el disparo de Purchase a Meta.
Commits por día en los cuatro repositorios de código, del viernes 31 al jueves 6. El fin de semana del 1 y 2 de agosto explica el valle. Commits por día en agosto. Pasa el cursor sobre cada barra para ver el detalle.
Relación funcionalidad/corrección de 1.4 : 1, mejor que el 1.2 : 1 de la semana pasada. Con dos módulos nuevos naciendo al mismo tiempo, la proporción se cargó del lado de la construcción. Relación funcionalidad/corrección de 1.4 : 1 en lo que va del mes.
| Repositorio | Qué contiene | Semana | Agosto |
|---|---|---|---|
| sozu-admin | Plataforma administrativa y portales | 90 | 69 |
| sozu-cliente-app | App Clientes en Flutter | 71 | 63 |
| sozu-supabase-migrations | Base de datos, RLS y funciones | 33 | 32 |
| sozu-edge-functions | Backend y API de la app | 19 | 19 |
| landings (1 repo actualizado) | Sitios públicos de proyecto | 2 | 2 |
sozu-cliente-app pasó de 15 commits la semana pasada a 71: la reconstrucción de autenticación vive ahí.
90 commits y 81 PRs esta semana. Módulos con mayor actividad: 69 commits y 71 PRs en agosto. Módulos con mayor actividad:
Módulo nuevo. Empezó el 3 de agosto y en cuatro días quedó operativo de punta a punta.
tickets_*, categorías por pipeline, tabla M:N de propietarios, otra de solicitantes y otra de adjuntos. Nada montado sobre estructuras prestadas.hubspot_id en crm_leads_atribucion y crm_negocios: se puede repetir sin duplicar.ingesta-lead-externo para el bot de precalificación, que asigna propietario automáticamente y marca la fuente con un badge propio.Ctrl+V en los comentarios de notas, con los errores de subida visibles en vez de fallar en silencio.roles.apps pasó de booleano a jsonb, con catálogo de apps en base de datos y selector múltiple de apps administrables por rol.email_confirmado; ahora se confirma antes de entregar credenciales y se rutea al portal según el rol de banco.id_conyuge.cuentas_sozu por número de cuenta —no por id de catálogo, que era el error— para rutear el batch. Filtro por periodo en pagos pendientes.tipo_categoria.trigger-antilavado como proxy a server-stp, con pruebas que rescatan el mensaje real de la función.
71 commits en sozu-cliente-app (40 PRs) y 19 en sozu-edge-functions. La semana más intensa de la app desde que nació.
63 commits en sozu-cliente-app (38 PRs) y 19 en sozu-edge-functions.
Ctrl+Alt+A —solo en web de escritorio— o con long-press en el sello, que funciona en todas las plataformas. El administrador entra con login normal.rol_id (23) en lugar del texto "Cliente", que se rompía con cualquier cambio de etiqueta. El portal se abre por rol Cliente o por ser comprador.reset-user-password, se eliminó la pantalla duplicada de cambio de contraseña, y el enlace de recuperación siempre pide contraseña nueva.AuthPort implementado e inyectado, todo el dominio de autenticación recogido en features/auth/, identificadores en inglés y el mapper movido al adaptador.Android ya está en tienda; iOS depende de un trámite de cuenta, no de desarrollo. Este es el estado al corte:
Google aprobó la revisión: la App Clientes SOZU está publicada y disponible para descarga. El repositorio arrancó el 7 de julio, así que la app pasó de no existir a estar en tienda en menos de un mes.
ElversionCode ya se calcula desde lo que existe en Play, así que las siguientes publicaciones no dependen de llevar la cuenta a mano.
La cuenta sigue en revisión: existía una cuenta previa de SOZU, por lo que en lugar de crear una nueva se va a retomar la existente actualizando los datos de la organización.
Sin fecha comprometida hasta que Apple valide la información actualizada. El código de iOS ya compila y está listo.flutter test corre en los 8 workflows antes de compilar.dev.sh resuelve el puente de adb calculando el nodo USB real en lugar de tomar el último de la lista, aplica el grupo adbusers sin reiniciar WSL, y distingue "sin permisos" de "sin dispositivo". La depuración inalámbrica quedó documentada como el camino probado.check.sh alineado con el CI y con el conteo de avisos corregido; web.sh sirve la web en release para medir rendimiento.reset-user-password como camino único de restablecimiento.ingesta-lead-externo para el bot de precalificación del agente externo.trigger-antilavado como proxy hacia server-stp.
2 commits esta semana sobre 1 landing actualizada, de 28 repositorios revisados en landings-sozu y sozu-com.
La semana se fue completa en plataforma y app.
| Landing | Organización | Último push | Semana |
|---|---|---|---|
| tallwood-web | landings-sozu | 5 ago | 2 |
En tallwood-web: unificación tipográfica a Switzer, eliminación de las animaciones de scroll y compresión de imágenes para bajar el tiempo de carga.
La tabla lista solo las landings actualizadas en el periodo, es decir, con commits en su rama principal. Los otros 27 repositorios se revisaron y no tuvieron cambios; no aparecen para no llenar la tabla de ceros.
Nota metodológica: este corte excluye sozu-avances, el sitio de este mismo reporte. Sus 7 commits de la semana son publicaciones automáticas del propio pipeline —todos con el mensaje "avances: reporte del ... (draft)"— y contarlos como avance de desarrollo sería circular. Habrían representado el 78% del total de landings.
33 migraciones esta semana. Principales bloques: 32 migraciones en agosto. Principales bloques:
tickets_* completas — categorías por pipeline con id_pipeline, tickets_propietarios y tickets_solicitantes como relaciones M:N, tickets_adjuntos para evidencia y columnas de audio en tickets_actividad. Más la RPC get_tickets_proyectos.id_estatus_lead e id_etapa_ciclo_vida en crm_leads_atribucion, cerrando la transición de texto libre a catálogo. Tabla de adjuntos en comentarios y match_keys en el log de CAPI.roles_apps.SECURITY DEFINER que no tenían guarda de autorización interna.pagos_stp_raw, e índice keyset por fecha_pago/id en pagos activos.relacion_pagos y cuentas_cobranza, con universo completo de deuda, atraso real y guarda de autorización.validacion_pagos por keyset en vez de OFFSET, que degradaba en las páginas altas.Commits productivos por persona esta semana. Haz clic en los encabezados para reordenar. Commits productivos por persona en agosto. Haz clic en los encabezados para reordenar.
| Persona | Foco de la semana | Admin | Apps | Edge | BD | Total |
|---|---|---|---|---|---|---|
| Jorge Mendoza | Cierre de la lectura anónima, autenticación, Portal Bancos y publicación. Además: infraestructura, DevOps, DNS, servidores y VPN, y administración de las herramientas de desarrollo | 21 | 26 | 12 | 10 | 69 |
| Eduardo Araujo | Autenticación de la app, expediente unificado y herramientas de desarrollo | 13 | 45 | 3 | 6 | 67 |
| Sergio García | Portal de Tickets completo y migración de HubSpot al CRM | 33 | 0 | 4 | 17 | 54 |
| gpt-engineer-app | Generación asistida de UI | 13 | 0 | 0 | 0 | 13 |
| José Ramón Escobar | Alta Dirección: citas comerciales y filtros de pipeline | 8 | 0 | 0 | 0 | 8 |
| Tomás Peterson | Portal de Escrituración | 2 | 0 | 0 | 0 | 2 |
| Persona | Foco principal | Admin | Apps | Edge | BD | Total |
|---|---|---|---|---|---|---|
| Jorge Mendoza | Autenticación, publicación en tiendas, Portal Bancos y seguridad. Además: infraestructura, DevOps, DNS, servidores y VPN, y administración de las herramientas de desarrollo | 21 | 25 | 12 | 9 | 67 |
| Eduardo Araujo | Autenticación de la app y expediente unificado | 10 | 38 | 3 | 6 | 57 |
| Sergio García | Portal de Tickets y CRM | 31 | 0 | 4 | 17 | 52 |
| José Ramón Escobar | Alta Dirección | 7 | 0 | 0 | 0 | 7 |
Trabajo que no se refleja en el conteo de commits, pero que sostiene la operación de todo el equipo.
avances.sozu.com.C:\dev. La sincronización en la nube volvía lentos e inestables los comandos de git sobre repos grandes, y provocaba archivos disponibles solo en línea.sozu-admin y las edge functions, Codemagic para la app móvil con versionado automático y avisos por WhatsApp, y Firebase Hosting para el portal del cliente.Julio cerró en 2,580.72 USD, contra un promedio de 3,950 USD mensuales que se venía pagando desde mayo. Son 1,369 USD menos al mes. La cifra es de todo el grupo, no solo de SOZU: cubre a todas las empresas que usan la plataforma bajo la misma cuenta.
De ese total, 629.22 USD corresponden a SOZU — el 24 por ciento.El plan reajustado se mantiene en 100 USD mensuales para agosto, sin cambios respecto al mes anterior.
Es el resultado del ajuste hecho en julio; no requirió intervención nueva.Dos situaciones ajenas al código frenaron el ritmo esta semana. Se documentan porque explican tiempos y porque una de las dos sigue abierta.
La plataforma estuvo fuera de servicio buena parte del jueves. Con GitHub abajo, el CI/CD de SOZU quedó inactivo: los cambios ligados a issues y a nuevas funcionalidades no se pudieron desplegar con la inmediatez habitual y hubo que esperar a que el servicio volviera. No hubo pérdida de trabajo —los commits se acumularon en local— pero sí retraso en la entrega de lo que estaba listo.
El mismo día se corrigió, aparte, que una caída del marketplace de GitHub silenciara las notificaciones de PRs sin que nadie se enterara. Dos recordatorios en una sola jornada de cuánto depende la operación de un proveedor externo.
La carga de trabajo de las últimas semanas —varias sesiones de Claude en paralelo, las ventanas de Chrome necesarias para revisar portales, y la sincronización de OneDrive— dejó la laptop de Jorge operando entre 90 y 95 por ciento de memoria RAM de forma sostenida. El efecto directo es desarrollo más lento: el equipo pasa más tiempo administrando memoria que ejecutando.
Ya se tomaron las medidas que estaban al alcance: se sacaron los repositorios y el tooling de OneDrive, se limitaron las ventanas de Chrome a las indispensables, y se cierran las sesiones de terminal en cuanto dejan de usarse.
Aun así el equipo sigue al tope: no baja del 85 por ciento. Al corte marca 13.8 de 15.7 GB en uso, con apenas 1.9 GB disponibles. El dato que mejor lo explica es la memoria comprometida: 33.5 GB contra 15.7 GB físicos, más del doble de lo que la máquina tiene. Todo ese excedente vive en disco, y cada vez que el sistema necesita algo que paginó, se paga en tiempo de espera.
Ya se está cotizando un equipo nuevo. Las optimizaciones se agotaron y lo que queda es una limitación física: con 16 GB no hay margen para el modo de trabajo actual, y la lentitud se paga todos los días en horas de desarrollo.
La cotización se está armando con las recomendaciones de otros desarrolladores del grupo y contrastando cada opción contra el trabajo diario real: cuántas sesiones se abren en paralelo, qué tan pesados son los repositorios, qué corre simultáneamente. El criterio es que no quede rebasado en el corto plazo: comprar justo lo que hoy alcanza significa repetir esta conversación en unos meses.
Lo que queda abierto al corte y lo que conviene vigilar.
El 14% de lo que entró a sozu-admin esta semana tiene como mensaje la palabra Changes, sin más. Son cambios que existen en el historial pero que nadie puede rastrear sin abrir el diff: no se sabe qué resuelven ni por qué. El resto del equipo escribe conventional commits con alcance, así que la convención existe y funciona — el problema es que estos no la siguen. Un hook que rechace mensajes de menos de N caracteres o sin alcance lo cierra de raíz.
33 entregas en cuatro días, incluyendo modelo de datos, CRUD, multimedia, notas de voz y notificaciones. Es una velocidad notable, pero el tutorial guiado necesitó cinco correcciones en un solo día y las categorías tuvieron que arreglarse por duplicados. Nada de eso es grave; lo que conviene es una pasada de pruebas con usuarios reales antes de abrirlo a operación, porque el módulo no tuvo tiempo de asentarse.
Entraron 2,938 contactos y 1,846 negocios con sus notas, tareas y pipelines. La migración es idempotente y eso está bien resuelto, pero no hay constancia de una conciliación posterior: cuántos registros quedaron sin dueño, cuántos con campos vacíos, o si los totales cuadran contra HubSpot. Es la base de datos comercial de la empresa; conviene un reporte de conciliación antes de apagar la fuente anterior.
Detectado durante el mismo trabajo de seguridad y documentado explícitamente como fuera de alcance de ese cambio. El bucket de almacenamiento documentos está configurado como público, y el código usa getPublicUrl: cualquiera con la URL puede descargar el archivo, sin sesión. Ningún REVOKE en la base de datos lo corrige, porque el problema no está en las tablas sino en el almacenamiento. Requiere pasar el bucket a privado y migrar el front a URLs firmadas. Es, hoy, la exposición más grande que queda abierta.
Las fases 0 y 1 fueron deliberadamente seguras: la primera revocó solo lo que ningún código público usa, y la segunda tendió tres RPC de reemplazo sin revocar nada todavía. La fase 2 sí corta el acceso amplio, y para eso hay que migrar cinco páginas públicas y lib/offers/use-offer-db.ts. Ya sabemos de julio que estas revocaciones tumban portales cuando una ruta dependía del permiso que se quita; aquí la red está tendida de antemano, que es la forma correcta de hacerlo, pero el corte sigue pendiente y la exposición sigue viva hasta entonces.
Google Play ya publicó la app, así que Android queda cerrado. Falta Apple: se retomará la cuenta preexistente de SOZU con datos actualizados y ese trámite no tiene fecha comprometida. El lanzamiento depende de que Apple valide esa información, no del desarrollo — el código ya compila.
Pasó dos veces más esta semana: la migración de Purchase del CRM y la de multi-propietario de tickets tuvieron que renombrarse. Es el tercer reporte consecutivo en que aparece. Con varios frentes tocando el mismo esquema va a seguir pasando; un chequeo de unicidad en CI antes del merge lo resuelve.