# Templates de Contenido — Modelo Importador

> Última actualización: 2026-04-10
> Cómo funcionan los templates JSON para cargar contenido en proyectos provisionados.

---

## Qué son

Cada producto tiene un **template JSON** que sirve como modelo para cargar contenido. El reseller:

1. Copia el template del producto
2. Lo completa con datos del cliente (manual o con IA)
3. Lo ejecuta con `bewpro:seed`

---

## Ubicación

```
database/seeders/project-data/templates/
├── template-law-firm.json          (20KB)
├── template-construction.json      (22KB)
├── template-corporative.json       (15KB)
├── template-personal-brand.json    (17KB)
├── template-real-estate.json       (19KB)
├── template-art-design.json        (18KB)
├── template-restaurant.json        (21KB)
└── template-institutional.json     (16KB)
```

---

## Estructura de cada template

### Parte 1: `site` — Configuración del sitio

```json
{
    "site": {
        "name": "[NOMBRE DEL NEGOCIO]",
        "tagline": "[FRASE CORTA]",
        "description": "[DESCRIPCIÓN 1-2 ORACIONES]",
        "contact": {
            "email": "[EMAIL]",
            "phone": "[TELÉFONO]",
            "address": "[UBICACIÓN]",
            "hours": "[HORARIOS]"
        },
        "social_media": {
            "instagram": { "url": "[URL]", "active": true/false },
            "facebook": { "url": "[URL]", "active": true/false },
            "linkedin": { "url": "[URL]", "active": true/false },
            "whatsapp": { "url": "[URL WHATSAPP API]", "active": true/false }
        },
        "welcome": { ... },  // Config keys específicos del demo
        "about": { ... },    // Config keys específicos del demo
        "seo": {
            "title": "[TÍTULO SEO]",
            "description": "[DESCRIPCIÓN SEO — max 155 chars]",
            "keywords": "[KEYWORDS SEPARADAS POR COMA]"
        }
    }
}
```

Los keys de `welcome` y `about` son **diferentes para cada demo**. Por eso cada producto tiene su propio template.

### Parte 2: Módulos — Contenido por sección

Cada módulo tiene una sección de **categorías** y una de **registros**:

```json
{
    "service_categories": [
        { "name": "[CATEGORÍA]", "slug": "slug-de-categoria" }
    ],
    "services": [
        {
            "title": "[NOMBRE DEL SERVICIO]",
            "slug": "slug-del-servicio",
            "subtitle": "[SUBTÍTULO]",
            "description": "<p>[DESCRIPCIÓN EN HTML]</p>",
            "category_slug": "slug-de-categoria",
            "icon": "fas fa-icon",
            "is_featured": true
        }
    ]
}
```

---

## Módulos por producto

| Producto | Módulos en el template |
|----------|----------------------|
| **Law Firm** | services, team, blog, references, faqs |
| **Construction** | services, projects, gallery, blog, faqs, testimonials, team |
| **Corporative** | services, gallery, projects, faqs |
| **Personal Brand** | gallery, blog, projects, faqs |
| **Real Estate** | services, gallery, blog, faqs, projects, team |
| **Art & Design** | services, gallery, projects, blog, faqs |
| **Restaurant** | menu, gallery, blog, faqs, testimonials |
| **Institutional** | services, blog, gallery, faqs |

---

## Campos por módulo

### Services
```json
{
    "title": "REQUERIDO",
    "slug": "auto-generado si no se pone",
    "subtitle": "opcional",
    "description": "HTML permitido",
    "category_slug": "referencia a service_categories",
    "icon": "Font Awesome class (fas fa-...)",
    "is_featured": true/false,
    "sort_order": 1,
    "meta_keywords": "opcional",
    "meta_description": "opcional"
}
```

### Team
```json
{
    "name": "REQUERIDO",
    "position": "cargo",
    "description": "bio breve",
    "email": "opcional",
    "linkedin": "URL opcional",
    "image": "URL de foto",
    "category_slug": "referencia a team_categories"
}
```

