# Protección de Proyectos - Arquitectura SaaS

## 🎯 Objetivo

**Proteger los datos de cada proyecto** para que las actualizaciones del código base se puedan propagar sin afectar la identidad y configuración de cada proyecto.

## ✅ Principio Fundamental

> **"Todo lo específico del proyecto → Base de Datos"**  
> **"Solo estructura y valores genéricos → config/site.php"**

## 📊 Separación: Estructura vs Datos del Proyecto

### ✅ En `config/site.php` (Estructura - No Cambia Entre Proyectos)

```php
// ✅ ESTRUCTURA - Se propaga a todos los proyectos
'seo' => [
    'title_template' => '{title} | {site_name}',  // Estructura
    'language' => 'en_US',                         // Valor genérico
    'robots' => 'index, follow',                   // Valor genérico
    'canonical' => true,                           // Estructura
    'schema' => [
        'enabled' => true,                         // Estructura
        'type' => '',                              // Vacío, se llena desde DB
        'name' => '',                              // Vacío, se llena desde DB
    ],
],

'og' => [
    'enabled' => true,                             // Estructura
    'type' => 'website',                           // Estructura
    'image_width' => 1200,                         // Estructura (no cambia)
    'image_height' => 630,                         // Estructura (no cambia)
    'title' => '',                                 // Vacío, se llena desde DB
    'description' => '',                            // Vacío, se llena desde DB
],

'assets' => [
    'main_logo' => 'cd-project/assets/logo.png',   // Ruta base (estructura)
    'main_logo_alt' => '',                         // Vacío, se llena desde DB
],
```

### 🔄 En DB (Datos Específicos del Proyecto)

```php
// ❌ DATOS DEL PROYECTO - Van a DB
'name' => 'Muma',                                 // → DB
'tagline' => 'Food that fits anywhere',            // → DB
'url' => 'www.getmuma.com',                       // → DB
'author' => 'Muma',                                // → DB
'description' => 'Food that fits anywhere',        // → DB

'seo' => [
    'keywords' => 'empanadas, argentina...',       // → DB
    'description' => 'Food that fits anywhere',    // → DB
    'title' => 'Muma',                             // → DB
    'schema' => [
        'type' => 'Restaurant',                    // → DB
        'name' => 'Muma',                          // → DB
        'url' => 'www.getmuma.com',                // → DB
    ],
],

'og' => [
    'title' => 'Muma - Food that fits anywhere',   // → DB
    'description' => '...',                        // → DB
    'url' => 'www.getmuma.com',                   // → DB
    'site_name' => 'Muma',                        // → DB
    'image' => 'cd-project/assets/og-image.png',   // → DB
    'image_alt' => 'Muma - ...',                   // → DB
],

'contact' => [...],                                // → DB
'social_media' => [...],                          // → DB
'footer' => [...],                                 // → DB
'development' => [...],                            // → DB
'google_analytics' => [...],                       // → DB
```

## 🔄 Flujo de Actualización del Sistema

### Escenario: Detectar Bug y Corregirlo

```
1. Bug detectado en código base
   ↓
2. Corrección aplicada en código
   ↓
3. Git commit/push
   ↓
4. Propagación a todos los proyectos (git pull)
   ↓
5. config/site.php se actualiza (estructura)
   ↓
6. DB de cada proyecto NO se afecta (datos protegidos)
   ↓
7. SiteConfigServiceProvider merge automático
   ↓
8. Todo funciona sin perder datos del proyecto
```

### Escenario: Nueva Funcionalidad

```
1. Nueva funcionalidad agregada
   ↓
2. Nuevo campo en estructura de config/site.php
   ↓
3. Propagación a todos los proyectos
   ↓
4. Proyectos existentes: usan valor por defecto del archivo
   ↓
5. Proyectos nuevos: pueden usar el nuevo campo desde JSON
   ↓
6. Compatibilidad hacia atrás garantizada
```

## 📋 Datos que van a DB (Específicos del Proyecto)

### Identidad del Proyecto
- ✅ `name` - Nombre del proyecto
- ✅ `tagline` - Eslogan
- ✅ `url` - URL del sitio
- ✅ `author` - Autor
- ✅ `description` - Descripción corta

### SEO
- ✅ `seo.keywords` - Palabras clave
- ✅ `seo.description` - Meta descripción
- ✅ `seo.title` - Título principal
- ✅ `seo.schema.type` - Tipo de organización
- ✅ `seo.schema.name` - Nombre de la organización
- ✅ `seo.schema.url` - URL de la organización
- ✅ `seo.schema.logo` - Ruta al logo
- ✅ `seo.schema.description` - Descripción

