# Checklist rápido — Provisionar nuevo proyecto (desde `project-data`)

## Objetivo
Tener una referencia rápida para completar lo necesario en `database/seeders/project-data/` y dejar un tenant/proyecto listo en la BD, siguiendo el flujo de provisionado del sistema.

## 0) Comando de alta (entry point)
- Alta “completa” desde un JSON: `php artisan bewpro:provision database/seeders/project-data/provision-xxxx.json`
- Alternativa recomendada si querés contenido semilla “listo” desde presets: `php artisan bewpro:new ...` (copia seeds de preset a `project-data/` antes de provisionar).

Opciones comunes:
- `--dry-run`: muestra el plan sin ejecutar.
- `--skip-assets`: omite Assets (igual puede romper resolución de logos/og/twitter).
- `--skip-content`: omite seeders de contenido de módulos.
- `--skip-migrate` / `--fresh`: control de migraciones (depende de si la DB ya existe / está vacía).

---

## 1) Base de datos
En el JSON “provision” que uses (entrada del alta), verificá:
- `db_name` (se usa para crear/conectar a la BD del tenant)

En el entorno donde corrés el comando, asegurá:
- La DB existe (o el command puede crearla).
- Luego del provisionado, apuntar el `.env` a la DB del proyecto (cuando corresponde para operar/validar con el admin / front).

---

## 2) Información del proyecto (identidad del site)
Los datos “públicos” y de identidad del proyecto se completan en `database/seeders/project-data/site-data.json` (fuente de verdad).

Checklist de campos:
- `name`
- `tagline`
- `url`
- `author`
- `description`
- `contact`:
  - `phone`
  - `email`
  - `address`
  - `hours`
- `social_media`:
  - cada red con `url` y `active: true/false`
- `header`:
  - `cta_button` (si aplica): `active`, `title`, `url`, `target`, `style`
- `footer`:
  - `description`
  - navegaciones `navegacion_principal` / `navegacion_secundaria` (si aplica)
  - `links` (según páginas del producto)
- SEO:
  - `seo.keywords`
  - `seo.description`
  - `seo.title_template`
  - `seo.schema`:
    - `type`
    - `name`
    - `url`
    - `logo` (referencia a asset)
- OG (Open Graph):
  - `og.title`
  - `og.description`
  - `og.url`
  - `og.site_name`
  - `og.image` (+ `og.image_alt`)
- Twitter Cards:
  - `twitter.title`
  - `twitter.description`
  - `twitter.image` (+ `twitter.image_alt`)
- `auth`:
  - `login_title`
  - `login_subtitle`
- `modules` (contenido/títulos de secciones por módulo, si usás esa parte):
  - `about.page_header`, `contact.page_header`, etc.

Notas rápidas:
- `SiteDataSeeder` guarda estos valores en la tabla de configuración del tenant (`settings`).
- Las rutas de assets dentro de `site-data.json` se resuelven contra `assets` (Cloudinary) si ya corriste `AssetsSeeder`.

---

## 3) Branding / Assets (logos, favicon, og/twitter)
Esto se controla en dos lugares:
1) Archivos físicos en: `public/cd-project/assets/`
2) Lista en: `database/seeders/project-data/assets.json`

Checklist de consistencia:
- En `assets.json`, cada asset tiene:
  - `name`
  - `path` (ej. `cd-project/assets/logo.png`)
  - `type` (logo/favicons/manifest/og/twitter-image/etc.)
  - opcional: `public_id` / `secure_url` (si ya existe en Cloudinary)
- En `site-data.json`, las claves típicas apuntan a rutas (paths) existentes en `assets.json`:
  - `assets.main_logo`, `assets.main_logo_sticky`, `assets.footer_logo`, `assets.favicon`, `assets.apple_touch_icon`, `seo.schema.logo`, `og.image`, `twitter.image`, etc.

Checklist mínimo de ejecución:
- Si cambiás assets o `site-data.json`:
  - ejecutar `AssetsSeeder` antes de `SiteDataSeeder` (para que `secure_url` exista y la resolución funcione).

---

## 4) Módulos activos (define qué contenido se siembra)
La activación se define en `database/seeders/project-data/cd-system.json`:
- `theme.demo` (demo que usa el sitio)
- `modules.{module_name}.active` (true/false)
- `modules.{module_name}.navigation.header/footer` (si controla header/footer)

Efecto directo:
- Los seeders de contenido se ejecutan solo para módulos con `active: true`.

---

## 5) Contenido por módulos (JSONs por “feature”)
Completá SOLO los JSON de los módulos que quedaron activos en `cd-system.json`.

Archivos típicos en `database/seeders/project-data/`:
- `projects.json` (si `projects` activo)
- `services.json` (si `services` activo)
- `gallery.json` (si `gallery` activo)
- `products.json` (si `products` activo)
- `faqs.json` (si `faqs` activo)
- `blog.json` (si `blog` activo)
- `news.json` (si `news` activo)
- `team.json` (si `team` activo)
- `references.json` (si `references` activo)
- `menu.json` (si `menu` activo)

Checklist rápido de consistencia por módulos:
- Slugs coherentes entre categorías e ítems.
- Imágenes:
  - rutas locales existentes (para que se suban)
  - o `*_public_id` / `*_secure_url` si ya tenés Cloudinary.
- Si hay traducciones, confirmar si aplica el módulo de traducciones (usa archivos del idioma en `project-data/{lang}/`).

---

## 6) Nota importante sobre “defaults limpios”
El flujo de provisionado puede reemplazar temporalmente JSONs de contenido por defaults limpios durante el step de instalación de contenido.
- Si tu objetivo es que el tenant salga con contenido seedado, usá el flujo que copia seeds/presets al `project-data/` antes de sembrar (por ejemplo `bewpro:new`), o asegurate de que los JSON que uses queden correctos durante el step de seed.

---

## 7) Validación rápida (cuando termina)
En el tenant (DB del `db_name`) verificá:
- `settings` tiene la identidad:
  - `name`, SEO, contacto, redes, OG/twitter
- `assets` tiene registros (y si aplica, con `secure_url`).
- Header/footer muestran los módulos activos definidos en `cd-system.json`.
- Los listados de módulos activos tienen datos (posts/faqs/products/etc.).

---

## Criterios de cierre (rápidos)
- [ ] `site-data.json` completo (name/contact/social/seo/og/twitter).
- [ ] `assets.json` alineado con archivos en `public/cd-project/assets/`.
- [ ] `cd-system.json` define correctamente `theme.demo` y `modules.*.active`.
- [ ] JSONs de módulos activos existen y están coherentes (slugs + imágenes).
- [ ] Provisionado se ejecutó sin errores y en el front se ve lo esperado.
-Server
- [ ] Correr script alta de proyecto, para clonar el repositorio
- [ ] Cambiar la base de datos del proyecto para aplicar cambios
- [ ] Resetear cache de laravel por las dudas
- [ ] Alta proyecto completa sin errores.

