CorregidoMovilidad
El botón se fiaba solo del navegador. El iPhone conserva su suscripción por su cuenta, así que ponía "🔔 Activadas" aunque el servidor no tuviera ninguna fila, y encima escondía el botón de activar: no había forma de arr…
Pasaba por dos motivos a la vez: la fila del servidor se había borrado, y la suscripción del móvil era de la clave VAPID anterior, con la que el servidor ya no firma.
CorregidoMovilidad
La prueba de la campanita decía "falta configurar VAPID_PRIVATE_KEY". La pública que llevaba el código no tenía pareja guardada en ningún sitio: ni en Supabase, ni en .env, ni en el repositorio.
Par nuevo generado y comprobado: la pública se deriva de la privada y la firma sale de 64 bytes. Aquí va solo la pública, que no es secreta. La privada se configura como secreto en Supabase.
NuevoAtiende 24
El correo de Carlos confirmando qué módulos contrataba no generó ningún aviso. El único que había estaba dentro del bloque que abre oportunidad, y ese bloque empieza con "si el contacto NO tiene ya una abierta".
Ahora avisa siempre que escriba alguien de tus Contactos, con la misma regla que la pestaña: sin archivar y sin marcar como sistema. Un boletín no llega a ser contacto, así que no avisa.
CorregidoAtiende 24
Había montado dos filtros donde basta uno. La pestaña ya preguntaba "¿está en tus Contactos?", que es la regla correcta; lo que fallaba es que el robot crm@iacontac.es SÍ estaba en Contactos, y ahí seguía saliendo como u…
De 26 contactos, 25 son personas o empresas reales y ese era el único intruso. Así que "No es un cliente" ahora archiva el contacto, que es lo que ya significa "no está en mi lista", en vez de esconderlo solo de esta pestaña.
NuevoAtiende 24
Cruzar con Contactos no bastaba. Un boletín nunca llega a crear contacto, pero los avisos de nuestros propios productos (crm@iacontac.es) sí acabaron dados de alta, y sus 443 correos tapaban a las personas de verdad, que…
No hay manera de que el programa lo adivine: se miró si servía la categoría de la IA y no sirve, porque clasifica igual de "soporte" el aviso del robot que el correo de Eva Osuna, que es una clienta. Tampoco vale el dominio: iacontac.es no es uno de los buzones de la organización.
NuevoAtiende 24
Los correos de personas se perdían entre los boletines: de 2.624 recibidos, solo 465 vienen de alguien de la lista de Contactos. El de Carlos confirmando qué módulos contrataba estaba entre medias y pasó sin verse.
"De contactos" es la misma vista de Correos recibidos, cruzada con Contactos para quedarse solo con los que no están archivados. Ese es el filtro que separa a una persona de un boletín: los remitentes masivos nunca llegan a crear contacto, y los que entraron antes de esa regla quedaron archivados.
MejoraPlataforma
Las cifras del bloque "Como prefieres contratarlo" llevan el IVA dentro —134,31 son 111,00 más el 21%— pero era el único sitio del documento que no lo decía: el PDF pone "IVA inc." y la tabla de detalle tiene su pie con…
Para una empresa esto no es un detalle: se deduce el IVA, así que lo primero que busca es la base. Si lee 134,31 y da por hecho que es sin IVA, espera una factura de 162,52 y la reclamacion llega sola.
CorregidoComercia 24
enviar() guardaba antes de mandar, y save() se niega en cuanto el cliente ha abierto la propuesta. El resultado era que el botón "Enviar por email" seguía ahi, dejabas escrito el destinatario, le dabas a enviar y salía u…
El bloqueo protege el CONTENIDO del documento, no el acto de mandarlo. Reenviar manda el mismo documento tal cual, así que ahora no se guarda nada: se usa el que ya esta. Sirve para insistirle al mismo cliente o para mandarselo a otra persona de la empresa.
MejoraPlataforma
El historial se leía mal justo cuando más falta hace, que es al abrir la oportunidad para decidir que hacer con ella:
- Una respuesta de la IA de quince líneas empujaba todo lo demas fuera de la pantalla; para ver tres mensajes había que bajar cuatro veces. Ahora los textos largos se pliegan a cuatro líneas con "Ver más". - Cada línea repetía la fecha completa ("1/9/26, 12:32"). El día pasa a un separador —"Hoy", "Ayer", "lunes, 1 de septiembre"— y en la línea queda solo la hora.
CorregidoCRM
La línea de tiempo del contacto leía las llamadas de voz, los mensajes, los correos y los presupuestos enviados, pero no la tabla events.
Ahora salen en la misma línea de tiempo, en verde si se hablo con la persona y en gris si no se la pudo localizar, que es lo que se busca al repasarlo.
NuevoCRM
El panel de eventos de la oportunidad solo sabía programar lo que falta por hacer: el formulario venia con mañana a las 10:00 y dejaba el evento en "scheduled".
Ahora hay dos botones, porque son dos cosas distintas: "+ Nuevo evento" para lo que falta y "Registrar lo ya hecho" para lo ocurrido, con su lista de resultados. La lista de eventos muestra el resultado cuando lo hay.
NuevoCRM
Para anotar "le he llamado y no me ha contestado" había que ir a la agenda y rellenar el formulario de planificar: título, ubicacion, oportunidad e inmueble.
Ahora, en el menu de cada contacto, "Registrar actividad" pregunta solo lo que hace falta —tipo, resultado, fecha y hora, con la fecha y la hora ya puestas— y compone el título solo. Se avisa si la fecha es futura: esto es para lo ya ocurrido, no para planificar.
CorregidoComercia 24
La tabla es más ancha que la pantalla y su contenedor lleva overflow-hidden para redondear las esquinas, así que además de redondear recortaba: la última columna —la del menu con Editar, Ver la propuesta, Duplicar y A la…
Ahora la tabla va dentro de un envoltorio con desplazamiento horizontal, y la columna de acciones queda anclada a la derecha para no depender de que nadie se acuerde de arrastrar. El menu se dibuja con createPortal y position fixed, fuera de la tabla, así que el contenedor nuevo no lo recorta.
NuevoInmobiliarias
La landing pasa al patron de /custodia: el relato a la izquierda y el formulario en su tarjeta arriba a la derecha.
Se sirve como iframe de /f/planosia, igual que /custodia con el suyo: el formulario se edita en la aplicación y no hay que tocar la landing para cambiar un campo.
MejoraPlataforma
Se me escapo una clase entera: los botones cuyo texto sale de una condicion, {saving ? "Guardando…" : "Guardar"}.
Los que usan el componente ya estaban bien: la condicion se evalua antes de llegar a el, así que ve una cadena.
MejoraPlataforma
Quedaban fuera del criterio los <button> que no usan el componente. De 569, la mayoría ya son icono puro -las equis de cerrar, las flechas de reordenar- o llevan JSX propio; los candidatos reales de solo texto eran 65.
Hecho con un cambio mecanico sobre esos 65, en 38 ficheros, con la misma tabla que usa el componente. Regla estricta: si el className no era un texto que se pudiera tocar sin riesgo, el botón se saltaba -no se ha saltado ninguno-. Se anade inline-flex para que el icono no descoloque el texto.
MejoraPlataforma
Segunda tanda: activar, asignar, calcular, restaurar, archivar, facturar, catálogo, numeración, spam, contrasena, llamar. Del 78% al 88% de las etiquetas.
Lo que sigue sin encajar se queda sin icono a proposito: un icono equivocado confunde más que la ausencia de uno.
NuevoWeb y marca
Criterio para toda la aplicación. Son 347 botones en 61 ficheros y solo 5 llevaban icono: ponerlo a mano uno a uno es inviable y, sobre todo, el criterio se perderia con el primer botón nuevo que alguien escriba.
El componente lo deduce del texto. El vocabulario es corto y muy repetido -Guardar, Cancelar, Borrar, Editar, Anadir- así que una tabla de trece reglas cubre practicamente todo, y lo que no encaja se queda sin icono en vez de con uno equivocado.
NuevoComercia 24
Un presupuesto se empieza por el cliente y el asunto, y a veces se deja a medias para seguir luego o para esperar un precio. Exigir una línea para poder guardar obligaba a inventarse un concepto o a perder lo escrito.
Lo que sigue exigiendo líneas es lo que sale hacia el cliente -enviar por email, generar el impreso, crear el enlace de cobro-: ahi un documento sin conceptos no es un borrador a medias, es un error delante del cliente.
CorregidoPlataforma
Anadi uno sin comprobar que ya existía más abajo en el mismo fichero, y la compilacion caia con 'Cannot redeclare block-scoped variable'. Solo hacia falta el sobre.
MejoraComercia 24
Iconos SVG y no emoji: los emoji traen su propio color y no se pueden pintar de blanco. Estos heredan currentColor, así que van del mismo blanco que el texto del botón.
MejoraComercia 24
El correo sale al pulsar y no hay vuelta atras; el programado se puede cancelar hasta que salga. Los colores lo dicen antes de leer el botón.
Anade la variante 'success' al botón, que no existía: mejor eso que un parche de clases sueltas en un sitio.
NuevoCRM
Antes acababa en Notas o en el buscador: se tenía delante el nombre de la empresa y había que ir a buscarla fuera para ver a que se dedica.
- Se escribe como se dice -"climaxthor.es"- y se completa el https al guardar: un href sin esquema lo interpreta el navegador como una ruta de la propia aplicación y lleva a una pagina que no existe. - El enlace va junto al campo y no dentro, porque un input no se puede pulsar para navegar. Abre en pestana nueva.
CorregidoPlataforma
La cronología se genera de los asuntos de commit y varios se escribieron sin tildes, así que salían así a una pagina publica: "Papelera de 30 días", "La introducción del presupuesto".
La correccion vive en scripts/correcciones-novedades.json y se aplica al generar, de modo que sobrevive a volver a ejecutar el script -que es justamente lo que no hace parchear el JSON a mano-.