# 🏗️ Proceso Estratégico: Configurar Nuevo Producto/Proyecto

## 📋 Resumen Ejecutivo

Este documento describe el proceso completo para configurar un nuevo producto/proyecto en el sistema CD-System, incluyendo configuración de módulos, identidad visual, meta tags, y personalización de nombres de módulos.

---

## 🎯 Objetivo

Configurar completamente un nuevo producto desde cero, asegurando que:
- ✅ Módulos activos estén correctamente configurados
- ✅ Demo correspondiente esté seleccionado
- ✅ Header y Footer del demo estén alineados
- ✅ Nombres de módulos estén personalizados según el producto
- ✅ Meta tags y redacciones estén orientadas al producto
- ✅ Identidad visual esté completamente configurada

---

## 📝 Información del Producto

### Producto: Construction

**Configuración:**
- **Producto:** `construction`
- **Demo:** `demo-construction`
- **Módulos Activos:** `projects`, `gallery`, `blog`
- **Módulos Inactivos:** `services`, `products`, `faqs`, `team`, `references`, `newsletter`, `news`, `about`, `contact`

---

## 🔧 Paso 1: Configurar `config/cd-system.php`

### 1.1 Actualizar Demo Activo

```php
'theme' => [
    'demo' => 'demo-construction',
    'skin' => 'auto',
    // ...
],
```

### 1.2 Activar/Desactivar Módulos

**Módulos a ACTIVAR:**
- `projects` → `active: true`
- `gallery` → `active: true`
- `blog` → `active: true`

**Módulos a DESACTIVAR:**
- `products` → `active: false`
- `services` → `active: false`
- `faqs` → `active: false`
- `team` → `active: false`
- `references` → `active: false`
- `newsletter` → `active: false`
- `news` → `active: false`
- `about` → `active: false`
- `contact` → `active: false`

### 1.3 Personalizar Nombres de Módulos

Los nombres de módulos pueden variar según el producto. Ejemplos:

**Para Construction:**
- `projects` → `name: 'Proyectos'` o `name: 'Obras'`
- `gallery` → `name: 'Galería'` o `name: 'Portfolio'`
- `blog` → `name: 'Noticias'` o `name: 'Blog'`

**Para Law Firm 2:**
- `services` → `name: 'Áreas de Actuación'` (en lugar de "Servicios")

**Para Transportation Logistic:**
- `services` → `name: 'Soluciones'`
- `products` → `name: 'Equipos'`
- `blog` → `name: 'Novedades'`

---

## 🎨 Paso 2: Configurar `config/site.php`

### 2.1 Identidad Básica

```php
'name' => 'Nombre del Proyecto',
'tagline' => 'Tagline del proyecto',
'url' => 'https://www.proyecto.com',
'author' => 'Compañía Digital',
'theme' => 'light',
```

### 2.2 SEO y Meta Tags

**SEO Básico:**
```php
'seo' => [
    'keywords' => 'keywords específicas del producto',
    'description' => 'Descripción SEO orientada al producto',
    'title' => 'Título SEO del producto',
    'language' => 'es_AR',
    'robots' => 'index, follow',
    // ...
],
```

**Open Graph:**
```php
'og' => [
    'enabled' => true,
    'type' => 'website',
    'title' => 'Título para Open Graph',
    'description' => 'Descripción para compartir en redes sociales',
    'url' => 'https://www.proyecto.com',
    'site_name' => 'Nombre del Sitio',
    'image' => 'cd-project/img/meta-tags/og-image.png',
    'image_width' => 1200,
    'image_height' => 630,
    'image_type' => 'image/png',
    'locale' => 'es_AR',
],
```

**Twitter Cards:**
```php
'twitter' => [
    'enabled' => true,
    'card' => 'summary_large_image',
    'title' => 'Título para Twitter',
    'description' => 'Descripción para Twitter',
    'image' => 'cd-project/img/meta-tags/twitter-image.png',
],
```

**JSON-LD Schema:**
```php
'schema' => [
    'enabled' => true,
    'type' => 'Organization', // o 'LocalBusiness', 'Service', etc.
    'name' => 'Nombre de la Organización',
    'url' => 'https://www.proyecto.com',
    'logo' => 'cd-project/img/logos/logo.png',
    'description' => 'Descripción para schema',
    'contact_point' => [
        'enabled' => true,
        'telephone' => '+54...',
        'contact_type' => 'customer service',
        'area_served' => 'AR',
    ],
],
```

### 2.3 Redacciones y Contenido

