# Proyecto con demo-product-landing — Runbook y validación

**Producto:** Product Landing  
**Demo:** `demo-product-landing`  
**Módulos sugeridos (catálogo):** products, blog, faqs (+ about, contact, project-setup)

Este documento es el runbook para ensamblar un **nuevo proyecto** que use el demo **demo-product-landing**, siguiendo el proceso Q/A (Pasos 0 → 1 → 2 → 3) y validando en cada paso.

---

## Dónde estamos (estado inicial típico)

| Elemento | Estado | Acción |
|----------|--------|--------|
| Base de datos | ✅ Creada (vacía) | Apuntar `.env` → `DB_DATABASE=nombre_proyecto` |
| Assets de marca | ✅ Disponibles (aún no colocados) | Dropear en `public/cd-project/assets/` |
| GA / gtag | ✅ ID disponible | Poner en `analytics.json` |
| Demo | demo-product-landing | Configurar en `cd-system.json` |

---

## Qué preparar antes de ejecutar

### 1. Datos del proyecto (para site-data.json y plantilla)

Recopilar y tener a mano:

- **Identidad:** name, tagline, url, author, description  
- **Contacto:** phone, email, address, hours  
- **Redes:** instagram, facebook, linkedin, youtube, whatsapp (url + active)  
- **SEO:** keywords, description, title; schema (type, name, url, logo, description)  
- **OG/Twitter:** title, description, image (rutas = `cd-project/assets/og-image.png`, `twitter-image.png`)  
- **Header:** CTA si aplica (title, url, target, style)  
- **Footer:** links (contact, products, blog, faqs, about, etc.)  
- **GA:** tracking_id (ej. `G-XXXXXXXXXX`), enabled, track_in_local  

