# Checklist de Validacion — Producto: Construction-2

> Core: `construction-2` | Demo: `demo-construction-2` | Ref: Sur Nuevo Norte
> Fecha: 2026-04-02

---

## FORMULA DEL PRODUCTO

```
PRODUCTO = TEMPLATE + PROVISION + MARKETPLACE + INFRAESTRUCTURA

TEMPLATE  = Header + Footer + PageHeader + CSS + Welcome + About + Contact + DynamicHeaders
PROVISION = CoreJSON + CatalogMapping + Seeds + DryRun + ProvisionTest
MARKETPLACE = ShopProduct + Copy + AliasMatrix + Images + Pricing + Landing
INFRA     = DemoURL + ServerScript(global) + CronPipeline(global) + StripeWebhook(global) + WelcomeEmail(global)
```

### Variables que definen este producto

| Variable | Valor |
|----------|-------|
| Core slug | `construction-2` |
| Demo | `demo-construction-2` |
| Schema | HomeAndConstructionBusiness |
| Modulos | services, projects, gallery, blog, faqs, references, team |
| Skin | auto (skin-construction-2) |
| Fonts | Lexend / Lexend / Open Sans |
| Voz | Corporativa, 3ra persona |
| CTA header | ON ("Presupuesto") |
| Shop products | 8 variantes |

---

## BLOQUE 1: TEMPLATE

### 1.1 Archivos base

| # | Componente | Archivo | Existe | OK |
|---|-----------|---------|:---:|:---:|
| 1.1.1 | Header | `layout/front/headers/demo-construction-2.blade.php` | SI (163L) | OK |
| 1.1.2 | Footer | `layout/front/footers/demo-construction-2.blade.php` | SI (126L) | OK |
| 1.1.3 | Page Header | `layout/front/partials/page-header-construction-2.blade.php` | SI (48L) | OK |
| 1.1.4 | CSS Demo | `public/template/css/demos/demo-construction-2.css` | SI (811L) | OK |
| 1.1.5 | Welcome | `modules/cd-base/frontend/demos/demo-construction-2/welcome.blade.php` | SI (356L) | OK |
| 1.1.6 | About | `modules/cd-base/frontend/demos/demo-construction-2/about.blade.php` | SI (234L) | OK |
| 1.1.7 | Contact | `modules/cd-base/frontend/demos/demo-construction-2/contact.blade.php` | SI (216L) | OK |
| 1.1.8 | JS Demo | `public/template/js/demos/demo-construction-2.js` | SI (137L) | OK |

### 1.2 Registros del sistema

| # | Registro | Ubicacion | OK |
|---|---------|-----------|:---:|
| 1.2.1 | Layout mapping (header/footer) | `config/cd-system.php` → `demos.demo-construction-2` | OK |
| 1.2.2 | Skin mapping | `helpers.php` L687 → `skin-construction-2` | OK |
| 1.2.3 | Page headers mapping | `config/page-headers.php` L30 → 9 modulos classic | OK |
| 1.2.4 | Dynamic headers (7 modulos) | services, projects, gallery, blog, faqs, team, references | OK |

### 1.3 Vistas — Identicas al referente online

#### Welcome (homepage)

| # | Seccion | Config key / fuente | Editable admin | Igual a online |
|---|---------|-------------------|:---:|:---:|
| W1 | Hero carousel (slides) | Tabla `welcome_carousels` | SI (admin/welcomecarousel) | |
| W2 | Badge + titulo + texto about inline | `welcome.about_badge`, `welcome.about_heading`, `welcome.about_text` | SI (tab Inicio) | |
| W3 | Services carousel | `$services` (tabla services) | SI (admin/services) | |
| W4 | Counters animados (4) | `about.counters` | SI (tab Empresa) | |
| W5 | Proyectos preview | `$projects` + `welcome.projects_heading` | SI (admin/projects + tab Inicio) | |
| W6 | Split section (texto + imagen) | `welcome.split_badge`, `welcome.split_heading`, `welcome.split_text` | SI (tab Inicio) | |
| W7 | Testimonials | `$references` (tabla references) | SI (admin/references) | |
| W8 | CTA final | `welcome.cta_label` | SI (tab Inicio) | |
| W9 | Logos clientes | Tabla `company_logos` | SI (admin/company-logos) | |

