# Audit Despersonalización Porto + Migración CD → BewPro

> **Fecha:** 2026-04-29
> **Scope:** Fase 0 transversal previo al pulido de los 6 productos restantes (Wave Corporate + Wave Únicos)
> **Resultado:** ✅ **0 referencias Porto/Okler/personajes ficticios en código user-facing activo**

---

## Contexto

Antes de pulir individualmente cada producto, ejecutamos un barrido transversal para:

1. **Despersonalizar** todo rastro del template original (Porto by Okler, ThemeForest license #L3kTPMt7)
2. **Migrar** referencias user-facing de la marca legacy "CD" / "Compañía Digital" a la marca actual **BewPro**

Sin esto, cada nuevo producto certificado heredaría leftovers del template y un cliente técnico podría descubrir el origen, dañando la propuesta de valor de "producto exclusivo".

---

## Cambios aplicados (37 archivos editados)

### A. Personajes ficticios reemplazados → "Cliente Satisfecho" / "Nombre Apellido"

| Archivo | Antes |
|---------|-------|
| `cd-base/frontend/about.blade.php` | "Founded in 2001 by John Doe..." + 2 cards "John Doe" / "Monica Doe" |
| `cd-base/frontend/demos/demo-construction/welcome.blade.php` | `'Anne Doe Smith'` (testimonial fallback) |
| `cd-base/frontend/demos/demo-architecture-2/about.blade.php` | 2× "John Doe", 1× "Janice Doe", 1× "John Smith" |
| `cd-base/frontend/demos/demo-architecture-2/welcome.blade.php` | 4× "John Doe", "John Smith", "Janice Doe" |
| `cd-base/frontend/demos/demo-marketing-1/welcome.blade.php` | 3× John/Robert/Monica Doe + `'company' => 'Porto Theme'` |
| `cd-base/frontend/demos/demo-marketing-1/about.blade.php` | 3× John/Robert/Monica Doe |
| `cd-base/frontend/demos/demo-sass/welcome.blade.php` | "John Smith", "Jessica Smith", "Paul Smith" + `'CEO & Founder - Okler'` ×3 |
| `database/seeders/products/core/seeds/config-insurance-advisor.json` | `"testimonial_author": "John Doe, CEO"` + `"quote_author": "John Doe, CEO"` |
| `admin/site-data/about/demo-insurance.blade.php` | `placeholder="John Doe, CEO"` |

### B. Hrefs hardcoded a páginas del template

| Archivo | Antes | Después |
|---------|-------|---------|
| `cd-base/frontend/about.blade.php` L12 | `<a href="demo-construction.html">Home</a>` | `<a href="{{ route('front.homepage') }}">{{ __('Inicio') }}</a>` |

### C. Emails y direcciones del template Porto

| Archivo | Antes |
|---------|-------|
| `cd-base/frontend/demos/demo-insurance/contact.blade.php` ×3 | `'porto@insurance.com'` |
| `cd-base/frontend/demos/demo-insurance/contact.blade.php` ×2 | `'123 Porto Drive, Suite 10B, Vista, Kansas, 99999'` + Kentucky |
| `cd-base/frontend/demos/demo-architecture-2/contact.blade.php` | `"12345 Porto Blvd.\nSuite 1500"` + `'Los Angeles, California 90000'` |
| `cd-base/frontend/demos/demo-creative-agency-2/contact.blade.php` | `'12345 Porto Blvd.'` + `'Los Angeles, California 90000'` |
| `cd-base/frontend/demos/demo-sass/contact.blade.php` | `'123 Porto Drive, Suite 10B, Vista, New York, 99123'` |
| `seeds/config-insurance-advisor.json` ×3 | address + office1_address + office2_address con "Porto Blvd." / "Porto Ave." |
| `seeds/config-insurance-advisor.json` | `"email": "porto@insurance.com"` |
| `seeds/config-creative-agency.json` ×3 | email `"porto@domain.com"` + address `"12345 Porto Blvd."` + city `"Los Angeles, California 90000"` |
| `admin/site-data/contact/demo-insurance.blade.php` | placeholder address Porto Blvd |

### D. Placeholders de admin con marca Porto

| Archivo | Antes | Después |
|---------|-------|---------|
| `admin/site-data/welcome/demo-law-firm-2.blade.php` | `placeholder="PORTO LAW FIRM"` | `"ESTUDIO JURÍDICO"` |
| `admin/site-data/welcome/demo-insurance.blade.php` | `placeholder="Porto Insurance?"` | `"Aseguradora?"` |
| `cd-base/frontend/demos/demo-law-firm-2/welcome.blade.php` L58 | fallback `'PORTO LAW FIRM'` en `<h1>` | `'ESTUDIO JURÍDICO'` |
| `cd-base/frontend/demos/demo-law-firm-2/about.blade.php` L25 | `'The Porto Law Difference'` | `'Nuestra Diferencia'` |
| `cd-base/frontend/demos/demo-law-firm-2/welcome.blade.php` L352 | `'Why choose Porto Law?'` (FAQ fallback) | `'¿Por qué elegir nuestro estudio?'` |
| `cd-base/frontend/demos/demo-creative-agency-2/welcome.blade.php` ×3 | `'Okler Themes'`, `'Envato'`, `'Porto Template'` (project titles fallback) | "Proyecto destacado" / "Caso de éxito" / "Trabajo creativo" |

### E. Comments técnicos "Porto" → "BewPro" o "theme"

**Criterio**: cuando el comment refiere a un patrón de **layout/componente** del producto BewPro → se renombra a "BewPro". Cuando refiere a la **librería JavaScript** del template (theme.js, plugins) → se generaliza a "theme" (técnicamente honesto, sin nombre de marca).

| Archivo | Cambios |
|---------|--------|
| `layout/front/master.blade.php` | "Back to Top Button - Porto Plugin" → "Back to Top Button" |
| `layout/front/partials/_scripts.blade.php` ×2 | "JS original de Porto" → "JS original del template", "Porto theme.js" → "theme.js" |
| `layout/front/partials/page-header-creative-agency-2.blade.php` | "Derivado del Porto HTML" → "Derivado del template BewPro" |
| `components/page-header.blade.php` ×3 | "Porto 12.1.0" → "BewPro" + "Porto page-header-modern" → "BewPro page-header-modern" |
| `components/layout/demo-construction/header/base.blade.php` ×5 | "Como en Porto" / "Alineado con Porto Original" → "según referencia BewPro" / "Alineado con referencia BewPro" |
| `modules/products/frontend/index.blade.php` ×2 | "using Porto shop component" → "using BewPro shop component", "Initialize Porto animations" → "Initialize theme animations" |
| `modules/products/frontend/show.blade.php` | "Initialize Porto animations" → "Initialize theme animations" |
| `modules/projects/frontend/index.blade.php` ×2 | Shop Section + Initialize → BewPro / theme |
| `modules/projects/frontend/show.blade.php` | "Initialize Porto animations" → "Initialize theme animations" |
| `modules/projects/frontend/emprendimientos.blade.php` ×3 | Header + Shop Section + animations |
| `modules/projects/frontend/emprendimientos-details.blade.php` ×2 | Header + Initialize components |
| `modules/gallery/frontend/index.blade.php` ×3 | "Porto's exact IDs" / "Porto's custom.js" / "Porto's expectations" → "theme exact/custom.js/expectations" |
| `modules/tokko/frontend/properties.blade.php` ×4 | Shop Section + Products Grid + Pagination + comments |
| `modules/tokko/frontend/properties-details.blade.php` ×8 | Lightbox + Price Card + Property Header/Features/Price + Gallery + Initialize + 2 console.log |
| `modules/menu/frontend/index.blade.php` ×2 | "layout Porto" / "Patrón Porto" → "layout BewPro" / "Patrón BewPro" |
| `modules/menu/admin/modals/add-category.blade.php` | "Porto style" → "BewPro style" |
| `modules/cd-base/faqs/frontend/index.blade.php` ×2 | "card de Porto" → "card BewPro" |
| `modules/cd-base/frontend/demos/demo-insurance/welcome.blade.php` ×2 | "Default Porto FAQs / blog cards" → "FAQs/Blog cards por defecto (BewPro)" |
| `modules/cd-base/frontend/demos/demo-accounting-1/about.blade.php` | "si Porto no los detectó" → "si el theme no los detectó" |
| `modules/cd-base/frontend/demos/demo-construction-2/about.blade.php` | "layout original Porto" → "layout BewPro" |
| `modules/cd-base/frontend/demos/demo-marketing-1/welcome.blade.php` ×2 | "exact Porto layout" + "Porto default 3 service blocks" → "BewPro layout" + "3 service blocks por defecto" |

### F. Renombre de CSS class `thumbnail-porto` → `thumbnail-bewpro`

| Archivo | Tipo |
|---------|------|
| `public/modules/gallery/gallery.css` (3 selectores) | Definición CSS |
| `modules/projects/frontend/emprendimientos-details.blade.php` L215 | Uso en blade |
| `modules/tokko/frontend/properties-details.blade.php` L384 | Uso en blade |

---

## Lo que se preservó (intencionalmente)

### Identificadores técnicos legacy CD-System

Renombrarlos romperia paths absolutos en .env, autoload PSR-4, scripts cron VPS, settings table en producción y miles de archivos:

- Path del repo: `/Applications/XAMPP/xamppfiles/htdocs/cd-system/`
- Namespaces: `app/Modules/CdBase/`, `App\Modules\CdBase\*`
- Comandos artisan legacy: `cd-system:*` (los `bewpro:*` son los actuales)
- Configs: `config/cd-system.php`
- Settings DB prefix: `cd-system.*` (con datos en producción)
- Tabla de helpers `getCdSystemConfig()`, etc.

### CSS del template Porto (compra ThemeForest)

Estos archivos son **la librería comprada bajo licencia**, no se modifican:

- `public/template/css/theme.css` — header copyright "Written by: Okler Themes"
- `public/template/css/theme-elements.css` — header copyright + clases originales (`pi-porto-brand`, `porto-big-title`)
- `public/template/css/theme-shop.css` — header copyright

El cliente final no inspecciona archivos CSS del vendor. Si lo hiciera, vería headers de copyright legítimos de la librería que el negocio licenció oficialmente.

### CSS classes `html.demo-{name}` (119 selectores)

Son el **scope CSS por demo** del sistema multi-demo BewPro. La clase `html.demo-construction` no refiere al template Porto — es cómo CD-System aísla estilos por demo activo. Renombrarla rompe los 16 demos.

### HTML estáticos del template Metronic admin

- `resources/views/modules/cd-base/apps/user-management/*.html` (Robert Doe, demo dat)

Son **playground** del template admin Metronic — NO son blades activos del sitio público. El cliente nunca los ve. Se preservan como referencia de componentes UI para el dev.

### Comment técnico CSS `cd-system-base.css:31`

`/* Back to Top Button - Porto Plugin Override */` — comment **interno del dev** en el CSS base que documenta que esa regla está overrideando el plugin del theme. No es user-facing. Mantenerlo es honesto técnicamente.

### Vista legacy `cd-base/frontend/about.blade.php`

Confirmado que los 12 demos verificados tienen su `about.blade.php` propio. Esta vista es **fallback del DemoViewHelper** si un demo nuevo no tiene about. Se despersonalizó (John Doe → "Nombre Apellido", href roto → route()) pero NO se eliminó por seguridad.

---

## Validación

### Smoke test producto Construction post-Fase 0

```
✅ /         200
✅ /about    200
✅ /contact  200
✅ /services 200
✅ /projects 200
✅ /gallery  200
✅ /blog     200
✅ /faqs     200
```

### Auditorías cero-tolerancia

```bash
# Porto/Okler en código user-facing activo
grep -rn -iw "porto|okler" resources/views/ public/template/css/demos/ public/template/css/skins/ public/modules/ database/seeders/ \
  | grep -v "scribe/index|html\.demo-|\.bak"
# → 0 resultados

# Personajes ficticios
grep -rn "John Doe|Anne Doe|Monica Doe|Anne Smith|John Smith|Jessica Smith|Paul Smith|Janice Doe|Robert Doe" \
  resources/views/ database/seeders/ | grep -v "scribe/index|README|apps/user-management"
# → 0 resultados

# porto@ emails
grep -rn "porto@" resources/views/ database/seeders/
# → 0 resultados

# Hrefs hardcoded a demo-X.html
grep -rn 'href="demo-[a-z-]*\.html"' resources/views/
# → 0 resultados
```

---

## Beneficio para los productos siguientes

Los próximos 6 productos (Wave Corporate: corporative, foundations-ong, real-estate; Wave Únicos: restaurant-bar, personal-brand, art-design) heredan automáticamente:

1. **Cero personajes ficticios** en blades base
2. **Cero referencias Porto** en demos compartidos (insurance, architecture-2, marketing-1, sass, creative-agency-2, construction-2, accounting-1)
3. **Cero porto@ emails** en seeds compartidos
4. **Marca BewPro consistente** en comments user-facing
5. **CSS class `thumbnail-bewpro`** en lugar de `thumbnail-porto`

Cualquier nuevo `bewpro:new ... {core}` ya se provisiona despersonalizado por defecto.

---

## Próximos pasos

✅ **Fase 0 completada** — barrido transversal Porto + CD→BewPro

▶ **Fase 1: Wave Corporate** — pulir 3 productos en paralelo:
1. `corporative` (`demo-marketing-1`)
2. `foundations-ong` (`demo-accounting-1`)
3. `real-estate` (`demo-real-estate` + módulo Tokko — más complejo)

Cada uno aplica el patrón canónico aprendido con law-firm + construction:
- Verificar logo del producto → derivar brand_defaults (6 hex)
- Validar fonts del logo → core JSON
- Auditar parity blade↔admin (welcome/about/contact)
- Reemplazar hex hardcoded en demo CSS por var(--*)
- Re-provisionar fresh + smoke 8 URLs
- Documentar en products/{slug}.md (~340 líneas, 14 secciones)
- Marcar README ✅ Production-ready
