Commit Graph

105 Commits

Author SHA1 Message Date
Carlos Narro
a84d513c5b Add clasificador determinista de preferencias keyless 2026-05-31 16:13:38 +02:00
Carlos Narro
18e900dd52 Add léxicos en español para el clasificador de preferencias 2026-05-31 16:11:31 +02:00
Carlos Narro
c38289fcae Add tipos del contrato de preferencias del agente de voz 2026-05-31 16:11:29 +02:00
Carlos Narro
a641c5dd8c Reenfocar dolor de presupuestos: coste de presupuestar para quien no firma
Tarjeta 03 de la landing B2B pasa de "PDF lento" a regalar trabajo:
horas de oficina que no factura nadie cuando la obra no se ejecuta.
Reflejado en COPY-GUIDE.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 14:38:58 +02:00
Carlos Narro
b582f3ac33 Conectar funnel B2C real sin claves: captura → fotos → presupuesto
El formulario de la landing ahora crea un lead real en BD y redirige a
/solicitud/[id]/fotos, donde el cliente sube fotos y datos de la reforma.
El orquestador simula los pasos de IA (pre-llamada, llamada, render) y
calcula el presupuesto DE VERDAD con el catálogo del reformista, dejando
el lead listo en el panel con render y desglose.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 14:29:21 +02:00
Carlos Narro
b95c588efe Permitir descargar el PDF del presupuesto desde el detalle del lead
La sección Presupuesto (PDF) usaba lead.pdfUrl, que nunca se rellena en el
MVP, así que siempre mostraba "Aún no generado". Ahora apunta a la ruta
on-demand /panel/[id]/presupuesto cuando existe desglose, con un parámetro
?download=1 que fuerza Content-Disposition: attachment.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 08:12:55 +02:00
Carlos Narro
c4cc4d20d4 Rehace la maquetación móvil de la página de precios
Las filas del catálogo, la configuración general y el formulario de alta
no estaban pensados para móvil (input de precio descolgado, etiquetas que
desalineaban la cuadrícula, campos sueltos). Ahora las filas apilan
nombre + metadatos + controles de forma limpia en móvil y mantienen la
fila única en escritorio; la cuadrícula usa etiquetas legibles y alinea
los inputs; el alta es una cuadrícula de 2 columnas en móvil.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 00:53:40 +02:00
Carlos Narro
de798b00ce Hace responsive la tabla de precios en móvil
Las filas del catálogo y la cabecera CSV se desbordaban horizontalmente
en móvil (botones Guardar/Borrar fuera de pantalla), y ese overflow
horizontal desestabilizaba la barra de navegación fija. Las filas ahora
hacen wrap y el bloque <code> rompe palabra.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 00:49:28 +02:00
Carlos Narro
2f13057e02 Corrige barra de navegación móvil que no quedaba fija al hacer scroll
El body usaba overflow-x:hidden, lo que forzaba overflow-y a auto y creaba
un contenedor de scroll ambiguo que rompía position:fixed (la barra
aparecía tarde y no se anclaba abajo, sobre todo en iOS Safari). Se cambia
a overflow-x:clip, que recorta el desbordamiento horizontal sin crear
contenedor de scroll.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 23:53:26 +02:00
Carlos Narro
27165a41eb Rediseña la navegación móvil del panel/admin con barra de pestañas inferior
Sustituye el menú hamburguesa por una barra fija inferior con iconos y
etiquetas (thumb-friendly, siempre visible), manteniendo la nav horizontal
en escritorio.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 22:56:30 +02:00
Carlos Narro
83ad82e617 Mejora la navegación móvil del panel y admin
Extrae un AppNav reutilizable con menú hamburguesa desplegable en móvil
y resaltado del enlace activo. Antes la marca y los enlaces se apretaban
en una sola fila en pantallas pequeñas; ahora el nombre de empresa se
oculta en móvil y los enlaces pasan a un desplegable.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 22:42:07 +02:00
Carlos Narro
ec141cdd6e Añade revisión pre-envío del reformista y PDF de presupuesto pulido
Adelanta de F1.5 a F2 la validación pre-envío: el panel permite elegir
modo de envío (automático/revisión), editar los conceptos del
presupuesto y enviar al cliente por WhatsApp (simulado).