**Footer:**
```php
'footer' => [
    'description' => 'Descripción del footer orientada al producto',
    'navegacion_principal' => [
        'inicio' => ['title' => 'Inicio', 'url' => '/', 'active' => true],
        'about' => ['title' => 'Nosotros', 'url' => '/about', 'active' => true],
        'contact' => ['title' => 'Contacto', 'url' => '/contact', 'active' => true],
    ],
    'modules' => [
        'projects' => [
            'title' => 'PROYECTOS', // Nombre personalizado
            'url' => 'projects',
            'active' => true,
            'page_header' => [
                'title' => 'Nuestros Proyectos',
                'subtitle' => 'Subtitle específico del producto',
            ],
        ],
        // ... otros módulos
    ],
],
```

**Welcome Page:**
```php
'welcome' => [
    'title' => 'Bienvenido a [Nombre]',
    'subtitle' => 'Subtitle orientado al producto',
    'newsletter_title' => 'Título del newsletter orientado al producto',
],
```

**About Page:**
```php
'about' => [
    'main_title' => 'Título principal orientado al producto',
    'main_subtitle' => 'Subtitle orientado al producto',
    'sections' => [
        'mission' => ['title' => 'Nuestra Misión', 'content' => '...'],
        'vision' => ['title' => 'Nuestra Visión', 'content' => '...'],
    ],
],
```

**Contact:**
```php
'contact' => [
    'email' => 'contacto@proyecto.com',
    'phone' => '+54 ...',
    'form_title' => 'Título del formulario',
    'form_subtitle' => 'Subtitle del formulario',
],
```

**Auth (Login):**
```php
'auth' => [
    'login_title' => 'Panel de Administración',
    'login_subtitle' => 'Nombre del Proyecto | Descripción',
    // Imágenes de fondo del login - El sistema buscará automáticamente si no existen:
    // 1. login-bg.jpg / login-bg-dark.jpg (específicas para login)
    // 2. background-1.jpg / background-2.jpg (genéricas del demo)
    'login_background_image' => 'cd-project/img/demos/{demo-name}/backgrounds/background-1.jpg',
    'login_background_image_dark' => 'cd-project/img/demos/{demo-name}/backgrounds/background-2.jpg',
    'primary_color' => '#0088CC',
    'primary_color_hover' => '#0077BB',
],
```

---

## 🎭 Paso 3: Verificar Header y Footer del Demo

### 3.1 Header del Demo

**Ubicación:** `resources/views/layout/front/headers/demo-construction.blade.php`

**Verificar:**
- ✅ Usa `get_dynamic_navigation('header')` para generar navegación
- ✅ Muestra solo módulos activos
- ✅ Soporta dropdowns para módulos con categorías (projects, services)
- ✅ Logo y branding correctos

### 3.2 Footer del Demo

**Ubicación:** `resources/views/layout/front/footers/demo-construction.blade.php`

**Verificar:**
- ✅ Usa `get_dynamic_navigation('footer')` para generar navegación
- ✅ Muestra solo módulos activos
- ✅ Información de contacto correcta
- ✅ Redes sociales configuradas

---

## 📄 Paso 4: Meta Tags en Vistas

### 4.1 Páginas Principales

Cada página principal debe tener meta tags personalizados:

**Welcome:**
```blade
@section('title', __('Inicio'))
@section('description', config('site.seo.description'))
@section('keywords', config('site.seo.keywords'))
```

**About:**
```blade
@section('title', __('Nuestra Empresa'))
@section('description', 'Descripción específica de la empresa orientada al producto')
@section('keywords', config('site.seo.keywords') . ', empresa, sobre nosotros')
```

**Contact:**
```blade
@section('title', __('Contacto'))
@section('description', 'Descripción del contacto orientada al producto')
```

### 4.2 Módulos

Los módulos también deben tener meta tags personalizados en sus vistas principales.

---

## 📦 Paso 5: Configurar Datos de Módulos (JSON)

### 5.1 Ubicación de Archivos JSON

Los datos de módulos se encuentran en:
```
database/seeders/project-data/
├── projects.json      # Datos de proyectos
├── gallery.json       # Datos de galería
├── blog.json          # Datos de blog
├── faqs.json          # Datos de FAQs
├── services.json      # Datos de servicios
└── products.json      # Datos de productos
```

### 5.2 Actualizar Contenido de Módulos

**IMPORTANTE:** Antes de ejecutar los comandos de refresh, debes actualizar los archivos JSON con contenido apropiado para el producto.

#### 5.2.1 Estructura General

Cada archivo JSON contiene:
- **Categorías:** Organización del contenido por categorías
- **Tags:** Etiquetas para filtrado y búsqueda
- **Items:** Contenido principal (proyectos, posts, FAQs, etc.)

#### 5.2.2 Ejemplo: `projects.json`

