Files
Uriel JarethandClaude Opus 5 01b817d098 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]>
2026-08-28 00:07:20 -06:00

50 lines
1.4 KiB
TypeScript

/**
* 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;