#### About (empresa)

| # | Seccion | Config key | Editable admin | Igual a online |
|---|---------|-----------|:---:|:---:|
| A1 | Page header "Nuestra empresa" | `about.page_title` | SI (tab Empresa) | |
| A2 | Intro parrafo 1 | `about.main_subtitle` | SI (tab Empresa) | |
| A3 | Intro parrafo 2 | `about.description_1` | SI (tab Empresa) | |
| A4 | Services cards (featured-boxes) | `$services` (tabla services) | SI (admin/services) | |
| A5 | Gallery band (3 fotos) | `$aboutGalleryImages` (tabla gallery) | SI (admin/gallery) | |
| A6 | Texto post-galeria | `about.description_2` | SI (tab Empresa) | |
| A7 | Counters (4 stats) | `about.counters` | SI (tab Empresa) | |
| A8 | Team badge + titulo | `about.team_badge`, `about.team_title` | SI (tab Empresa) | |
| A9 | Team members | `$aboutTeam` (tabla team_members) | SI (admin/team) | |
| A10 | Testimonials badge + titulo | `about.testimonials_badge`, `about.testimonials_title` | SI (tab Empresa) | |
| A11 | Testimonials carousel | `$references` (tabla references) | SI (admin/references) | |
| A12 | Projects preview | `$aboutProjects` (tabla projects) | SI (admin/projects) | |
| A13 | CTA titulo | `about.cta_title` | SI (tab Empresa) | |
| A14 | CTA boton | `about.cta_label` | SI (tab Empresa) | |

#### Contact (contacto)

| # | Seccion | Config key | Editable admin | Igual a online |
|---|---------|-----------|:---:|:---:|
| C1 | Page header "Contacto" | Hardcoded `__('Contacto')` | Traduccion | |
| C2 | Badge | `contact.page_badge` | SI (tab Contacto) | |
| C3 | Titulo h3 | `contact.page_title` | SI (tab Contacto) | |
| C4 | Subtitulo/descripcion | `contact.page_subtitle` | SI (tab Contacto) | |
| C5 | Formulario (5 campos) | Hardcoded (UI labels) | — | |
| C6 | Card: intro text | `contact.card_subtitle` | SI (tab Contacto) | |
| C7 | Card: direccion | `contact.address` | SI (tab Contacto) | |
| C8 | Card: telefono | `contact.phone` | SI (tab Contacto) | |
| C9 | Card: email | `contact.email` | SI (tab Contacto) | |
| C10 | Card: horario | `contact.hours` | SI (tab Contacto) | |
| C11 | Google Maps | Generado de `contact.address` | SI (automatico) | |
| C12 | CTA badge | `contact.cta_badge` | SI (tab Contacto) | |
| C13 | CTA titulo | `contact.cta_title` | SI (tab Contacto) | |
| C14 | CTA subtitulo | `contact.cta_subtitle` | SI (tab Contacto) | |
| C15 | Botones VER SERVICIOS / PROYECTOS | Hardcoded (nav labels) | — | |

### 1.4 Header — Checklist

| # | Item | OK |
|---|------|:---:|
| H1 | Nav dinamica (items segun modulos activos) | |
| H2 | Dropdown de servicios (por categoria) | |
| H3 | Dropdown de proyectos (por categoria) | |
| H4 | CTA header configurable (on/off + texto + URL) | |
| H5 | Logo desde config (Cloudinary) | |
| H6 | Email en top bar desde `contact.email` | |
| H7 | Horario en top bar desde `contact.hours` | |
| H8 | Redes sociales dinamicas (toggle + URL) | |
| H9 | Telefono con link `tel:` | |
| H10 | Active state en nav (pagina actual) | |
| H11 | Mobile responsive (hamburger menu) | |

### 1.5 Footer — Checklist

| # | Item | OK |
|---|------|:---:|
| F1 | Logo footer desde config | |
| F2 | Datos de contacto dinamicos | |
| F3 | Redes sociales (mismas que header) | |
| F4 | Quick links dinamicos (segun modulos activos) | |
| F5 | Proyectos recientes (ultimos 3) | |
| F6 | Copyright con nombre del sitio dinamico | |
| F7 | Logos de partners/brands | |

### 1.6 SEO Meta Tags

