# content-seeder

**Familia**: B · Construcción
**Spec**: [`/.claude/agents/content-seeder.md`](../../.claude/agents/content-seeder.md)

## Cuándo invocarlo

- Un core preset necesita seed content inicial (20 de 21 cores lo necesitan — gap documentado en `plan-de-accion.md`)
- Un tenant recién provisionado arranca con módulos vacíos
- Hay que enriquecer un demo para no mostrar placeholders en screenshots
- Se creó un core nuevo con `core-architect` y hay que generar seeds

## Cuándo NO invocarlo

- Para copy comercial de la ficha de producto (shop products) → `product-copywriter`
- Para el scaffold del módulo en sí (código) → `module-scaffolder`
- Para contenido real del cliente (textos específicos del negocio) → recopilación con `sales-advisor`

## Inputs típicos

```
"Seed content completo para core `agency`"

"FAQs para `law-firm-digital` — 3 categorías, 15 FAQs"

"Blog inicial para `nutritionist` — 5 posts cortos, tono educativo"

"Seed de `real-estate` pero sólo services + faqs"
```

## Output esperado

### Fase 1 · Plan (antes de generar)
- Archivos a producir (tipo y cantidad)
- Tono/registro según industria
- Rutas destino (`core/seeds/` o `project-data/`)

### Fase 2 · Generación (tras confirmación)
- JSONs con estructura canónica
- Validación de slugs únicos y JSON parseable
- Comando artisan para aplicar (`bewpro:new` o `{modulo}:refresh`)

## Archivos que lee

- `database/seeders/project-data/defaults/*.json` (estructura canónica)
- `database/seeders/products/core/seeds/*.json` (patrones existentes)
- `database/seeders/products/core/*.json`
- `database/seeders/products/alias-matrix.json`
- `docs/bewpro2.0/provision/plan-de-accion.md`
- `docs/compania3.0/posicionamiento.md`
- `docs/compania2.0/precios-y-speech-de-ventas.md`

## Archivos que escribe (con confirmación del plan)

- `database/seeders/products/core/seeds/{modulo}-{core}.json` (seed reusable por todos los tenants de ese core)
- `database/seeders/project-data/{modulo}.json` (seed específico de proyecto)

## Estructura canónica — referencias rápidas

| Módulo | Campos mínimos |
|--------|----------------|
| faqs | category_slug, question, answer, order, is_active |
| services | category_slug, name, slug, excerpt, description, features, is_active |
| blog | category_slug, title, slug, excerpt, content, is_published, published_at |
| team | category_slug, first_name, last_name, position, bio, is_active |
| projects | category_slug, name, slug, description, client, start_date, end_date, images |
| gallery | category_slug, title, description, image |
| references | name, role, company, content, image (avatar), rating |

Todos con `categories: [{name, slug, description}]` al inicio.

## Convenciones de tono por industria

| Industria | Registro |
|-----------|----------|
| law-corporate | Formal, términos jurídicos, sin promesas absolutas |
| health-medical | Profesional, claro, sin diagnósticos |
| real-estate | Acción, transparente en procesos |
| retail-gastro | Cálido, sensorial |
| art-design | Creativo, proceso visible |
| personal | Conversacional, primera persona |
| finance | Autoridad con claridad |
| institutional | Misión / impacto |
| tech-saas | Beneficio concreto |

## Checklist de output

- [ ] Plan confirmado antes de generar
- [ ] JSON parseable
- [ ] Slugs únicos dentro del archivo, kebab-case sin acentos
- [ ] Nombres de team ficticios (no personas reales sin permiso)
- [ ] Contenido médico/legal/financiero con disclaimers donde corresponda
- [ ] Tono alineado con industria
- [ ] Español rioplatense (salvo indicación contraria)
- [ ] Ruta destino correcta (`core/seeds/` vs `project-data/`)

## Relacionado

- Se invoca desde `core-architect` al crear un core nuevo
- Se puede invocar standalone para llenar gaps en cores existentes
- El output suele consumirse por `bewpro:new` (como preset) o comandos `{modulo}:refresh` en un tenant
