# module-scaffolder

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

## Cuándo invocarlo

- Necesitás crear un módulo funcional nuevo desde cero (ej. `events`, `courses`, `careers`)
- El patrón debe replicar uno de los 15 módulos existentes (no inventar)
- Querés dejar el CRUD funcional vacío y agregar lógica de negocio después

## Cuándo NO invocarlo

- Para modificar un módulo existente (agregar campo, cambiar vista) → edit directo
- Para un core preset técnico (demo + módulos) → `core-architect`
- Para contenido de un módulo (posts, servicios reales) → `content-seeder`

## Inputs típicos

```
"Creá módulo `events` con fecha, categoría, galería, traducible"

"Scaffoldá `courses` — curso, módulo-curso, instructor. Traducible. Sin tags"

"Necesito `careers` para postulaciones, con categorías por departamento"
```

## Output esperado — DOS FASES

### Fase 1 · Propuesta (sin escribir)
- Nombre, slug, campos, flags (categorías/tags/traducible/frontend)
- Patrón base elegido (Blog/Products/Services/otro)
- Lista completa de archivos a crear con rutas absolutas
- Entradas a agregar en `config/cd-system.php` y `alias-matrix.json`
- Migration schema propuesto

### Fase 2 · Implementación (tras confirmación)
- Crear todos los archivos
- Registrar en config + alias-matrix
- Crear migration + seeder JSON en `project-data/defaults/`
- Reporte final + sugerencia de `php artisan migrate`

## Archivos que lee

- `app/Modules/{Blog,Products,Services}/*` — patrones canónicos
- `routes/modules/{blog,products,services}.php`
- `config/cd-system.php`
- `database/seeders/products/alias-matrix.json`
- `database/seeders/project-data/defaults/*.json`
- `docs/backend3.0/Module-Template/README.md`

## Archivos que escribe (con confirmación por Fase)

- `app/Modules/{Name}/Models/*`
- `app/Modules/{Name}/Controllers/{Admin,Frontend}/*`
- `app/Modules/{Name}/Services/*` (opcional)
- `routes/modules/{slug}.php`
- `database/migrations/*_create_*.php`
- `database/seeders/project-data/defaults/{slug}.json`
- `resources/views/modules/{slug}/{admin,frontend}/*.blade.php`
- `config/cd-system.php` (patch)
- `database/seeders/products/alias-matrix.json` (patch)

## Checklist de validación

### Estructura
- [ ] Models con trait Translatable si aplica
- [ ] Controllers Admin con: manager, index, create, store, edit, update, destroy, getStats, toggleActive, destroyMultiple
- [ ] Controllers Frontend con: index, show, byCategory (si aplica)
- [ ] Routes con middleware `auth` (admin) y `web` + `module.enabled:{slug}` (frontend)
- [ ] Migration con `soft deletes`, `timestamps`, FKs correctos

### Registro
- [ ] `config/cd-system.php` → modules.{slug} con active, name, description, version, navigation
- [ ] `alias-matrix.json` → entrada con 9 industrias (alias + pitch)
- [ ] `project-data/defaults/{slug}.json` con estructura vacía válida

### Views
- [ ] Admin index es DataTable con modal create/edit (patrón products)
- [ ] Frontend index paginado con filtros
- [ ] Frontend show con SEO meta + structured data si aplica

## Relacionado

- No delega a otros agentes
- Después de scaffoldar, el usuario suele invocar `content-seeder` para llenar seeds
