Files
dylanmazzei-website/README.md
T
Alejandro Veras 27c0189f2b Add a compact copy of the GHL form CSS that survives copy-paste
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>
2026-10-19 12:17:39 -04:00

65 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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:
```bash
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
```bash
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/?submitted=1` al 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: pega `ghl/lead-form.min.css` en 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.