Apps por tema — addons[] en theme.json
Un tema declara qué apps/módulos (addons) trae. Al activar el tema, esos addons se activan automáticamente para la tienda —respetando el plan— y se notifica al usuario qué quedó activado.
Dónde se declara
En el theme.json de la raíz del ZIP del tema:
{
"name": "Peluquería Pro",
"base_theme": "dawn",
"industry": "peluqueria",
"addons": [
{ "id": "hair-tryon", "enabled_by_default": true,
"config": { "accent_color": "#C46B8A" } },
{ "id": "reviews", "enabled_by_default": true },
{ "id": "booking", "enabled_by_default": false }
]
}
Campos de cada entrada
| Campo | Tipo | Descripción |
|---|---|---|
id | string | Obligatorio. Debe existir en el catálogo de addons (ver tabla abajo). |
enabled_by_default | bool | true: se activa al seleccionar el tema (si el plan lo permite). false: solo se sugiere. |
config | objeto | Opcional. Valores iniciales del addon (se combinan sobre los defaults). |
Qué pasa al activar el tema
Cada addon declarado se clasifica en:
- Activada —
enabled_by_default: truey el plan de la tienda alcanza elmin_plan. - Sugerida —
enabled_by_default: false, o el usuario ya la había desactivado a mano (nunca se pisa una decisión manual). - Bloqueada — el tema la quiere prendida pero el plan es inferior a su
min_plan(aparece como sugerencia de upgrade).
La activación es idempotente: reactivar el tema no vuelve a tocar addons que el usuario ya configuró.
Validación al subir el ZIP
El validador lee theme.json y comprueba cada addons[].id contra el catálogo.
Un id inexistente rechaza la subida con el error THEME_JSON_ADDON_UNKNOWN.
Catálogo de addons (IDs válidos)
Estos son los id que puedes usar en addons[]. El min_plan define el plan
mínimo para activarlo; los rubros indican para qué industrias está pensado.
id | Nombre | min_plan | Rubros sugeridos |
|---|---|---|---|
gift-delivery | Regalos y Entregas Programadas | starter | florerias, desayunos_sorpresa, comida_bebidas, ninos |
tryon-ar | Probador AR | growth | opticas, joyeria, cuidado_personal |
ar-space | Visualizador 3D / AR en Espacio | growth | hogar_decoracion, tecnologia, arte_hecho_a_mano |
product-configurator | Configurador de Producto | growth | joyeria, opticas, tecnologia, hogar_decoracion |
personalization | Personalización / Print-on-demand | starter | deportes, ninos, joyeria, arte_hecho_a_mano, comida_bebidas |
subscriptions | Suscripciones y Reposición | growth | comida_bebidas, cuidado_personal, mascotas |
booking | Agenda y Reservas | growth | mascotas, restaurantes, deportes |
quiz | Quiz / Recomendador | starter | cuidado_personal, mascotas, tecnologia, moda, deportes |
size-fit | Tallas y Fit | free | moda, deportes, ninos |
digital-catalog | Catálogo Digital | starter | cursos_digital |
unique-piece | Pieza Única / Bajo Pedido | starter | arte_hecho_a_mano, joyeria |
profiles-reminders | Perfiles y Recordatorios | growth | mascotas, ninos, florerias |
reviews | Reseñas con Foto | free | — |
complaints | Libro de Reclamaciones | free | — |
b2b-quotes | Cotizaciones B2B | growth | — |
abandoned-carts | Recuperación de Carritos | growth | — |
loyalty | Programa de Lealtad | growth | — |
hair-tryon | Probador de Color de Cabello | growth | cuidado_personal, belleza, peluqueria |
Este catálogo se define en el código en internal/addons/registry.go (variable
Registry). Si agregas un addon nuevo al registry, actualiza también esta tabla.
Ejemplo mínimo por rubro
// Tema de óptica
{
"name": "Óptica Visión",
"base_theme": "dawn",
"industry": "opticas",
"addons": [
{ "id": "tryon-ar", "enabled_by_default": true },
{ "id": "reviews", "enabled_by_default": true },
{ "id": "size-fit", "enabled_by_default": false }
]
}