# Validación integral — 9 productos publicados

> Auditoría de cierre · Sprint Q2 · Frente Catálogo
>
> Generado: 2026-05-12

---

## TL;DR

**8 de los 9 productos están 100% alineados.** Hay 1 gap menor (creative-video-editor) y 1 hallazgo cross-product (Demo_URLs no resuelven en DNS).

| Dimensión | Status |
|-----------|--------|
| Cert técnica (`bewpro:certify-product`) | ✅ 9/9 a 100/100 |
| Archivos físicos del demo (8/8) | ⚠️ 8/9 OK · 1 con gap (creative-video-editor 6/8) |
| Registro en Airtable Products | ✅ 9/9 con tier + price + status correctos |
| Helpers (skin_mapping, layout_mapping) | ⚠️ 8/9 mapeados · 1 sin mapping (demo-creative-portfolio) |
| Demo URL navegable | ❌ 0/9 resuelven en DNS (problema cross-cutting) |
| Variantes comerciales activas | ✅ 102 shop products sobre los 9 cores |

---

## La tabla maestra

### Validación técnica + comercial

| Core | Demo | Cert | Files | Airtable | Tier | USD/mes | Demo URL | Variantes |
|------|------|------|-------|----------|------|---------|----------|-----------|
| foundations-ong | demo-accounting-1 | 100/100 ✅ | 8/8 ✅ | Published Ready ✅ | Standard | 30 | demo-ong.bewpro.com ❌ DNS | 8 |
| creative-video-editor | demo-creative-portfolio | 100/100 ✅ | **6/8 ⚠️** | Published Ready ✅ | Pro | 30 | demo-creative-portfolio.bewpro.com ❌ DNS | 7 |
| corporative | demo-marketing-1 | 100/100 ✅ | 8/8 ✅ | Published Ready ✅ | Standard | 30 | marketing1.bewpro.com ❌ DNS | 9 |
| construction | demo-construction | 100/100 ✅ | 8/8 ✅ | Published Ready ✅ | Pro | 35 | construction.bewpro.com ❌ DNS | 3 |
| art-design | demo-architecture-2 | 100/100 ✅ | 8/8 ✅ | Published Ready ✅ | Pro | 35 | art.bewpro.com ❌ DNS | **38** |
| law-firm-digital | demo-law-firm-2 | 100/100 ✅ | 8/8 ✅ | Published Ready ✅ | Pro | 35 | lawfirm.bewpro.com ❌ DNS | 6 |
| real-estate | demo-real-estate | 100/100 ✅ | 8/8 ✅ | Published Ready ✅ | Premium | 40 | realestate.bewpro.com ❌ DNS | 10 |
| restaurant-bar | demo-restaurant | 100/100 ✅ | 8/8 ✅ | Published Ready ✅ | Standard | 30 | restaurant.bewpro.com ❌ DNS | 7 |
| personal-brand | demo-accounting-2 | 100/100 ✅ | 8/8 ✅ | Published Ready ✅ | Pro | 30 | personal.bewpro.com ❌ DNS | 14 |

---

## Distribución de variantes — el "factor LEGO" en acción

Los 9 cores están siendo reusados para **102 shop products** distintos (variantes comerciales en `catalog.json`):

```
art-design          ████████████████████████████████████████ 38
personal-brand      ████████████████ 14
real-estate         ██████████ 10
corporative         █████████ 9
foundations-ong     ████████ 8
restaurant-bar      ███████ 7
creative-video-editor ███████ 7
law-firm-digital    ██████ 6
construction        ███ 3
```

**Lectura**:
- `art-design` (38 variantes) es el core **más rentable** en términos de reuso. Una sola "fórmula técnica" alimenta diseñadores, arquitectos, ilustradores, fotógrafos, etc.
- `construction` (3 variantes) tiene espacio para **crecer**: el core está estable pero solo 3 productos comerciales lo aprovechan. Sumar 5-10 variantes (consultora, arquitectos, ingeniería, etc.) es trabajo de 30 min × producto.

**Implicancia comercial**: el verdadero ROI de los 9 cores está en cuántos shop products los reusen. Hoy 102; con copy work se podría llegar a 200+.

---