```json
{
  "project_categories": [
    {
      "name": "Infraestructura",
      "slug": "infraestructura",
      "description": "Obras de infraestructura vial, hidráulica y de servicios públicos."
    }
  ],
  "project_tags": [
    { "name": "Infraestructura Vial", "slug": "infraestructura-vial" }
  ],
  "projects": [
    {
      "title": "Nombre del Proyecto",
      "image": "cd-project/cd-system/seeders/projects/1.jpg",
      "description": "Descripción del proyecto orientada al producto",
      "is_active": true,
      "categories": ["Infraestructura"],
      "tags": ["infraestructura-vial"]
    }
  ]
}
```

#### 5.2.3 Ejemplo: `blog.json`

```json
{
  "post_categories": [
    {
      "name": "Proyectos y Obras",
      "slug": "proyectos-obras",
      "description": "Noticias sobre proyectos de construcción."
    }
  ],
  "posts": [
    {
      "title": "Título del Post",
      "slug": "titulo-del-post",
      "header": "cd-project/img/demos/construction/blog/post-thumb-1.jpg",
      "category_slug": "proyectos-obras",
      "description": "Descripción SEO del post",
      "content": "Contenido completo del artículo...",
      "user_id": 1,
      "type": "public",
      "status": "published",
      "is_featured": true,
      "published_at": "2024-02-18 10:00:00"
    }
  ]
}
```

#### 5.2.4 Ejemplo: `faqs.json`

```json
{
  "faqs_categories": [
    {
      "name": "Sistema y Funcionalidades",
      "slug": "sistema-funcionalidades",
      "description": "Preguntas sobre el sistema autoadministrable."
    }
  ],
  "faqs": [
    {
      "question": "¿Pregunta frecuente?",
      "answer": "Respuesta detallada orientada al producto.",
      "category_slug": "sistema-funcionalidades",
      "order": 1,
      "is_featured": true
    }
  ]
}
```

### 5.3 Comandos para Poblar Módulos

Una vez actualizados los archivos JSON, ejecuta los comandos correspondientes:

```bash
# Proyectos
php artisan projects:refresh --clean

# Galería
php artisan gallery:refresh --clean

# Blog
php artisan blog:refresh --clean

# FAQs
php artisan faqs:refresh --clean

# Servicios (si está activo)
php artisan services:refresh --clean

# Productos (si está activo)
php artisan products:refresh --clean
```

**Nota:** El flag `--clean` elimina todos los datos existentes y crea desde cero. Sin `--clean`, los datos se actualizan/crean sin eliminar existentes.

### 5.4 Consideraciones por Producto

#### Construction (Demo)
- **Projects:** Proyectos de construcción genéricos (infraestructura, vivienda, comercial, etc.)
- **Gallery:** Imágenes de obras de construcción, sin referencias a empresas específicas
- **Blog:** Noticias sobre construcción, tecnología, sustentabilidad, diseño
- **FAQs:** Preguntas sobre el sistema autoadministrable y funcionalidades

#### Transportation Logistic (Technoa)
- **Services:** Soluciones industriales (bombas, instrumentación, automatización)
- **Products:** Equipos industriales (Yokogawa, bombas centrífugas, etc.)
- **Blog:** Noticias sobre industria, automatización, mantenimiento
- **FAQs:** Preguntas sobre servicios industriales, productos, soporte técnico

### 5.5 Checklist de Datos de Módulos

- [ ] Actualizar `projects.json` con proyectos apropiados al producto
- [ ] Actualizar `gallery.json` con imágenes y categorías apropiadas
- [ ] Actualizar `blog.json` con posts y categorías orientadas al producto
- [ ] Actualizar `faqs.json` con preguntas relevantes al producto/sistema
- [ ] Verificar que no hay referencias a empresas específicas (salvo que sea necesario)
- [ ] Verificar que las categorías y tags son apropiadas al producto
- [ ] Ejecutar comandos `php artisan [modulo]:refresh --clean` para cada módulo activo
- [ ] Verificar en el sitio web que los datos se muestran correctamente

---

## 🔄 Paso 7: Proceso Completo

### Checklist de Configuración

#### Fase 1: Configuración Base
- [ ] Actualizar `config/cd-system.php` con demo correcto
- [ ] Activar/desactivar módulos en `config/cd-system.php`
- [ ] Personalizar nombres de módulos en `config/cd-system.php`

#### Fase 2: Identidad Visual
- [ ] Actualizar `config/site.php` con identidad básica
- [ ] Configurar SEO en `config/site.php`
- [ ] Configurar Open Graph en `config/site.php`
- [ ] Configurar Twitter Cards en `config/site.php`
- [ ] Configurar JSON-LD Schema en `config/site.php`

