Pasting the indented CSS through Slack turned the indentation into non-breaking spaces, so GHL kept the rules but browsers dropped their declarations. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3.9 KiB
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 (
FEATUREensrc/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 ahttps://dylanmazzei.com/contact/book/?submitted=1al enviarse. Sin?submitted=1,/contact/book/muestra un aviso para llenar el formulario en vez de los calendarios (es solo un filtro en el navegador: los calendarios de GHL siguen siendo públicos, así que el cobro y la disponibilidad se controlan en GHL). La página no se indexa ni sale en el sitemap. El estilo oscuro del formulario vive en GHL: pegaghl/lead-form.min.cssen el formulario (Custom CSS). Usa la versión compacta: al copiar la versión con sangría desde Slack se cuelan espacios invisibles (non-breaking spaces) y GHL descarta esas reglas.