## Gaps detectados

### ⚠️ Gap 1 — creative-video-editor: archivos faltantes del estándar

**Faltan 2 de 8 archivos del [estándar demo](../product-readiness/estandar-demo.md)**:

- `resources/views/layout/front/partials/page-header-creative-portfolio.blade.php` — page header partial
- `public/template/css/skins/skin-creative-portfolio.css` — paleta de colores propia

**Por qué `bewpro:certify-product` le da igual 100/100**: el comando valida **schema parity** + **provisioning** pero **NO valida la presencia de skin/page-header físicos**. Es un gap del certify (no del producto).

**Implicancia real**:
- El demo carga porque hereda los defaults del sistema (page-header `modern` genérico, sin skin custom).
- Pero **no respeta el estándar visual** de los otros 8 demos: no tiene su paleta de colores ni su page header.
- Si comparás los demos lado a lado, este se ve "menos custom" que el resto.

**Falta también** en `app/helpers.php`:
- `get_demo_skin_mapping()`: no tiene entry para `demo-creative-portfolio`
- `get_demo_layout_mapping()`: no tiene entry

**Acción sugerida**:
- Decidir si vale la pena invertir 1-2h en cerrarlo (8/8 estándar) o aceptar el gap como técnico (es funcional sin esto).
- Si se cierra: crear los 2 archivos + agregar mapping en helpers.

---

### ❌ Gap 2 — Demo_URLs en Airtable no resuelven (cross-product)

**Test**: hice DNS lookup de los 9 Demo_URL listados en Airtable, desde VPS1:

```
❌ construction.bewpro.com         → DNS no resuelve
❌ art.bewpro.com                  → DNS no resuelve
❌ lawfirm.bewpro.com              → DNS no resuelve
❌ realestate.bewpro.com           → DNS no resuelve
❌ restaurant.bewpro.com           → DNS no resuelve
❌ personal.bewpro.com             → DNS no resuelve
❌ marketing1.bewpro.com           → DNS no resuelve
❌ demo-ong.bewpro.com             → DNS no resuelve
❌ demo-creative-portfolio.bewpro.com → DNS no resuelve
```

**Sí funcionan** las landings comerciales (`bewpro.com/products-catalogue/{slug}` → HTTP 200 ✅).

**Implicancia**:
- Si un prospect quiere "ver el demo en vivo", **no hay URL navegable**.
- El equipo de ventas no tiene un link funcional para mandar a prospects.
- Los reseller pueden previsualizar los cores solo desde la landing del catálogo (que muestra mockups + features, no un sitio interactivo).

**Causas posibles**:
1. Los subdominios nunca se provisonaron (los Demo_URL son aspiracionales/futuros).
2. Existían en algún momento pero se borraron (housekeeping del VPS).
3. Apuntan a un servidor distinto al actual (legacy DNS).

**Acción sugerida** (cuando decidas):
- **Opción A**: Crear los 9 tenants demo en VPS1 con seeds canónicos (`bewpro:new` por cada uno con `--db=demo-{core}`). Esfuerzo: 4-6h. Beneficio: link "Ver demo en vivo" funcional.
- **Opción B**: Aceptar que los Demo_URL son metadatos. Cambiar Airtable a vacío o a la landing pública (`bewpro.com/products-catalogue/{slug}`). Esfuerzo: 5 min. Beneficio: limpieza, sin demo navegable.
- **Opción C**: Generar previews estáticos (screenshots/video) para cada producto y embeber en la landing.

---

## ✅ Lo que está perfecto

### Alineación capa por capa (8 de los 9)

Para los 8 que están al 100% (todos excepto creative-video-editor):

