InfraGuard

Landing pública, solicitudes de demo y etiquetas de analítica

Las superficies que se abren sin iniciar sesión (landing, formulario de demo, manual de usuario), las etiquetas GA4/GTM que miden a sus visitantes y la pantalla de administración que gestiona las solicitudes de demo resultantes.

Resumen — qué abarca

Además de la consola que hay tras el inicio de sesión, InfraGuard tiene una superficie pública.

Ruta Pantalla Acceso
/ landing de marketing invitados (una sesión autenticada redirige a /console)
/demo formulario de solicitud de demo invitados
/manual manual de usuario tanto invitados como usuarios autenticados
/login · /lang/{locale} inicio de sesión · cambio de idioma invitados

El inicio de la consola vive en /console. Ese traslado cedió / a la superficie pública sin romper el nombre de ruta (overview) ni los marcadores existentes.

La landing se compila como un bundle aparte (front.*). Incluirla en el bundle de la consola obligaría a cada visitante a descargar Vue, ECharts, CodeMirror, Konva y xterm (medido: aproximadamente 1,283KB la consola frente a 24KB el front). Para una página de marketing, la primera impresión es la velocidad de carga. Solo la UI compartida mínima (botones de icono, selector de idioma) vive en _shared-ui, de modo que ambos lados usan la misma definición: copiarla y pegarla dejaría que un lado se desviara.

El manual público

/manual se abre sin iniciar sesión. Quien esté evaluando el producto debería poder leer cómo se opera realmente, y la documentación pública es en sí misma un activo de marketing y de SEO. Los documentos no contienen secretos ni datos en vivo.

Solicitudes de demo

El formulario público (/demo)

Se trata de una recepción de solicitudes, no de una demo con un clic. Solo son obligatorios un nombre y un correo corporativo; el idioma, la fuente de referencia y la IP se registran junto a ellos.

Este formulario es la única vía de escritura para invitados de la aplicación, así que está defendido de cuatro maneras.

  1. Honeypot — si se rellena, no se almacena nada pero la respuesta sigue pareciendo un éxito (nunca anuncie la detección).
  2. throttle:8,1 — la novena solicitud dentro de un minuto obtiene un 429.
  3. Token CSRF.
  4. Validación en servidor con lista blanca — status y note son exclusivos de administración, así que el formulario público no puede fijarlos.

La pantalla de administración (Administración ▸ Solicitudes de demo)

/admin/demo-requests gestiona la bandeja de entrada: CRUD en modal más búsqueda, filtros de estado con recuentos y paginación.

Estado Significado
new recibida, sin tocar
contacted ya se ha contactado
qualified oportunidad cualificada
closed terminada

La búsqueda escapa los comodines de LIKE (%, _, \). Sin eso, escribir un solo % coincidiría con todas las filas.

Etiquetas de analítica (GA4 · GTM · Search Console)

Ponga un ID de medición en .env y la etiqueta aparecerá solo en la superficie pública. Cuando el valor está vacío no se renderiza ningún <script>, de modo que un despliegue por defecto no realiza ninguna petición saliente.

Clave Valor Propósito
GA_MEASUREMENT_ID G-XXXXXXXXXX gtag.js (GA4)
GTM_CONTAINER_ID GTM-XXXXXXX Google Tag Manager (puede convivir)
GOOGLE_SITE_VERIFICATION token meta propiedad verificada en Search Console
GA_PRODUCTION_ONLY true (por defecto) disparar solo en producción

No las añada nunca a la consola (layouts/app). Las URL y los títulos de la consola llevan nombres de host, IP, alias de instancia y títulos de incidente. Enviar eso a una propiedad de analítica de terceros contradice la promesa de autoalojamiento y soberanía del dato que la propia landing hace, y filtra detalles de la infraestructura del cliente.

GA4 no le da las palabras clave de búsqueda. Informa del canal (búsqueda orgánica) y ahí se detiene; las consultas viven únicamente en Search Console. Por eso la etiqueta meta de verificación de propiedad se emite con independencia de GA4: puede verificar la propiedad sin habilitar GA4 en absoluto. Para los informes por sitio consulte Analítica de visitantes y búsquedas.

Política de textos

Las cifras de confianza de la landing usan solo lo que se puede contar en el código, y se cuentan en tiempo de renderizado en lugar de estar codificadas a mano (número de conjuntos de reglas, número de comprobaciones, número de adaptadores de correo/SMS, etcétera).

Esta política detectó un error real: el número de comprobaciones era 36, no 37. A la inversa, nunca se usan valores observados: el recuento de firmas distintas es 43 en 24h, 67 en 7d y 79 en total, así que cambiaría entre visitas y minaría la confianza en lugar de construirla. Al ser una página pública, tampoco toca nunca la base de datos: una consulta por visita es innecesaria, y la superficie de marketing debería sobrevivir a una base de datos inestable.

Fuentes de datos

Destino Ubicación Función
infr_demo_request por defecto (000770) bandeja de solicitudes de demo (status, note, locale, source, ip)
config/analytics.php ← .env config fuente única de verdad de los ID de medición y su activación (App\Support\Analytics)
public/brand/ archivos estáticos logotipo e imágenes OG

public/brand/ debe estar en el repositorio. La mayor parte de public/ es salida generada (build, hot, storage están en gitignore), así que es fácil pasarlo por alto, pero los recursos de marca no son salida de Vite: nada los construye, y sin ese commit el logotipo y la imagen OG dan 404 en producción. La imagen OG debe ser PNG: muchos rastreadores sociales no renderizan una vista previa en SVG.

Permisos

Resolución de problemas · Preguntas frecuentes

Relacionado

공개 랜딩 페이지
공개 랜딩 페이지