Añade datos de empresa y logo configurables en /panel/empresa y genera
el presupuesto como PDF real descargable con esa marca vía
@react-pdf/renderer, sustituyendo la vista HTML imprimible.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 22:27:05 +02:00
Carlos Narro
b84b2f37a2 Fijar trial a 14 días en alta de tenant y reforzar filtro por tenant en escrituras 2026-05-30 20:02:02 +02:00
Carlos Narro
4f48b1591c Extender cobertura de tests a auth, validación y billing 2026-05-30 19:59:35 +02:00
Carlos Narro
7565a7bf46 Mostrar badge de plan y botón de pago deshabilitado 2026-05-30 19:58:58 +02:00
Carlos Narro
ac3b1cd294 Add stub de Stripe (sin cobro real) 2026-05-30 19:58:29 +02:00
Carlos Narro
f2fb6d24c6 Add cálculo de trial y badge de plan 2026-05-30 19:58:18 +02:00
Carlos Narro
df085b6cf1 Add asignación de planes y estado de suscripción 2026-05-30 19:57:49 +02:00
Carlos Narro
07d41e1f6b Add gestión de usuarios en el admin 2026-05-30 19:57:10 +02:00
Carlos Narro
6f86334c8a Add layout y dashboard del admin 2026-05-30 19:56:31 +02:00
Carlos Narro
b91e1685c0 Add queries del área admin 2026-05-30 19:55:33 +02:00
Carlos Narro
9d140d8467 Cablear CTAs de trial de la landing B2B a /signup 2026-05-30 19:53:03 +02:00
Carlos Narro
795d6a7a19 Add signup trial que crea tenant y owner
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 19:50:50 +02:00
Carlos Narro
aecfb2c7e3 Add validación y slug del signup
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 19:49:09 +02:00
Carlos Narro
e1f12f94c6 Sembrar planes y usuarios demo (admin + owner logueable)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 19:47:11 +02:00
Carlos Narro
6add2f93ea Proteger el panel con sesión y mostrar empresa real 2026-05-30 19:45:07 +02:00
Carlos Narro
17cd03d3c9 Usar AnyPgColumn en vez de any para la referencia forward de plan_id
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 19:43:59 +02:00
Carlos Narro
b776646a50 Add login y logout 2026-05-30 19:43:10 +02:00
Carlos Narro
a7339b8f14 Migrar resolución de tenant del panel a la sesión 2026-05-30 19:41:04 +02:00
Carlos Narro
a6b77b9731 Add ciclo de vida de sesión y helpers de usuario actual
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 19:39:31 +02:00
Carlos Narro
7b3b8457c1 Add schema de users, sessions, plans y suscripción de tenant
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 19:37:35 +02:00
Carlos Narro
2cc19147ff Add decisiones de autorización puras
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 19:35:41 +02:00
Carlos Narro
4e4cc8545e Add generación y expiración de tokens de sesión 2026-05-30 19:34:07 +02:00
Carlos Narro
49b5910593 Add hashing y verificación de contraseña 2026-05-30 19:32:28 +02:00
Carlos Narro
5fb0d571cd Add bcryptjs para hashing de contraseñas 2026-05-30 19:30:46 +02:00
Carlos Narro
96dedaf60c Seed catálogo y presupuesto calculado para lead demo
Calcula y persiste el desglose de Roberto Salas con computeBudget para
que el detalle muestre un presupuesto generado real al abrir el panel.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 17:56:05 +02:00
Carlos Narro
c02f681a9a docs: documentar panel de precios y motor de presupuesto en README
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 17:28:11 +02:00
Carlos Narro
6be00e3eb5 fix: validate numeric pricing inputs and drop unused import
Guard euro/altura inputs in precios actions so empty or non-numeric
form values return a Spanish error instead of writing NaN and throwing
a 500. Remove the now-unused formatEuros import flagged by ESLint.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 12:46:52 +02:00
Carlos Narro
588aa4dc1c feat: wire computeBudget into recalcularPresupuesto and show desglose
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 12:41:40 +02:00
Carlos Narro
4106d58614 feat: add pricing panel with catalog CRUD and CSV import 2026-05-30 12:36:31 +02:00
Carlos Narro
c00c571549 feat: add queries mapping pricing config and catalog to engine types 2026-05-30 12:33:11 +02:00
Carlos Narro
892c257182 feat: migrate and seed pricing config + demo catalog 2026-05-30 12:31:58 +02:00
Carlos Narro
afef9f2cb0 feat: add pricing_config, catalog_items and budget input fields to schema 2026-05-30 12:30:03 +02:00
Carlos Narro
e6f8b47205 fix: correct factorZona zero handling and confidence for unresolved selections 2026-05-30 12:28:10 +02:00
Carlos Narro
58d3f62a76 feat: add catalog CSV parser with per-row validation 2026-05-30 12:24:47 +02:00
Carlos Narro
896c7ac89b feat: implement computeBudget with partidas, zona factor, licencia and range 2026-05-30 12:22:42 +02:00
Carlos Narro
61e0f5dbe5 feat: resolve unit price from catalog with selection override
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 12:20:10 +02:00
Carlos Narro
b27b68908c feat: derive cantidades from minimal measurements
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 12:18:48 +02:00
Carlos Narro
9b14dbfac5 feat: add budget domain types and partida labels 2026-05-30 12:17:04 +02:00
Carlos Narro
515e9fd7a2 chore: set up vitest and add zod 2026-05-30 12:15:26 +02:00