# 🎯 Metodología de Propagación: Demos vs Proyecto Específico

## 📋 Principio Fundamental

**Los demos son parte del CORE y deben estar completos en cd-system.**  
**Los proyectos solo personalizan su identidad (logos, textos, configuraciones).**

---

## ✅ ¿QUÉ SE PROPAGA? (Demos y Core)

### 1. **Demos Completos** (TODO se propaga)

Los demos son templates reutilizables que deben estar completos en cd-system:

#### Assets de Demos:
- ✅ `public/cd-project/img/demos/{demo-name}/**` - TODOS los assets del demo
- ✅ `public/template/css/demos/demo-{name}.css` - CSS del demo
- ✅ `public/template/css/skins/skin-{name}.css` - Skin del demo
- ✅ `public/template/js/demos/demo-{name}.js` - JS del demo

#### Vistas de Demos:
- ✅ `resources/views/layout/front/headers/demo-{name}.blade.php`
- ✅ `resources/views/layout/front/footers/demo-{name}.blade.php`
- ✅ `resources/views/modules/cd-base/frontend/demos/demo-{name}/**` - Vistas específicas del demo

#### Componentes de Demos:
- ✅ `app/View/Components/Layout/Demo{Name}/**` - Componentes del demo

#### Configuración de Demos:
- ✅ Mapeos en `app/helpers.php` para nuevos demos
- ✅ Documentación de demos en `docs/`

### 2. **Core y Sistema Base** (TODO se propaga)

#### Helpers y Utilidades:
- ✅ `app/Helpers/**` - Todos los helpers reutilizables
- ✅ `app/helpers.php` - Autoload de helpers
- ✅ `app/Providers/**` - Service providers reutilizables

#### Mejoras del Sistema:
- ✅ `resources/views/layout/front/master.blade.php` - Mejoras reutilizables (sin datos específicos)
- ✅ `composer.json` - Actualizaciones de autoload y dependencias
- ✅ Migraciones y seeders nuevos
- ✅ Módulos y funcionalidades nuevas

#### Documentación:
- ✅ `docs/**` - Toda la documentación del sistema
- ✅ Guías y metodologías

---

## ❌ ¿QUÉ NO SE PROPAGA? (Proyecto Específico)

### 1. **Identidad del Proyecto**

#### Assets del Proyecto:
- ❌ `public/cd-project/img/logos/**` - Logos del proyecto
- ❌ `public/cd-project/img/favicon/**` - Favicons del proyecto
- ❌ `public/cd-project/assets/**` - Assets personalizados del proyecto
- ❌ `public/cd-project/img/demos/{demo}/logo.png` - Si es logo del proyecto (no del demo)

#### Configuración Específica:
- ❌ `config/site.php` - Con datos específicos del proyecto (nombre, email, etc.)
- ❌ `config/cd-system.php` - Con demo activo y módulos del proyecto
- ❌ `config/projectTexts.json` - Textos específicos del proyecto

#### Contenido Específico:
- ❌ Vistas con contenido hardcodeado del proyecto
- ❌ Textos específicos en vistas
- ❌ Datos de contacto específicos

---

## 🔍 Criterios de Identificación

### ¿Es Demo o Proyecto?

#### ✅ **ES DEMO** (Propagar):
- Archivos en `public/cd-project/img/demos/{demo-name}/`
- Vistas en `resources/views/layout/front/headers/demo-*.blade.php`
- Vistas en `resources/views/layout/front/footers/demo-*.blade.php`
- CSS/JS en `public/template/css/demos/demo-*.css`
- Componentes en `app/View/Components/Layout/Demo*/`

#### ❌ **ES PROYECTO** (NO propagar):
- Archivos en `public/cd-project/img/logos/`
- Archivos en `public/cd-project/img/favicon/`
- Archivos en `public/cd-project/assets/` (excepto si son del demo)
- `config/site.php` con datos específicos
- `config/cd-system.php` con configuración del proyecto

---

## 📦 Estructura de Demos

### Demo Completo en cd-system debe incluir:

```
demo-{name}/
├── 📁 Assets
│   ├── public/cd-project/img/demos/{name}/** (TODOS los assets)
│   ├── public/template/css/demos/demo-{name}.css
│   ├── public/template/css/skins/skin-{name}.css
│   └── public/template/js/demos/demo-{name}.js
│
├── 📁 Vistas
│   ├── resources/views/layout/front/headers/demo-{name}.blade.php
│   ├── resources/views/layout/front/footers/demo-{name}.blade.php
│   └── resources/views/modules/cd-base/frontend/demos/demo-{name}/**
│
├── 📁 Componentes (si aplica)
│   └── app/View/Components/Layout/Demo{Name}/**
│
└── 📁 Configuración
    └── Mapeo en app/helpers.php
```