### Open Graph
- ✅ `og.title` - Título OG
- ✅ `og.description` - Descripción OG
- ✅ `og.url` - URL canónica
- ✅ `og.site_name` - Nombre del sitio
- ✅ `og.image` - Ruta a imagen OG
- ✅ `og.image_alt` - Texto alternativo

### Twitter Cards
- ✅ `twitter.title` - Título Twitter
- ✅ `twitter.description` - Descripción Twitter
- ✅ `twitter.image` - Ruta a imagen Twitter
- ✅ `twitter.image_alt` - Texto alternativo

### Assets
- ✅ `assets.main_logo_alt` - Texto alternativo del logo

### Otros
- ✅ `contact` - Información de contacto
- ✅ `social_media` - Redes sociales
- ✅ `footer` - Navegación del footer
- ✅ `development` - Modo desarrollo/coming soon
- ✅ `google_analytics` - Tracking ID

## ✅ Estructura que se Queda (No Cambia)

### SEO
- ✅ `seo.title_template` - Plantilla (estructura)
- ✅ `seo.language` - Idioma base (genérico)
- ✅ `seo.robots` - Directivas base (genérico)
- ✅ `seo.canonical` - Estructura
- ✅ `seo.schema.enabled` - Estructura

### Open Graph
- ✅ `og.enabled` - Estructura
- ✅ `og.type` - Estructura
- ✅ `og.image_width` - Estructura (1200px)
- ✅ `og.image_height` - Estructura (630px)
- ✅ `og.image_type` - Estructura
- ✅ `og.locale` - Valor base
- ✅ `og.locale_alternate` - Valor base

### Twitter
- ✅ `twitter.enabled` - Estructura
- ✅ `twitter.card` - Estructura

### Assets
- ✅ `assets.favicon` - Ruta base (estructura)
- ✅ `assets.main_logo` - Ruta base (estructura)
- ✅ `assets.main_logo_height` - Estructura

## 🚀 Ventajas de esta Arquitectura

### ✅ Propagación Segura
- Actualizar código → No afecta datos del proyecto
- Git pull/merge → Sin conflictos
- Nuevas funcionalidades → Compatibles con proyectos existentes

### ✅ Multi-Tenant Real
- Miles de proyectos con un solo código base
- Cada proyecto con su propia DB
- Datos completamente aislados

### ✅ Mantenibilidad
- Un solo código base para mantener
- Correcciones se propagan automáticamente
- Nuevas funcionalidades disponibles para todos

### ✅ Escalabilidad
- Agregar proyecto = Crear JSONs + DB
- No modificar código PHP
- Fácil replicar proyectos

## 📝 Checklist para Nuevo Proyecto

- [ ] Crear nueva base de datos
- [ ] Crear/actualizar `site-data.json` con datos del proyecto
- [ ] Crear/actualizar `cd-system.json` con demo y módulos
- [ ] Crear/actualizar `assets.json` con logos e imágenes
- [ ] Crear/actualizar `analytics.json` con GA tracking ID
- [ ] Ejecutar `php artisan migrate:fresh --seed`
- [ ] Verificar que todo funciona

## ⚠️ Reglas Importantes

1. **NUNCA** poner datos específicos del proyecto en `config/site.php`
2. **SIEMPRE** usar DB para datos del proyecto
3. **SIEMPRE** mantener estructura en `config/site.php`
4. **SIEMPRE** documentar qué va a DB en los comentarios
5. **SIEMPRE** usar valores vacíos o genéricos en `config/site.php` para campos que van a DB

## 🎯 Resultado Final

```
┌─────────────────────────────────────────┐
│      CÓDIGO BASE (Propagable)          │
│  - config/site.php (estructura)        │
│  - Seeders                              │
│  - Service Providers                    │
│  - Controladores, modelos, vistas       │
└─────────────────────────────────────────┘
              ↓ (git pull)
┌─────────────────────────────────────────┐
│      PROYECTO (Protegido)               │
│  - DB (datos del proyecto)             │
│  - JSONs (datos del proyecto)          │
│  - Assets físicos                       │
└─────────────────────────────────────────┘
              ↓ (merge automático)
┌─────────────────────────────────────────┐
│      APLICACIÓN FUNCIONANDO             │
│  - Estructura del código                │
│  - Datos del proyecto desde DB          │
│  - Todo protegido y propagable          │
└─────────────────────────────────────────┘
```

## ✨ Estado Actual

**✅ Implementación Completa**

- Todo lo específico del proyecto → DB
- Solo estructura en `config/site.php`
- Propagación segura garantizada
- Miles de proyectos protegidos