### Blog
```json
{
    "title": "REQUERIDO",
    "slug": "auto-generado si no se pone",
    "description": "extracto/resumen",
    "content": "HTML completo del artículo — REQUERIDO",
    "category_slug": "referencia a blog_categories",
    "is_featured": true/false
}
```

### FAQs
```json
{
    "question": "REQUERIDO",
    "answer": "REQUERIDO",
    "category_slug": "referencia a faq_categories",
    "order": 1,
    "is_featured": true/false
}
```

### References
```json
{
    "name": "nombre del cliente",
    "company": "empresa",
    "description": "testimonio o caso de éxito",
    "logo": "URL del logo",
    "category_slug": "referencia a reference_categories",
    "featured": true/false
}
```

### Projects
```json
{
    "title": "REQUERIDO",
    "slug": "auto-generado",
    "description": "HTML permitido",
    "image": "URL de imagen (vacío si no hay)",
    "url": "URL externa del proyecto",
    "category_slug": "referencia a project_categories"
}
```

### Gallery
```json
{
    "title": "opcional",
    "description": "opcional",
    "image": "URL de la imagen (vacío si no hay)",
    "category_slug": "referencia a gallery_categories",
    "is_featured": true/false
}
```

### Testimonials
```json
{
    "name": "REQUERIDO",
    "company": "empresa",
    "description": "texto del testimonio",
    "image": "URL de foto",
    "rating": 1-5,
    "category_slug": "referencia a testimonial_categories",
    "featured": true/false
}
```

### Menu (solo Restaurant)
```json
{
    "name": "REQUERIDO",
    "slug": "auto-generado",
    "description": "descripción del plato",
    "price": 0,
    "image": "URL de imagen",
    "category_slug": "referencia a menu_categories"
}
```

---

## Cómo completar un template

### Opción 1: Manual

1. Copiar el template: `cp templates/template-law-firm.json content-mi-cliente.json`
2. Abrir en un editor de texto
3. Reemplazar cada `[PLACEHOLDER]` con datos reales del cliente
4. Ejecutar: `php artisan bewpro:seed content-mi-cliente.json --db=bp-xxx`

### Opción 2: Con IA (recomendado)

Enviar a Claude/ChatGPT:

```
Tengo este template JSON para un estudio jurídico:
[pegar template]

Completalo con la siguiente información del cliente:
- Nombre: Estudio XYZ
- Servicios: derecho civil, laboral, comercial
- Equipo: Dr. Juan Pérez (socio), Dra. María López (asociada)
- Teléfono: +54 381 ...
- Email: info@estudioxyz.com
[etc.]

Devolveme el JSON completo listo para importar.
```

La IA devuelve el JSON completo → se ejecuta con `bewpro:seed`.

### Opción 3: Scraping + IA (más avanzado)

1. Scrapear la web actual del cliente
2. Enviar a la IA: "Completá este template con la info de este sitio web"
3. La IA extrae y estructura toda la info en el formato del template

---

## Flujo completo

```bash
# 1. Copiar template
cp templates/template-law-firm.json content-cliente.json

# 2. Completar (manual o IA)

# 3. Provisionar
php artisan bewpro:new email "Nombre" law-firm-digital \
    --clean --colors="#..." --db=bp-cliente --skip-assets --no-email

# 4. Seedear
php artisan bewpro:seed content-cliente.json --db=bp-cliente

# 5. Verificar
# Cambiar .env → DB_DATABASE=bp-cliente y abrir en el browser

# 6. Entregar
```

---

## Validación

Antes de seedear, verificar con dry-run:

```bash
php artisan bewpro:seed content-cliente.json --db=bp-cliente --dry-run
```

Muestra el plan sin ejecutar: cuántos settings, servicios, posts, etc. se cargarían.
