Arquitectura del sistema de temas
OmniBuy usa un sistema de overlay en 4 capas para resolver los archivos de un tema. Cada tema solo necesita shipear los archivos que cambia; el resto se hereda de las capas inferiores.
Las 4 capas
Capa 4 (máxima prioridad) themes/<tu-tema>/ → Solo overrides
Capa 3 themes/dawn/ → Tema referencia completo
Capa 2 themes/_base/ → Secciones compartidas (header, hero)
Capa 1 (mínima prioridad) themes/_platform/ → Snippets y JS de addons
Cuando el motor de render busca un archivo (por ejemplo, sections/hero.html), recorre las capas de abajo hacia arriba. La primera capa que lo encuentre gana.
_platform — Addons compartidos
Contiene snippets y assets que usan los addons del marketplace (AR Try-On, Hair Color Try-On). Está en la capa más baja porque es código compartido entre todos los temas.
themes/_platform/
├── addons/
│ ├── ar-tryon.js
│ ├── hair-tryon-vto.js
│ └── hair-tryon.css
└── snippets/
└── ar-tryon-panel.html
_base — Secciones y assets globales
Las secciones más complejas viven aquí: header.html (1240 líneas, 25+ variantes) y hero.html (499 líneas, 10 variantes). Todos los temas heredan estas secciones.
themes/_base/
├── sections/
│ ├── header.html (25 variantes: classic-split, mega-menu, centered-brand…)
│ └── hero.html (10 variantes: carousel, full-bleed, video…)
├── assets/
│ ├── header-variants.css
│ ├── hero-variants.css
│ ├── hero-variants.js
│ └── alpine.min.js
└── snippets/
├── breadcrumb.html
├── css_vars.html
├── product-card.html
└── seo_head.html
dawn — Tema referencia
El tema completo con todas las secciones, templates, snippets, locales y configuración. Un tema personalizado solo shipea los archivos que overridea.
themes/dawn/
├── theme.json (declara sections[], addons[], templates[])
├── config/
│ ├── settings_schema.json
│ └── settings_data.json
├── sections/ (25 módulos de contenido)
├── snippets/ (12 snippets reutilizables)
├── templates/ (21 templates: index, product, cart…)
├── locales/ (es.json, en.json)
└── assets/
<tu-tema> — Solo overrides
Un tema como cielo o olive-luxe es liviano. Solo shipea lo que cambia:
themes/cielo/
├── theme.json (declara industry, sections[], addons[])
├── sections.json (schema del visual editor)
├── config/