Files
dylanmazzei-website/README.md
T
Alejandro Veras eb9137b300 Add Spanish and Arabic versions with a language switch
- English stays at /, Spanish at /es/ and Arabic at /ar/ (right to left)
- EN · ES · AR switch in the header and mobile menu
- Pages are written in English; the build translates them through
  src/i18n/es.json and src/i18n/ar.json, including browser-script strings
- rtl.css mirrors the layout and loads Arabic fonts on /ar/ pages
- hreflang alternates on every page and a multilingual sitemap
- scripts/i18n-extract.mjs lists strings that still need translating

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 16:18:11 -04:00

3.3 KiB
Raw Blame History

dylanmazzei.com

Sitio de Dylan Mazzei, Founder & Operator. HTML estático generado con un script de Node sin dependencias.

Estructura

src/layout.mjs        Layout compartido: <head>, nav, footer, iconos y helpers
src/pages/*.mjs       Una página por archivo (texto literal del documento de contenido)
src/service.mjs       Bloques compartidos de las páginas de servicios de Consulting
static/               Se copia tal cual a dist/ (CSS, JS, imágenes, favicon)
build.mjs             Genera dist/ + sitemap.xml + robots.txt + 404.html
Ruta Archivo
/ src/pages/home.mjs
/about/ src/pages/about.mjs
/portfolio/ src/pages/portfolio.mjs
/consulting/ src/pages/consulting.mjs
/consulting/marketing/ src/pages/marketing.mjs
/consulting/business-setup/ src/pages/business-setup.mjs
/consulting/business-optimization/ src/pages/business-optimization.mjs
/consulting/supply-chain/ src/pages/supply-chain.mjs
/consulting/cybersecurity/ src/pages/cybersecurity.mjs
/consulting/education/ src/pages/education.mjs
/consulting/fractional/ src/pages/fractional.mjs
/contact/ src/pages/contact.mjs
/contact/book/ src/pages/book.mjs
/press/ src/pages/press.mjs

Idiomas

El sitio sale en inglés (/), español (/es/) y árabe (/ar/, de derecha a izquierda), con selector EN · ES · AR en la barra de navegación, hreflang en cada página y un sitemap.xml multilingüe.

Las páginas se escriben en inglés. Al construir, build.mjs genera las versiones traducidas sustituyendo cada texto por su traducción de src/i18n/es.json y src/i18n/ar.json (clave = texto en inglés). Los textos que ponen los scripts del navegador están en JS_STRINGS (src/i18n.mjs). Los ajustes de diseño para árabe están en static/assets/rtl.css.

Si cambias un texto en inglés, su traducción deja de coincidir y esa frase se ve en inglés en /es/ y /ar/. El build lo avisa; para listar lo que falta:

node scripts/i18n-extract.mjs              # cuántos textos faltan por idioma
node scripts/i18n-extract.mjs es falta.json  # los textos en español que faltan, para traducir
npm run build -- --strict                  # falla si falta alguna traducción

El formulario y el calendario de GoHighLevel se muestran tal como están configurados en GoHighLevel (en inglés).

Desarrollo

npm run build     # genera dist/
npm run dev       # build + servidor local

Deploy en Vercel

Importa el repo en Vercel. vercel.json ya define el build (npm run build), la salida (dist) y las URLs limpias con slash final. No hace falta configurar nada más.

Pendientes de contenido

  • Press: falta el link del artículo de Gulf Insider y confirmar su titular exacto (FEATURE en src/pages/press.mjs).
  • Korrith: falta el cargo de Dylan (el tercer campo, vacío, en src/pages/portfolio.mjs).
  • Páginas fuera del alcance actual: Playbook y Poetry no forman parte del sitio. Sus secciones se muestran sin botón; si se crean esas páginas, se añade el botón con su texto original del documento.
  • Formulario y agenda (GoHighLevel): los IDs están en SITE.ghl (src/layout.mjs). En GoHighLevel, el formulario "Dylan – Lead Form" debe redirigir a https://dylanmazzei.com/contact/book/ al enviarse.