---

## 🚀 Flujo de Trabajo

### Escenario 1: Nuevo Demo Desarrollado en Proyecto

1. **Desarrollo en Proyecto:**
   ```bash
   # Desarrollar demo completo en catalogue
   # - Assets en public/cd-project/img/demos/demo-nuevo/
   # - Vistas en resources/views/layout/front/headers/footers/
   # - CSS/JS si es necesario
   ```

2. **Propagar Demo Completo:**
   ```bash
   cd /Applications/XAMPP/xamppfiles/htdocs/catalogue
   ./scripts/send-to-cd-system.sh
   # El script identifica automáticamente que es demo y propaga TODO
   ```

3. **Verificar en cd-system:**
   ```bash
   cd /Applications/XAMPP/xamppfiles/htdocs/cd-system
   # Verificar que el demo esté completo
   ls -la public/cd-project/img/demos/demo-nuevo/
   ```

### Escenario 2: Mejoras a Demo Existente

1. **Mejorar Demo en Proyecto:**
   ```bash
   # Mejorar vistas, assets, CSS/JS del demo
   ```

2. **Propagar Mejoras:**
   ```bash
   ./scripts/send-to-cd-system.sh
   # Solo propaga cambios del demo, NO assets del proyecto
   ```

### Escenario 3: Nuevo Proyecto desde Demo

1. **Crear Proyecto:**
   ```bash
   cd /Applications/XAMPP/xamppfiles/htdocs/cd-system
   ./scripts/create-complete-project.sh
   # Selecciona demo existente
   ```

2. **Personalizar Proyecto:**
   ```bash
   # Solo personalizar:
   # - Logos en public/cd-project/img/logos/
   # - config/site.php con datos del proyecto
   # - config/cd-system.php con demo activo
   # - Textos específicos
   ```

---

## 🔄 Validación Automática

El script `send-to-cd-system.sh` valida automáticamente:

1. ✅ Identifica archivos de demos (por patrón `demo-*`)
2. ✅ Excluye assets del proyecto (`logos/`, `favicon/`, `assets/`)
3. ✅ Excluye configuraciones específicas (`config/site.php`, `config/cd-system.php`)
4. ✅ Muestra preview antes de propagar
5. ✅ Permite revisión manual de archivos críticos

---

## 📝 Checklist de Propagación

### Antes de Propagar:

#### Demos:
- [ ] Todos los assets del demo están en `public/cd-project/img/demos/{name}/`
- [ ] Vistas del demo están completas
- [ ] CSS/JS del demo están presentes
- [ ] No hay referencias a datos específicos del proyecto en el demo
- [ ] El demo funciona independientemente

#### Core:
- [ ] Helpers no tienen referencias específicas al proyecto
- [ ] Vistas base no tienen datos hardcodeados
- [ ] Documentación es genérica

#### Proyecto Específico:
- [ ] Logos del proyecto NO se propagan
- [ ] `config/site.php` NO se propaga
- [ ] Textos específicos NO se propagan

---

## 🎯 Reglas de Oro

1. **Demos = Core**: Todo lo relacionado con demos debe estar en cd-system
2. **Proyecto = Identidad**: Solo logos, textos y configuraciones específicas
3. **Validar Antes**: Siempre revisar qué se propaga antes de commitear
4. **Documentar Demos**: Nuevos demos deben documentarse
5. **Probar Después**: Verificar que el demo funciona en cd-system

---

## 📚 Ejemplos Prácticos

### ✅ Ejemplo 1: Nuevo Demo "demo-logistics"

**En catalogue:**
```
public/cd-project/img/demos/transportation-logistic/**  ← PROPAGAR TODO
resources/views/layout/front/headers/demo-transportation-logistic.blade.php  ← PROPAGAR
resources/views/layout/front/footers/demo-transportation-logistic.blade.php  ← PROPAGAR
```

**NO propagar:**
```
public/cd-project/img/logos/logo.png  ← NO (es logo del proyecto)
config/site.php  ← NO (tiene datos de Technoa)
```

### ✅ Ejemplo 2: Mejora en MetaTagsHelper

**Propagar:**
```
app/Helpers/MetaTagsHelper.php  ← PROPAGAR (es core)
app/helpers.php  ← PROPAGAR (es core)
composer.json  ← PROPAGAR (actualización de autoload)
```

**NO propagar:**
```
config/site.php  ← NO (tiene datos específicos de Technoa)
```

---

**Última actualización:** Noviembre 2024  
**Versión:** 1.0 - Metodología Completa