Plantilla completa: [00-proceso-desde-cero.md](00-proceso-desde-cero.md#datos-que-necesitamos-del-proyecto-incoming).

### 2. Assets físicos

- **Ubicación:** `public/cd-project/assets/`
- **Mínimo recomendado:** logo.png, favicon.ico o favicon.svg, apple-touch-icon.png, og-image.png (1200×630), twitter-image.png (1200×630).
- **Opcional:** logo-alternative.png, logo-2.png, favicon-96x96.png, web-app-manifest-*, site.webmanifest.
- Los nombres deben coincidir con los referenciados en `assets.json` y en `site-data.json` (assets, og.image, twitter.image).

### 3. Google Analytics

- **Fuente de verdad:** `database/seeders/project-data/analytics.json`
- Campos: `google_analytics.enabled`, `google_analytics.tracking_id` (ej. G-XXXXXXXXXX), `google_analytics.track_in_local`.
- El layout inyecta el script desde la DB (`config('site.google_analytics')`), no desde `.env`.

### 4. Módulos para Product Landing

Según el catálogo ([productos/README.md](../productos/README.md)):

| Módulo | Activo | Header | Footer |
|--------|--------|--------|--------|
| products | Sí | Sí | Sí |
| blog | Sí | Sí | Sí |
| faqs | Sí | No* | Sí |
| about | Sí | Sí | Sí |
| contact | Sí | Sí | Sí |
| project-setup | Sí (admin) | — | — |
| menu, services, projects, gallery, team, news, references, newsletter, translations | No | No | No |

\* Ajustar según diseño; FAQs suelen ir solo en footer.

---

## Pasos a seguir (orden obligatorio)

### Paso 0 — Ya hecho / verificar

- [ ] DB creada.
- [ ] `.env` con `DB_DATABASE` del proyecto.
- [ ] Ejecutar migraciones (DB vacía):
  ```bash
  php artisan migrate
  ```
  No ejecutar seeders todavía si querés seguir paso a paso.

---

### Paso 1 — Brand Assets

Ref.: [01-brand-assets.md](01-brand-assets.md)

1. **Colocar** en `public/cd-project/assets/` los archivos de marca (logo, favicon, og-image, twitter-image, etc.) con los nombres que usarás en los JSON.
2. **Alinear** `database/seeders/project-data/assets.json`: una entrada por asset con `path` = `cd-project/assets/nombre-archivo`, `type`, `name`.
3. **Alinear** `site-data.json`: en `assets` (main_logo, favicon, footer_logo, etc.), `seo.schema.logo`, `og.image`, `twitter.image` usar las mismas rutas que en `assets.json` (ej. `cd-project/assets/logo.png`).
4. **Para demo-product-landing:** en `site-data.json` → `assets` puedes usar fondos del demo:
   - `hero_background`, `section_background`, etc. pueden apuntar a `cd-project/img/demos/product-landing/...` si existen (opcional; el demo ya usa rutas propias en las vistas).
5. **Ejecutar:**
   ```bash
   php artisan db:seed --class=AssetsSeeder
   php artisan db:seed --class=SiteDataSeeder
   ```
6. **Validar:** Tabla `assets` con `secure_url`; en front: logo, favicon, og/twitter. Luego:
   ```bash
   php artisan cache:clear
   php artisan view:clear
   ```

Checklist Paso 1: [01-brand-assets.md](01-brand-assets.md#criterios-de-cierre-del-paso-1-brand-assets).

---

### Paso 2 — Site Data + Analytics

Ref.: [02-site-data.md](02-site-data.md)

1. **Completar** `database/seeders/project-data/site-data.json` con los datos del proyecto (name, tagline, contact, social_media, footer, seo, og, twitter, assets, modules, auth, blog). Las rutas de assets deben coincidir con `assets.json`.
2. **Ejecutar** (si no lo hiciste en Paso 1 o cambiaste site-data):
   ```bash
   php artisan db:seed --class=SiteDataSeeder
   ```
3. **Completar** `database/seeders/project-data/analytics.json`: `google_analytics.enabled`, `tracking_id` (tu gtag, ej. G-XXXXXXXXXX), `track_in_local`.
4. **Ejecutar:**
   ```bash
   php artisan db:seed --class=AnalyticsSeeder
   ```
5. **Refrescar caché** y validar: nombre, contacto, footer, redes, meta tags y script de GA en el HTML.

Checklist Paso 2: [02-site-data.md](02-site-data.md#criterios-de-cierre-del-paso-2).

---

### Paso 3 — Módulos activos (demo-product-landing)

Ref.: [03-modulos-activos.md](03-modulos-activos.md)

1. **Editar** `database/seeders/project-data/cd-system.json`:
   - `theme.demo`: `"demo-product-landing"`
   - `theme.skin`: `"auto"`
   - `modules`: products, blog, faqs, about, contact, project-setup en `active: true` y `navigation` según tabla de arriba; el resto en `active: false`.
2. **Ejecutar:**
   ```bash
   php artisan db:seed --class=CdSystemSeeder
   ```
3. **(Opcional)** Contenido inicial de módulos (products, blog, faqs):
   ```bash
   php artisan db:seed --class=Project_Seeder
   ```
   Project_Seeder ejecuta CdSystemSeeder, AssetsSeeder, SiteDataSeeder, AnalyticsSeeder y solo los seeders de módulos activos.
4. **Refrescar caché:**
   ```bash
   php artisan cache:clear
   php artisan view:clear
   ```
5. **Validar:** Layout demo-product-landing (header/footer), enlaces de Products, Blog, FAQs, About, Contact; rutas `/products`, `/blog`, `/faqs` accesibles.

Checklist Paso 3: [03-modulos-activos.md](03-modulos-activos.md#criterios-de-cierre-del-paso-3).

---

## Ejecución en un solo golpe (alternativa)

Si tenés todo listo (DB, assets en `public/cd-project/assets/`, los cuatro JSON completos):

```bash
php artisan migrate:fresh --seed
php artisan cache:clear
php artisan view:clear
```

El `DatabaseSeeder` usa `Project_Seeder`, que respeta el orden: CdSystemSeeder → AssetsSeeder → SiteDataSeeder → AnalyticsSeeder → seeders de módulos activos → CdBaseSeeder.

---

## Validación por paso (para documentar)

| Paso | Qué validar | Dónde |
|------|-------------|--------|
| 1 | Logo, favicon, og/twitter correctos | Front + tabla `assets` |
| 2 | Nombre, contacto, footer, redes, meta, GA con ID correcto | Front + HTML (gtag) |
| 3 | Demo product-landing visible; header/footer con Products, Blog, FAQs, About, Contact; rutas OK | Front + rutas /products, /blog, /faqs |

---

## Imágenes del demo (no confundir con assets de marca)

El demo **demo-product-landing** usa imágenes en:

- `public/cd-project/img/demos/product-landing/` (homepage/, backgrounds/, product-carousel-*, client-*.jpg, etc.)

Esas son **assets del demo** (incluidas en el codebase). Los **assets de marca** del proyecto (logo, favicon, og-image) van en `public/cd-project/assets/` y se suben a Cloudinary vía AssetsSeeder.

---

## Orden de seeders (referencia)

1. CdSystemSeeder  
2. AssetsSeeder  
3. SiteDataSeeder  
4. AnalyticsSeeder  
5. ProjectsUsersSeeder (si aplica)  
6. Seeders de módulos activos (ProductsSeeder, BlogSeeder, FaqsSeeder, etc.)  
7. CdBaseSeeder  

---

## Próximos pasos después del ensamblaje

- **Contenido por módulo:** poblar products.json, blog.json, faqs.json y re-ejecutar los seeders correspondientes (o Project_Seeder si querés repoblar todo).
- **Producción:** [deploy/checklist-produccion.md](../deploy/checklist-produccion.md), [qa/env-production-example.env](env-production-example.env).