#### Fase 3: Contenido y Redacciones
- [ ] Actualizar redacciones del footer en `config/site.php`
- [ ] Actualizar redacciones del welcome en `config/site.php`
- [ ] Actualizar redacciones del about en `config/site.php`
- [ ] Actualizar redacciones del contact en `config/site.php`
- [ ] Configurar imágenes de fondo del login en `config/site.php` → `auth.login_background_image`
- [ ] Personalizar nombres de módulos en `config/site.php` → `footer.modules`

#### Fase 4: Vistas y Meta Tags
- [ ] Agregar meta tags a `welcome.blade.php`
- [ ] Agregar meta tags a `about.blade.php`
- [ ] Agregar meta tags a `contact.blade.php`
- [ ] Verificar meta tags en vistas de módulos activos

#### Fase 5: Imágenes de Login
- [ ] Colocar imágenes de fondo en `public/cd-project/img/demos/{demo}/backgrounds/`
- [ ] Configurar rutas en `config/site.php` → `auth.login_background_image`
- [ ] Verificar que las imágenes se muestren correctamente en `/login`

#### Fase 6: Datos de Módulos
- [ ] Actualizar `projects.json` con contenido apropiado
- [ ] Actualizar `gallery.json` con contenido apropiado
- [ ] Actualizar `blog.json` con contenido apropiado
- [ ] Actualizar `faqs.json` con contenido apropiado
- [ ] Ejecutar `php artisan projects:refresh --clean`
- [ ] Ejecutar `php artisan gallery:refresh --clean`
- [ ] Ejecutar `php artisan blog:refresh --clean`
- [ ] Ejecutar `php artisan faqs:refresh --clean`

#### Fase 6: Verificación
- [ ] Verificar que header muestra solo módulos activos
- [ ] Verificar que footer muestra solo módulos activos
- [ ] Verificar que nombres de módulos son correctos
- [ ] Verificar meta tags en navegador (herramientas de desarrollador)
- [ ] Verificar Open Graph con [Facebook Debugger](https://developers.facebook.com/tools/debug/)
- [ ] Verificar Twitter Cards con [Twitter Card Validator](https://cards-dev.twitter.com/validator)

---

## 📚 Ejemplos por Producto

### Construction

**Módulos Activos:**
- `projects` → Nombre: "Proyectos" o "Obras"
- `gallery` → Nombre: "Galería" o "Portfolio"
- `blog` → Nombre: "Noticias" o "Blog"

**Redacciones:**
- Enfocadas en construcción, obras, proyectos arquitectónicos
- Keywords: construcción, arquitectura, obras, proyectos, diseño

### Law Firm 2

**Módulos Activos:**
- `services` → Nombre: "Áreas de Actuación"
- `blog` → Nombre: "Noticias"
- `team` → Nombre: "Equipo"
- `references` → Nombre: "Referencias"

**Redacciones:**
- Enfocadas en servicios legales, abogados, consultoría jurídica
- Keywords: abogados, servicios legales, consultoría jurídica

### Transportation Logistic

**Módulos Activos:**
- `services` → Nombre: "Soluciones"
- `products` → Nombre: "Equipos"
- `blog` → Nombre: "Novedades"
- `faqs` → Nombre: "Preguntas Frecuentes"

**Redacciones:**
- Enfocadas en soluciones industriales, automatización, instrumentación
- Keywords: bombas industriales, instrumentación, automatización, Yokogawa

---

## 🛠️ Comandos Útiles

### Verificar Configuración

```bash
# Ver configuración actual
php artisan tinker
>>> config('cd-system.theme.demo')
>>> config('cd-system.modules')

# Verificar módulos activos
>>> array_filter(config('cd-system.modules'), fn($m) => $m['active'])
```

### Limpiar Cache

```bash
php artisan config:clear
php artisan cache:clear
php artisan view:clear
```

---

## ⚠️ Consideraciones Importantes

1. **Nombres de Módulos:** Los nombres pueden variar según el producto, pero el slug interno (`projects`, `gallery`, etc.) siempre se mantiene.

2. **Meta Tags:** Cada producto debe tener sus propios meta tags orientados a su industria/sector.

3. **Redacciones:** Todas las redacciones deben estar orientadas al producto específico, no usar textos genéricos.

4. **Header/Footer:** Deben usar `get_dynamic_navigation()` para mostrar solo módulos activos automáticamente.

5. **Schema.org:** El tipo de schema puede variar según el producto (Organization, LocalBusiness, Service, etc.).

---

## 📖 Referencias

- [Documentación de Comandos](./COMANDOS-SISTEMA.md)
- [Configuración de Assets](./proceso-actualizar-assets.md)
- [Guía de Crear Proyecto](./guia-paso-a-paso-crear-proyecto.md)

---

**Última actualización:** 2024-12-19  
**Versión:** 1.1.0