```
┌─────────────────────────────────────────────────────────────────┐
│  CORE PRESET (JSON)                                              │
│    ✓ database/seeders/products/core/{core}.json existe          │
│    ✓ demo asignado coincide con dir en filesystem               │
│    ✓ módulos activos coinciden con app/Modules/                 │
└─────────────────────────────────────────────────────────────────┘
              │
              ▼
┌─────────────────────────────────────────────────────────────────┐
│  DEMO (8 archivos canónicos)                                     │
│    ✓ header blade                                                │
│    ✓ footer blade                                                │
│    ✓ page-header partial                                         │
│    ✓ welcome.blade.php                                           │
│    ✓ about.blade.php                                             │
│    ✓ contact.blade.php                                           │
│    ✓ demo CSS                                                    │
│    ✓ skin CSS                                                    │
└─────────────────────────────────────────────────────────────────┘
              │
              ▼
┌─────────────────────────────────────────────────────────────────┐
│  AIRTABLE (Products table)                                       │
│    ✓ Record existe con Slug correcto                            │
│    ✓ Catalog_Status: Published                                   │
│    ✓ Reseller_Ready: Ready                                       │
│    ✓ Dev_Status: Ready                                           │
│    ✓ Tier asignado (Standard / Pro / Premium)                   │
│    ✓ Price_USD asignado                                          │
│    ✓ Template linkeado al record de Templates                   │
└─────────────────────────────────────────────────────────────────┘
              │
              ▼
┌─────────────────────────────────────────────────────────────────┐
│  CERT (bewpro:certify-product)                                   │
│    ✓ 100/100 — schema parity, provisioning, seeds, JSON template│
└─────────────────────────────────────────────────────────────────┘
              │
              ▼
┌─────────────────────────────────────────────────────────────────┐
│  SHOP PRODUCTS (variantes comerciales en catalog.json)           │
│    ✓ N shop products apuntan a este core                        │
│    ✓ Cada uno tiene copy comercial (Airtable Shop Products Copy)│
└─────────────────────────────────────────────────────────────────┘
```

### Esquema óptimo confirmado

La separación **demo (visual) / módulos (funcional) / core (fórmula) / shop product (comercial)** está bien implementada:

- **Reuso eficiente**: 1 core `art-design` da 38 productos comerciales sin tocar código.
- **Mantenimiento centralizado**: arreglar un bug en `app/Modules/Services` impacta a los 14 cores que lo usan, no a 14 codebases.
- **Onboarding rápido**: nuevo lead → mira `catalogo-clean.md` → recomienda shop product → pago → provisión automática.
- **Pricing coherente**: tier hereda del core, no de cada shop product (evita inconsistencias).

---

## Plan de acción cerrado

### Opcional — Quick wins (~2h totales)

**Si querés cerrar el 100% del estándar**:

1. **Fix creative-video-editor** (1-2h):
   - Crear `partials/page-header-creative-portfolio.blade.php` (copiar pattern de un demo similar)
   - Crear `skins/skin-creative-portfolio.css` con paleta dark/creative
   - Agregar mapeos en `app/helpers.php` (skin + layout)

2. **Limpiar Demo_URLs en Airtable** (5 min):
   - Decidir entre dejarlos como aspiracional, vaciarlos, o redirigir a landing
   - Si vaciar: PATCH a los 9 records vaciando `Demo_URL` (o cambiándolo a `https://bewpro.com/products-catalogue/{slug}`)

### Opcional — Long play (~4-6h)

**Si querés activar "demos vivos navegables"** (la opción más cara pero comercialmente más fuerte):

3. **Provisionar 9 tenants demo** (4-6h):
   - `bewpro:new demo@bewpro.com "Demo Construction" construction --db=demo-construction`
   - Repetir para los 9
   - Cargar seeds canónicos (data ya armada por core)
   - Apuntar DNS a los subdominios listados en Airtable
   - Actualizar landing del producto con link "Ver demo en vivo"

---

## Conclusión

**¿Los 9 productos están listos?** **Sí, comercialmente sí.** Están publicados, vendibles, certificados técnicamente, con tier/precio en Airtable, y reusándose en 102 variantes comerciales.

**¿Hay gaps?** Sí, 2: 1 técnico menor (creative-video-editor sin 2 archivos custom) y 1 comercial (sin demos navegables). Ninguno **bloquea ventas**, ambos mejoran experiencia.

**¿Esquema/fórmula está bien?** Sí. La separación demo/módulo/core/shop product funciona, escala (38 variantes sobre 1 core lo prueba), y es mantenible.

**¿Productos están alineados?** Sí — los 9 están en los lugares correctos (catalog.json, core JSONs, Airtable Products, Stripe via tier, schema validado).
