Commit Graph

147 Commits

Author SHA1 Message Date
Carlos Narro
d2d42ff1d4 Añade imágenes de ejemplo para galería y demostración
Incluye una imagen WebP optimizada (48caf530-fa5f-476b-8120-195cfce7a9ec.webp) y una imagen PNG de ejemplo de reformas (reformas-ejemplo.png) para usar en la galería de trabajos y demostraciones del funnel.
2026-06-03 09:52:10 +02:00
unknown
e5c8956b64 Configuracion para guardar en base de datos 2026-06-02 23:11:46 -04:00
unknown
fc6a7044b0 Configurcion de personalidad 2026-06-02 23:07:34 -04:00
unknown
7b0eb31f56 Merge branch 'main' of https://github.com/McGregory99/reformix-hackaton 2026-06-02 22:49:18 -04:00
unknown
9c5e6bc7fa Configuracion de prompt Luisa 2026-06-02 22:48:59 -04:00
Carlos Narro
372ad560bf Añade llamada saliente con Retell al funnel B2C
Integra el agente de voz de Retell (Arquitectura A para la demo): tras la
pre-llamada, el orquestador lanza una llamada saliente real con override de
agente y dynamic variables (empresa + cliente), mientras el render y el
presupuesto se siguen generando con los datos del formulario.

- src/lib/env.ts: esquema zod de RETELL_* (claves opcionales -> sin ellas el
  funnel sigue en modo simulado y el build no se rompe)
- src/lib/voice/retell.ts: cliente fino con fetch a create-phone-call
  (sin nueva dependencia), normalización E.164 y builder de variables
- orchestrator: dispara la llamada best-effort y guarda el callId
- tests del normalizador de teléfono y del builder de variables

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-02 21:55:29 +02:00
Carlos Narro
0651d964f5 Merge branch 'main' of https://github.com/McGregory99/reformix-hackaton 2026-06-02 20:05:58 +02:00
Carlos Narro
8de139f9d3 Mejora el PDF de presupuesto: disclaimer, render y conversión de imágenes
- Añade bajo el título un párrafo orientativo: el precio final se fija tras
  la visita gratuita y la estimación se basa en datos estadísticos ajustados
  para acercarse lo máximo posible al importe definitivo.
- Añade una sección con el render del resultado y una descripción generada a
  partir de los materiales (materialesRender) y el estilo de la llamada, con
  fallback elegante cuando faltan datos.
- @react-pdf solo incrusta PNG/JPEG: convierte con sharp los WebP/SVG (render
  y logo) que antes se descartaban en silencio dejando el PDF sin imagen. El
  render va a JPEG redimensionado (PDF ~360 KB en vez de ~2,7 MB) y el logo a
  PNG para conservar transparencia.
- Fija sharp como dependencia directa (ya venía como transitiva de Next).
- Copy nuevo añadido primero a COPY-GUIDE.md (sección entrega del presupuesto).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-02 19:48:14 +02:00
unknown
9a8f84ff37 Configuracion de prompts PENDIENTE 2026-06-02 10:24:02 -04:00
unknown
3e9d083e7d Merge branch 'main' of https://github.com/McGregory99/reformix-hackaton 2026-06-01 23:24:56 -04:00
unknown
b1b2451429 Configuracion de prueba 2026-06-01 23:24:43 -04:00
Carlos Narro
e9637f77ff Integrar recorte y optimización a WebP en las subidas de imagen del panel
Los tres uploaders del panel (logo, "quiénes somos" y galería) ahora abren
un recorte interactivo (zoom + encuadre) y reescalan en el navegador antes
de subir: logo y "quiénes somos" a máx. 500 px, galería a máx. 1200 px,
reencodando a WebP (calidad 0.82). El SVG del logo se sube tal cual para no
rasterizar el vector. Esto reduce el peso de los data URIs base64 que se
guardan en Postgres y se inlinean en el funnel.

Nueva dependencia react-easy-crop: librería de recorte ligera, sin estado
global, compatible con React 19; el reescalado y reencodado se hacen con
canvas nativo (lib/image/crop.ts), sin dependencias extra.
2026-06-01 22:36:55 +02:00
Carlos Narro
bf9e72064b Alinear panel y auth con la identidad B2B "Architectural Warmth"
Sustituye la paleta negra/azul B2C del panel del reformista por el verde
de marca, neutros cálidos y titulares en Instrument Serif de la landing B2B.
Añade tokens --color-primary-*, --color-stone-50 y --font-display al @theme.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 20:01:57 +02:00
Carlos Narro
15f2d67970 Corrige el botón Entrar de la landing B2B para que lleve al login
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 14:06:40 +02:00
Carlos Narro
1ea5d70675 Rediseña panel y auth con la identidad de la landing B2C
- Vista de leads en tarjetas + tabla con toggle (tarjetas por defecto, preferencia persistida)
- Galería de trabajos: gestión en /panel/galeria y bloque público en el funnel
- Selector de tema por reformista (presets + color de marca opcional) aplicado a la landing
- Login y registro rediseñados a pantalla partida 50/50 con foto de reforma
- Enlace "Entrar" funcional en la cabecera del funnel; elimina Navbar muerto
- Unifica tipografía y botones del panel con los tokens de la landing

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 13:51:00 +02:00
Carlos Narro
a91fe5ce2c Añade personalización SEO/Quiénes somos y testimonios gestionables por reformista
- Panel/empresa: title y meta description SEO personalizables; foto, texto y
  años de experiencia para el bloque "Quiénes somos" (toggle on/off).