| # | Item | Vista | OK |
|---|------|-------|:---:|
| S1 | `<title>` correcto | welcome, about, contact | |
| S2 | `<meta description>` con contenido (no vacio) | welcome, about, contact | |
| S3 | OG tags completos | welcome, about, contact | |
| S4 | Twitter Card tags | welcome, about, contact | |
| S5 | Schema.org JSON-LD | master layout | |
| S6 | Canonical URL | master layout | |

---

## BLOQUE 2: PROVISION

| # | Componente | Archivo/Comando | OK |
|---|-----------|----------------|:---:|
| 2.1 | Core JSON existe | `database/seeders/products/core/construction-2.json` (94L) | OK |
| 2.2 | Catalog mapping (8 shop slugs) | `catalog.json` → construction-2 (actualizado 2026-04-02) | OK |
| 2.3 | Seeds FAQs | `seeds/faqs-construction-2.json` (10 FAQs, 3 cats) | OK |
| 2.4 | Seeds Services | `seeds/services-construction-2.json` (4 services, 2 cats) | OK |
| 2.5 | Seeds Blog | `seeds/blog-construction-2.json` (3 posts, 2 cats) | OK |
| 2.6 | Seeds Team | N/A (no existe para ningun core — carga manual) | N/A |
| 2.7 | Seeds References | N/A (no existe para ningun core — carga manual) | N/A |
| 2.8 | Dry-run exitoso | `bewpro:new test@t.com "Test" construction-2 --dry-run` | OK (2026-04-02) |
| 2.9 | Provision real exitosa | Pendiente test con DB temporal | PENDIENTE |
| 2.10 | Front funcional post-provision | Pendiente verificacion visual | PENDIENTE |

---

## BLOQUE 3: MARKETPLACE

| # | Componente | Estado | OK |
|---|-----------|--------|:---:|
| 3.1 | 8 Shop Products en Airtable | | |
| 3.2 | Copy (headline + subheadline + keywords) | | |
| 3.3 | Alias Matrix entries para industria construction | | |
| 3.4 | Imagenes de producto (screenshots) | | |
| 3.5 | Pricing en Stripe (stripe_price_id) | | |
| 3.6 | Visible en bewpro.com/products-catalogue | | |

---

## BLOQUE 4: INFRAESTRUCTURA

| # | Componente | Estado | OK |
|---|-----------|--------|:---:|
| 4.1 | Demo URL (construction-2.bewpro.com) | | |
| 4.2 | Server script (global — compartido) | | |
| 4.3 | Cron pipeline (global) | | |
| 4.4 | Stripe webhook (global) | | |
| 4.5 | Welcome email (global) | | |

---

## PRUEBA MANUAL — Dinamismo y edicion

### Test 1: Editar desde admin y verificar en front

| # | Accion | Resultado esperado | OK |
|---|--------|-------------------|:---:|
| T1 | Cambiar nombre del sitio (tab La Marca) | Se refleja en header, footer, SEO | |
| T2 | Cambiar telefono/email (tab Contacto) | Se refleja en header, footer, contact page, card | |
| T3 | Cambiar colores (tab Apariencia) | Skin CSS regenera con nuevos colores | |
| T4 | Subir nuevo logo (tab Logos) | Logo cambia en header y footer | |
| T5 | Editar About (titulo + descripciones) | About page muestra nuevos textos | |
| T6 | Editar counters | About page muestra nuevos numeros | |
| T7 | Editar CTA contact (badge + titulo + subtitulo) | Contact page CTA cambia | |
| T8 | Editar CTA about (titulo + boton) | About page CTA cambia | |
| T9 | Cambiar heading de servicios en home | Welcome page refleja | |
| T10 | Toggle red social (desactivar Instagram) | Desaparece de header y footer | |

### Test 2: Modulos — CRUD y visualizacion

| # | Modulo | Admin URL | Crear | Editar | Eliminar | Ver en front |
|---|--------|-----------|:---:|:---:|:---:|:---:|
| M1 | Services | /admin/services | | | | |
| M2 | Projects | /admin/projects | | | | |
| M3 | Gallery | /admin/gallery | | | | |
| M4 | Blog | /admin/blog | | | | |
| M5 | FAQs | /admin/faqs | | | | |
| M6 | Team | /admin/team | | | | |
| M7 | References | /admin/references | | | | |
| M8 | Welcome Carousel | /admin/welcomecarousel | | | | |
| M9 | Company Logos | /admin/company-logos | | | | |

