feat: sitio comercial FSPM con micro CRM interno
Sitio público orientado a venta consultiva e implementación de las recomendaciones de la auditoría de marca y mercado: - Inicio con tres rutas (industria, riesgo, cumplimiento) y clasificador de riesgo en el héroe, contra el hallazgo de que el visitante tenía que inferir qué solución le correspondía. - Cinco páginas por segmento prioritario y catálogo comparable por clase de fuego, capacidad y agente. - Los claims sin evidencia por modelo quedan aislados y se presentan como compromiso de documentación, nunca como característica del producto. - SEO técnico completo: metadatos por página, sitemap derivado de los datos, JSON-LD, iconos y tarjeta social generadas. Micro CRM: - Captura por formulario embebido y por widget de WhatsApp que registra antes de abrir la conversación. - Atribución de primer toque que sobrevive a la navegación. - Deduplicación de contacto; un mismo contacto acumula oportunidades. - Motor de asignación por reglas con reparto por turno de respaldo. - Panel con dos roles de alcance distinto, tablero analítico, bitácora, pedidos y reglas. No enlazado desde el sitio público y con noindex. Empaquetado en Docker multietapa con la base de demostración horneada en la imagen y el volumen de datos separado, para que los leads capturados sobrevivan a los redespliegues. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5
parent
122e06a4bb
commit
01b817d098
@@ -0,0 +1,49 @@
|
||||
/**
|
||||
* Inventario de rutas públicas bajo prueba. Se deriva de los mismos datos que
|
||||
* construyen el sitio, así que si alguien agrega un producto la prueba lo cubre
|
||||
* sin que nadie actualice una lista a mano.
|
||||
*/
|
||||
|
||||
import { CATEGORIAS, PRODUCTOS } from "../src/data/catalogo";
|
||||
import { INDUSTRIAS } from "../src/data/industrias";
|
||||
|
||||
export const RUTAS_ESTATICAS = [
|
||||
"/",
|
||||
"/soluciones",
|
||||
"/catalogo",
|
||||
"/cumplimiento-nom-002",
|
||||
"/evidencia",
|
||||
"/casos",
|
||||
"/preguntas-frecuentes",
|
||||
"/nosotros",
|
||||
"/contacto",
|
||||
"/aviso-de-privacidad",
|
||||
] as const;
|
||||
|
||||
export const RUTAS_SOLUCIONES = INDUSTRIAS.map((i) => `/soluciones/${i.slug}`);
|
||||
export const RUTAS_CATEGORIAS = CATEGORIAS.map((c) => `/catalogo/${c.slug}`);
|
||||
export const RUTAS_PRODUCTOS = PRODUCTOS.map((p) => `/producto/${p.slug}`);
|
||||
|
||||
export const TODAS_LAS_RUTAS = [
|
||||
...RUTAS_ESTATICAS,
|
||||
...RUTAS_SOLUCIONES,
|
||||
...RUTAS_CATEGORIAS,
|
||||
...RUTAS_PRODUCTOS,
|
||||
];
|
||||
|
||||
/** Muestra representativa, para las pruebas costosas que no valen 45 rutas. */
|
||||
export const RUTAS_MUESTRA = [
|
||||
"/",
|
||||
"/soluciones",
|
||||
`/soluciones/${INDUSTRIAS[0]!.slug}`,
|
||||
"/catalogo",
|
||||
`/catalogo/${CATEGORIAS[0]!.slug}`,
|
||||
`/producto/${PRODUCTOS[0]!.slug}`,
|
||||
"/cumplimiento-nom-002",
|
||||
"/evidencia",
|
||||
"/preguntas-frecuentes",
|
||||
"/contacto",
|
||||
];
|
||||
|
||||
/** Anchos donde el diseño tiene que aguantar. 320 es el piso acordado. */
|
||||
export const ANCHOS = [320, 375, 768, 1024, 1440] as const;
|
||||
Reference in New Issue
Block a user