- Funnel por slug: metadata SEO desde el tenant, bloque "Quiénes somos" y
  testimonios servidos desde DB (sustituye los hardcodeados).
- Flujo de opiniones: el reformista solicita la opinión desde la ficha de un
  lead ganado; el cliente la deja en un funnel dedicado /opinion/[id] con
  estrellas + texto + fotos; entra como pendiente y el reformista la modera
  (publicar/ocultar/eliminar) en /panel/opiniones antes de mostrarla.
- Schema: columnas SEO/about en tenants, testimonioSolicitadoAt en leads,
  enum testimonio_estado, tablas testimonios + testimonio_fotos (migración 0006).
- Seed: opiniones demo (2 publicadas, 1 pendiente) y contenido "Quiénes somos".

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 12:26:13 +02:00
Carlos Narro
1a1caaf0df Reorganiza el routing multi-tenant: funnel por slug, B2B en raíz
- / y /b2b sirven la landing B2B estática (rewrites beforeFiles)
- /{slug} resuelve el funnel del reformista (app/[slug]/page.tsx) con
  branding propio (TenantBrand) y atribución de leads por tenant
- crearLead(slug) y páginas /solicitud usan el tenant del lead
- Panel: edición del slug del funnel + URL pública en /panel/empresa
- Helper de slugs reservados para evitar colisiones con rutas reales

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 11:09:44 +02:00
Carlos Narro
e26e6be38b Merge branch 'main' of https://github.com/McGregory99/reformix-hackaton
# Conflicts:
#	.gitignore
2026-06-01 10:18:35 +02:00
Carlos Narro
d370a725e8 Sustituir landing B2B publicada por versión animada en /b2b
Reemplaza public/b2b.html (bundle estático viejo) por la versión con
reveals al scroll, hover-lift, count-up de stats e imágenes antes/después.
Assets servidos desde /b2b-assets para evitar colisiones. Sirve en el
dominio único reformix.dv3.com.es vía el rewrite /b2b existente.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 10:17:47 +02:00
unknown
06c976a86e Merge branch 'main' of https://github.com/McGregory99/reformix-hackaton 2026-05-31 22:07:12 -04:00
unknown
ef78d9a14c Logia de agente de Whatsapp 2026-05-31 22:02:58 -04:00
Carlos Narro
0e7f27633b Añadir Dockerfile nginx para servir la landing B2B nueva
Sirve index.html + assets (fuentes woff2 e imágenes webp) para
desplegar la landing como app estática en Dokploy.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 22:43:51 +02:00
Carlos Narro
461e47cda1 Extraer landing B2B a fuente editable con animaciones e imágenes reales
Desempaqueta el bundle autocontenido a index.html + assets servidos
(17 fuentes woff2, pares antes/después webp). Añade scroll-reveal sutil
con stagger, hover-lift en tarjetas, counters animados en stats y dos
imágenes reales: render en la burbuja de WhatsApp y comparativa
antes/después en "Cómo funciona". Respeta prefers-reduced-motion.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 16:56:05 +02:00
Carlos Narro
04e74f5fb4 Add sección de preferencias detectadas en el detalle del lead 2026-05-31 16:21:28 +02:00
Carlos Narro
ba61ff4b4d Encadenar extractor de preferencias y aplicación de extras en el orquestador 2026-05-31 16:19:21 +02:00
Carlos Narro
11d78e4f69 Add captura de urgencia, target, estructural y gustos en el form de fotos 2026-05-31 16:18:39 +02:00
Carlos Narro
6e61cbe8e2 Add campos de urgencia, target, gustos y snapshot de preferencias a leads 2026-05-31 16:17:33 +02:00
Carlos Narro
ccb83a3d20 Add guion del agente de voz (preámbulo legal + slots + gustos) 2026-05-31 16:16:27 +02:00
Carlos Narro
405fdc4e32 Add merge a BudgetInputs y aplicación de extras/ajustes al presupuesto 2026-05-31 16:15:13 +02:00
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
9997ce11cc Add plan de implementación del guion de voz + capa de preferencias
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 16:05:13 +02:00
Carlos Narro
a15d8c77b4 Diseño: guion del agente de voz + capa de preferencias
Spec del guion híbrido (slots fijos + bloque abierto) y de la capa que
clasifica/abstrae el texto de gustos en inputs del presupuesto, con cuatro
palancas (material, extras, render, ajustes etiquetados) y clasificador
keyless. Enfoque A: pre+post alrededor de computeBudget, motor intacto.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 15:55:33 +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