El sitio web de ESG México es una aplicación Jamstack de alto rendimiento: Astro 6 genera páginas estáticas en tiempo de build consumiendo contenido de Sanity CMS vía GROQ, sirve los assets a través de la CDN de Vercel, e hidrata selectivamente solo los componentes React que requieren interactividad en el cliente. Esta arquitectura garantiza Time-to-First-Byte mínimo, SEO óptimo y despliegues atómicos con rollback inmediato.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/ivanespinosa/esg-mexico-sitio-web/llms.txt
Use this file to discover all available pages before exploring further.
Visión General
Framework: Astro 6
Astro 6 es el núcleo del sitio, configurado enastro.config.mjs como generador de sitios estáticos con adaptador Vercel:
site: 'https://www.esgmexico.net'
URL canónica del sitio. Usada por Astro para generar el sitemap XML y las URLs absolutas en metadatos Open Graph.
trailingSlash: 'never'
Garantiza que todas las rutas sean sin barra final (
/servicios-esg, no /servicios-esg/), consistente con la configuración de Vercel.adapter: vercel()
El adaptador
@astrojs/vercel (v10) genera una salida en .vercel/output/ compatible con el sistema de archivos y Edge Functions de Vercel.integrations: [react()]
@astrojs/react habilita componentes React como islands de hidratación selectiva dentro de páginas .astro.Sanity CMS Headless
Sanity actúa como CMS headless. El cliente se instancia ensrc/lib/sanity.ts y todas las queries GROQ se ejecutan en tiempo de build:
Schemas del Studio
El Studio (studio/sanity.config.ts) expone cuatro tipos de documento:
blogPost
Artículos del blog. Campos:
title, slug, author (ref), date, category, tags (ref[]), featured, coverImage, excerpt, body (Portable Text), readingTime. Categorías: Estrategia ESG, Regulación y Cumplimiento, Reportes y Estándares, Sostenibilidad Financiera, Fundaciones, Casos y Tendencias.noticia
Noticias del sector ESG. Documento independiente de
blogPost con su propio listado en el Studio bajo ”📰 Noticias”.author
Autoras de los artículos. Referenciado desde
blogPost.author. El Studio lo muestra bajo ”👤 Autoras”.tag
Etiquetas reutilizables. Referenciadas como array desde
blogPost.tags. El Studio los muestra bajo “🏷️ Etiquetas”.Helpers de Imagen
src/lib/sanity.ts exporta tres utilidades para optimizar imágenes desde el CDN de Sanity:
Estructura de Páginas
Todas las rutas se definen ensrc/pages/. Astro convierte cada archivo .astro en una ruta estática durante el build:
- Páginas Principales
- Blog y Noticias
- API Endpoints
| Ruta | Archivo | Descripción |
|---|---|---|
/ | index.astro | Home con hero, stats, servicios y estándares |
/nosotros | nosotros.astro | Equipo directivo, pilares y casos de éxito |
/servicios-esg | servicios-esg.astro | Los tres pilares E, S y G con detalle |
/cumplimiento-regulatorio | cumplimiento-regulatorio/index.astro | NOM-035, ISO 14001, ISO 26000 |
/cumplimiento-regulatorio/nom-035 | cumplimiento-regulatorio/nom-035.astro | Página específica NOM-035 |
/sostenibilidad-financiera | sostenibilidad-financiera.astro | IFRS S1/S2, bonos sostenibles |
/fundaciones-empresariales | fundaciones-empresariales.astro | Constitución de fundaciones |
/contacto | contacto.astro | Formulario de contacto |
/aviso-de-privacidad | aviso-de-privacidad.astro | Aviso legal |
/terminos-y-condiciones | terminos-y-condiciones.astro | Términos legales |
Colecciones de Contenido Local
Además del contenido gestionado en Sanity, el sitio utiliza colecciones de Astro Content Collections para archivos locales:Los artículos en
src/content/blog/ son archivos Markdown locales, mientras que los gestionados a través de Sanity Studio se consumen vía GROQ en tiempo de build. Ambas fuentes pueden convivir en el listado /blog.Estilos: TailwindCSS 4
TailwindCSS 4 se integra a través del plugin oficial de Vite, declarado enastro.config.mjs:
@tailwindcss/typography está disponible para el renderizado de contenido Portable Text del blog. La tipografía principal usa Plus Jakarta Sans (headings) e Inter (cuerpo), cargadas desde Google Fonts en el <head> de Layout.astro.
Componentes y Layout
Layout Principal
src/layouts/Layout.astro es el shell HTML compartido por todas las páginas. Acepta estas props:
Catálogo de Componentes
Header.astro
Navegación fija con fondo
#002451. Incluye links a las 8 secciones principales, CTA de WhatsApp y menú hamburguesa para móvil. Marca el enlace activo comparando Astro.url.pathname.Footer.astro
4 columnas: Marca (Ugarte HRS y Asociados S.C.), Servicios, Recursos y Contacto. Incluye formulario de newsletter y ofuscación de email por JavaScript para evitar bots.
SEO.astro
Genera
<title>, <meta description>, tags Open Graph, canonical y noindex. Recibe props del Layout.WhatsAppFAB.astro
Botón flotante de WhatsApp con número
+52 1 55 1844 5767. El mensaje pre-cargado varía por página a través de la prop waMessage del Layout.Analytics.astro
Inyecta el snippet de Google Tag Manager con el contenedor
GTM-NW8M7NXX en el <head> de todas las páginas.API Endpoint: POST /api/autoevaluacion
El único endpoint SSR del sitio procesa el formulario de autoevaluación ESG y envía los resultados por correo electrónico:CI/CD y Deploy Automático
El flujo de integración y entrega continua conecta Sanity con Vercel:Deploy Hook de Vercel
El Studio dispara un
POST a VERCEL_DEPLOY_HOOK_URL. Este hook está configurado en Vercel bajo Settings → Git → Deploy Hooks.Build en Vercel
Vercel ejecuta
astro build. Astro consulta la API de Sanity (con useCdn: true y apiVersion: '2024-01-01'), genera todas las páginas estáticas y compila el endpoint SSR.