### Test 3: Rutas y navegacion

| # | Ruta | Funciona | Contenido correcto |
|---|------|:---:|:---:|
| R1 | `/` (homepage) | | |
| R2 | `/about` | | |
| R3 | `/contact` | | |
| R4 | `/services` | | |
| R5 | `/services/{slug}` (detalle) | | |
| R6 | `/projects` | | |
| R7 | `/projects/{slug}` (detalle) | | |
| R8 | `/gallery` | | |
| R9 | `/blog` | | |
| R10 | `/blog/{slug}` (detalle) | | |
| R11 | `/faqs` | | |
| R12 | `/contact` POST (envio formulario) | | |

### Test 4: Responsive y funcional

| # | Item | OK |
|---|------|:---:|
| RF1 | Desktop (1920px) — todas las paginas | |
| RF2 | Tablet (768px) — layout se adapta | |
| RF3 | Mobile (375px) — hamburger menu, stacking | |
| RF4 | Carousel hero funciona (autoplay + nav) | |
| RF5 | Counters animan al scroll | |
| RF6 | Testimonials carousel funciona | |
| RF7 | Gallery lightbox funciona | |
| RF8 | Google Maps carga correctamente | |
| RF9 | Links tel: y mailto: funcionan | |
| RF10 | WhatsApp floating button funciona | |
| RF11 | Back to top funciona | |
| RF12 | Loader logo aparece | |

---

## COMPARACION FINAL vs REFERENTE ONLINE

> Referente: https://surnuevonorte.bewpro.com

| Pagina | URL online | Secciones identicas | Textos identicos | Dinamico | Admin completo |
|--------|-----------|:---:|:---:|:---:|:---:|
| Homepage | /homepage | | | | |
| About | /about | | | | |
| Contact | /contact | | | | |
| Services | /services | | | | |
| Projects | /projects | | | | |
| Gallery | /gallery | | | | |
| Blog | /blog | | | | |
| FAQs | /faqs | | | | |

---

## ADMIN PANEL — Alineación blade↔panel (agregado 2026-04-04)

### Tipo: `corporate` | Features: carousel, about_inline, services_preview, counters, team, testimonials, split_section, projects_preview

### Condicionales activas en admin:

| Feature/Condicional | Tab | Campos |
|---------------------|-----|--------|
| `about_inline` | Home Page | Story badge, heading, text + secondary text |
| `split_section` | Home Page | Split badge, heading, text, text_2 |
| `counters` | About | 4 estadísticas (valor + sufijo + label) |
| `team` | About | Sección Equipo (badge + título) |
| `testimonials` | About | Sección Testimonios (badge + título) |
| Services/Projects badges | Home Page | Badge + heading para servicios y proyectos |
| CTA label | Home Page | "Pedir presupuesto" |

### Campos EXCLUSIVOS de `corporate` con `split_section`:
- `welcome[split_badge]` — badge sección split
- `welcome[split_heading]` — título sección split
- `welcome[split_text]` — texto principal
- `welcome[split_text_2]` — texto adicional

### Campos EXCLUSIVOS de `corporate` con `counters`:
- `counter_1..4_value` — número
- `counter_1..4_append` — sufijo (+, %, etc.)
- `counter_1..4_label` — etiqueta

### CSS Module Theme Overrides (810 líneas)

Patrón establecido como referencia para restaurant-bar:
```css
/* Section bg: var(--secondary) → beige claro */
.main section[style*="--secondary"]:not(.page-header) { background-color: var(--tertiary--200) !important; }
/* Card bg: var(--dark) → blanco */
.main section div[style*="--dark"] { background-color: var(--light) !important; }
/* Text: light→navy */
.main section[style*="--secondary"] [style*="color: var(--light)"] { color: var(--secondary) !important; }
/* Cyan borders → gris */
.main [style*="rgba(0, 240, 255"] { border-color: var(--grey-300) !important; }
```

### Pendientes admin↔blade:
- [ ] Verificar que todos los config() en blades tengan campo correspondiente en admin
- [ ] Agregar imágenes editables si las blades las usan (about images, contact images)
- [ ] Verificar que no haya campos en admin que no existan en las blades
