eb9137b300
- 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>
65 lines
3.3 KiB
Markdown
65 lines
3.3 KiB
Markdown
# 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/` al enviarse.
|