Revisión de Arquitectura
Planificación técnica antes de escribir código. El objetivo es tener un plan claro
de: qué archivos se crean/modifican, qué servicios se necesitan, qué hooks, qué rutas,
qué tipos y qué estados de UI se cubren.
Lectura previa obligatoria
AGENTS.md — reglas del proyecto, aliases, convenciones
README.md — stack completo, estructura de módulos
package.json — dependencias (React Query, zod, MUI, next-auth, react-hook-form)
tsconfig.json — paths y aliases
src/app/ — rutas actuales y layout
src/modules/ — estructura de módulos existentes
docs/architecture.md si existe
Si hay un módulo similar al que se va a crear, leerlo completo para replicar el patrón.
Cuándo usar esta skill
- "revisá la arquitectura de esta feature"
- "planificá el cambio"
- "cómo estructuro este módulo nuevo"
- "armame el plan de implementación"
- "validá el diseño técnico"
- "esto está bien armado?"
- Antes de empezar cualquier feature que toque >1 módulo
- Antes de crear un módulo nuevo
Cuándo NO usar esta skill
- Cambio menor (< 10 líneas, hotfix cosmético o fix trivial) → Fast-Path: aplicar el cambio directo y usar
nextjs-code-review. Prohibido redactar planes ceremoniales para tareas chicas.
- Cambio solo visual →
nextjs-design-audit
- Bug funcional →
nextjs-debug-flow
- No sabés qué código existe → usar
grep o explorar src/modules/ directamente
- Ya hay un plan y solo querés code review →
nextjs-code-review
Metodología
Fase 1 — Entender el stack y las convenciones
- Leer
AGENTS.md completo — esto define las reglas
- Leer
package.json — ¿qué versión de React/Next? ¿qué librerías ya están?
- Identificar el patrón de módulos del proyecto:
- ¿Estructura típica? (
domain/, services/, hooks/, query/, components/, pages/)
- ¿Cómo se nombran los archivos? (
kebab-case.ts, camelCase.tsx)
- ¿Cómo se exportan? (barrel
index.ts o imports directos)
- Revisar un módulo existente como referencia (ej:
src/modules/procedures/)
Fase 2 — Mapear los módulos afectados
Ejecutar comandos concretos de inspección para evitar lecturas ciegas:
# Árbol de rutas y layouts de Next.js
find src/app -name "page.tsx" -o -name "layout.tsx"
# o si tree está instalado:
tree src/app
# Módulos y dominios existentes
find src/modules -maxdepth 2 -type d
Responder:
- ¿Qué módulos nuevos se crean?
- ¿Qué módulos existentes se modifican?
- ¿Qué servicios nuevos se necesitan? (endpoints HTTP)
- ¿Qué hooks nuevos se necesitan? (useQuery, useMutation)
- ¿Qué rutas nuevas o modificadas en
src/app/?
- ¿Qué tipos de TypeScript nuevos? (interfaces, tipos de request/response)
Fase 3 — Diseñar el data flow y matriz RSC para cada feature
Matriz Server Components vs Client Components (RSC):
Construir obligatoriamente la tabla de decisión RSC para cada componente/página nueva o modificada:
| Componente / Archivo |
Tipo (RSC / "use client") |
Justificación Técnica (Interactividad / Bundle size / SSR) |
src/app/[ruta]/page.tsx |
Server Component |
Fetch inicial SSR, reduce bundle JS en cliente, optimiza SEO. |
src/modules/[mod]/components/[View]Container.tsx |
Client Component ("use client") |
Interactividad, estado (useState), hooks de React Query, forms. |
src/modules/[mod]/components/[Card]Display.tsx |
Server Component |
Presentacional puro, sin hooks ni interactividad requerida. |
- Identificar qué partes del árbol requieren interactividad (
useState, useEffect, useQuery, formularios) para marcar con "use client".
- Mantener las páginas
src/app/**/page.tsx como Server Components cuando sea posible para SSR y reducir bundle cliente.
Trazar Data Flow:
Para cada pantalla o funcionalidad, trazar:
Componente/Página (src/app/...)
→ Hook (src/modules/<dominio>/hooks/use<Feature>.ts)
→ useQuery / useMutation
→ queryFn / mutationFn
→ Servicio (src/modules/<dominio>/services/<feature>.ts)
→ HTTP request (GET/POST/PUT/DELETE)
→ Query Key (src/modules/<dominio>/query/keys.ts)
Para escritura (mutations):
Componente → dispara hook de mutación
→ useMutation con mutationFn → servicio
→ onSuccess: invalidar queries relacionadas
→ feedback: meta.successSnackbarMessage / meta.errorSnackbarMessage
Fase 4 — Validar contra patrones del proyecto
Checklist de validación del plan:
Fase 5 — Entregar el plan (.agents/plans/.md)
Protocolo de Entrega Direct-to-Disk OBLIGATORIO
El entregable completo de arquitectura NUNCA se responde ni se vuelca en el hilo de chat. Debe persistirse directamente en disco utilizando la plantilla oficial:
Plantilla oficial: Utilizar la estructura definida en templates/architecture-plan.template.md.
Destino del entregable: Escribir el plan completo en .agents/plans/<nombre>.md (crear la carpeta .agents/plans/ si no existe).
<nombre> debe ser el nombre de la feature o módulo en formato kebab-case (ej. .agents/plans/solicitudes-pago.md, .agents/plans/tramites-layout.md).
Prohibido volcar el plan en el chat: No imprimir el documento técnico completo, especificaciones extensas ni esquemas exhaustivos en la respuesta de la conversación para no saturar la ventana de contexto.
Contenido obligatorio del archivo .agents/plans/<nombre>.md:
- Objetivo y Contexto: resumen de la feature/módulo y módulos afectados (nuevos vs modificados).
- Archivos a crear y modificar: rutas completas de cada archivo nuevo y existente.
- Matriz RSC: Server Components vs Client Components con justificación técnica.
- Data Flow y Servicios: endpoints HTTP, tipos de retorno y llamadas encapsuladas.
- Hooks y React Query: keys centralizadas en
query/keys.ts, tipo de query/mutation y servicio que consume.
- Tipos de TypeScript y Schemas Zod: contratos, interfaces y validaciones.
- Rutas y Layouts: nuevas rutas en
src/app/ y consideraciones de layout/auth.
- Estados de UI: loading, empty, error, success, edge cases por pantalla.
- Oportunidades de Mejora y Gaps Detectados: análisis proactivo de inconsistencias o elementos omitidos en el requerimiento original.
- Preguntas de Negocio: dudas de alcance o trade-offs que requieren validación del usuario.
Respuesta en el hilo de chat (Reporte Sintético):
En el hilo de la conversación, el agente únicamente debe responder con un reporte sintético conciso:
- Ruta del entregable: enlace/ruta al archivo generado (
.agents/plans/<nombre>.md).
- Resumen ejecutivo: síntesis breve (1-2 párrafos) de la estrategia arquitectónica y módulos afectados.
- Preguntas de Negocio y Gaps: lista de preguntas o puntos de decisión críticos para el usuario antes de iniciar la implementación.
- Siguiente paso recomendado: sugerir la siguiente skill (ej.
nextjs-design-craft para UI o pasar a implementación siguiendo el plan tras la aprobación humana).
Reglas de lo que SÍ debe hacer
- Escribir obligatoriamente el plan completo en
.agents/plans/<nombre>.md (write_to_file)
- Reportar en el chat únicamente el resumen sintético, ruta del archivo y preguntas de negocio / gaps
- Leer
AGENTS.md, README.md y package.json antes de planificar
- Proponer rutas de archivo concretas:
src/modules/<dominio>/services/<nombre>.ts
- Validar que el plan usa las dependencias que YA están en el proyecto
- Identificar hooks existentes que se pueden reutilizar
- Listar explícitamente los tipos de TypeScript necesarios
- Para cada pantalla nueva, pensar en: loading, empty, error, success, edge cases
- Si hay formularios, especificar el schema de zod
- Usar como referencia la estructura de un módulo existente del proyecto
- Considerar si el cambio afecta autenticación, navegación o providers globales
- Si el cambio toca providers globales, la cadena en
src/app/layout.tsx es:
AuthProvider → DesignSystemProviders → SnackbarProvider →
QueryErrorResetBoundaryProvider → QueryProvider
Reglas de lo que NO debe hacer
- NO volcar el plan técnico completo ni especificaciones largas en la respuesta del chat
- NO omitir la escritura del entregable en
.agents/plans/<nombre>.md
- NO proponer lógica de negocio en
src/app/* — siempre en src/modules/*
- NO hacer fetch directo en componentes — siempre delegar a services
- NO proponer imports directos de librerías de UI fuera del design system del proyecto
- NO inventar nuevas convenciones de carpetas si el proyecto ya tiene un patrón establecido
- NO proponer librerías nuevas sin verificar que no existe algo similar en
package.json
- NO hardcodear query keys — siempre centralizar en
query/keys.ts
- NO ignorar el design system existente del proyecto
- NO planificar sin haber leído el código actual (no planear en el vacío)
- NO saltarse los edge cases en el plan
- NO entregar un plan sin estados (loading/empty/error)
- NO proponer estructura de módulo inconsistente con los módulos existentes
- NO asumir que el proyecto usa una herramienta sin verificarlo en
package.json
Verificación
El plan responde todas estas preguntas:
- ¿Se escribió el archivo en
.agents/plans/<nombre>.md?
- ¿El chat contiene solo el reporte sintético con preguntas de negocio y gaps?
- ¿Qué archivos se crean/modifican? (rutas completas)
- ¿Qué servicios se necesitan? (endpoint, método HTTP, tipo de respuesta)
- ¿Qué hooks? (useQuery/useMutation, query keys)
- ¿Qué rutas de Next.js? (src/app/...)
- ¿Qué tipos de TypeScript?
- ¿Qué estados de UI cubre cada pantalla?
- ¿Respeta las convenciones del proyecto? (aliases, carpetas, naming)
- ¿No introduce dependencias nuevas innecesarias?
Al terminar
Confirmar que el plan quedó guardado en .agents/plans/<nombre>.md. Reportar en el chat el resumen sintético y las preguntas de negocio pendientes de validación. Sugerir al usuario la siguiente skill según el contexto tras la aprobación del plan:
- Si hay UI nueva para diseñar → nextjs-design-craft
- Si hay que implementar directamente → empezar a codear siguiendo el plan
- Si hay que explorar más el código existente → usar
grep o navegar src/modules/
1---2name: nextjs-architect3description: Planificación arquitectónica frontend antes de codificar. Define data flow, matriz RSC (Server vs Client Components), servicios HTTP, hooks de React Query y schemas zod. Escribe directo a .agents/plans/<feature>.md. Usar con "revisá la arquitectura", "planificá esta feature", "cómo estructuro X", "armame el plan".4---56# Revisión de Arquitectura78Planificación técnica antes de escribir código. El objetivo es tener un plan claro9de: qué archivos se crean/modifican, qué servicios se necesitan, qué hooks, qué rutas,10qué tipos y qué estados de UI se cubren.1112## Lectura previa obligatoria1314- **`AGENTS.md`** — reglas del proyecto, aliases, convenciones15- **`README.md`** — stack completo, estructura de módulos16- **`package.json`** — dependencias (React Query, zod, MUI, next-auth, react-hook-form)17- **`tsconfig.json`** — paths y aliases18- **`src/app/`** — rutas actuales y layout19- **`src/modules/`** — estructura de módulos existentes20- **`docs/architecture.md`** si existe2122Si hay un módulo similar al que se va a crear, leerlo completo para replicar el patrón.2324## Cuándo usar esta skill2526- "revisá la arquitectura de esta feature"27- "planificá el cambio"28- "cómo estructuro este módulo nuevo"29- "armame el plan de implementación"30- "validá el diseño técnico"31- "esto está bien armado?"32- Antes de empezar cualquier feature que toque >1 módulo33- Antes de crear un módulo nuevo3435## Cuándo NO usar esta skill3637- **Cambio menor (< 10 líneas, hotfix cosmético o fix trivial)** → Fast-Path: aplicar el cambio directo y usar `nextjs-code-review`. Prohibido redactar planes ceremoniales para tareas chicas.38- **Cambio solo visual** → `nextjs-design-audit`39- **Bug funcional** → `nextjs-debug-flow`40- **No sabés qué código existe** → usar `grep` o explorar `src/modules/` directamente41- **Ya hay un plan y solo querés code review** → `nextjs-code-review`4243---4445## Metodología4647### Fase 1 — Entender el stack y las convenciones48491. Leer `AGENTS.md` completo — esto define las reglas502. Leer `package.json` — ¿qué versión de React/Next? ¿qué librerías ya están?513. Identificar el patrón de módulos del proyecto:52 - ¿Estructura típica? (`domain/`, `services/`, `hooks/`, `query/`, `components/`, `pages/`)53 - ¿Cómo se nombran los archivos? (`kebab-case.ts`, `camelCase.tsx`)54 - ¿Cómo se exportan? (barrel `index.ts` o imports directos)554. Revisar un módulo existente como referencia (ej: `src/modules/procedures/`)5657### Fase 2 — Mapear los módulos afectados5859Ejecutar comandos concretos de inspección para evitar lecturas ciegas:60```bash61# Árbol de rutas y layouts de Next.js62find src/app -name "page.tsx" -o -name "layout.tsx"63# o si tree está instalado:64tree src/app6566# Módulos y dominios existentes67find src/modules -maxdepth 2 -type d68```6970Responder:7172- ¿Qué módulos nuevos se crean?73- ¿Qué módulos existentes se modifican?74- ¿Qué servicios nuevos se necesitan? (endpoints HTTP)75- ¿Qué hooks nuevos se necesitan? (useQuery, useMutation)76- ¿Qué rutas nuevas o modificadas en `src/app/`?77- ¿Qué tipos de TypeScript nuevos? (interfaces, tipos de request/response)7879### Fase 3 — Diseñar el data flow y matriz RSC para cada feature80811. **Matriz Server Components vs Client Components (RSC)**:82 Construir obligatoriamente la tabla de decisión RSC para cada componente/página nueva o modificada:8384 | Componente / Archivo | Tipo (RSC / "use client") | Justificación Técnica (Interactividad / Bundle size / SSR) |85 |---|:---:|---|86 | `src/app/[ruta]/page.tsx` | **Server Component** | Fetch inicial SSR, reduce bundle JS en cliente, optimiza SEO. |87 | `src/modules/[mod]/components/[View]Container.tsx` | **Client Component** (`"use client"`) | Interactividad, estado (`useState`), hooks de React Query, forms. |88 | `src/modules/[mod]/components/[Card]Display.tsx` | **Server Component** | Presentacional puro, sin hooks ni interactividad requerida. |8990 - Identificar qué partes del árbol requieren interactividad (`useState`, `useEffect`, `useQuery`, formularios) para marcar con `"use client"`.91 - Mantener las páginas `src/app/**/page.tsx` como Server Components cuando sea posible para SSR y reducir bundle cliente.92932. **Trazar Data Flow**:94Para cada pantalla o funcionalidad, trazar:9596```97Componente/Página (src/app/...)98 → Hook (src/modules/<dominio>/hooks/use<Feature>.ts)99 → useQuery / useMutation100 → queryFn / mutationFn101 → Servicio (src/modules/<dominio>/services/<feature>.ts)102 → HTTP request (GET/POST/PUT/DELETE)103 → Query Key (src/modules/<dominio>/query/keys.ts)104```105106Para escritura (mutations):107108```109Componente → dispara hook de mutación110 → useMutation con mutationFn → servicio111 → onSuccess: invalidar queries relacionadas112 → feedback: meta.successSnackbarMessage / meta.errorSnackbarMessage113```114115### Fase 4 — Validar contra patrones del proyecto116117Checklist de validación del plan:118119- [ ] ¿La lógica está en `src/modules/<dominio>/`, no en `src/app/`?120- [ ] ¿Los servicios son funciones exportables que reciben params y retornan datos?121- [ ] ¿Los hooks usan `useQuery`/`useMutation` de React Query?122- [ ] ¿Las query keys están en `query/keys.ts` centralizadas?123- [ ] ¿Los forms usan `react-hook-form` + `zod`?124- [ ] ¿La UI usa `@desingSystem/*` (o el design system del proyecto)?125- [ ] ¿No se proponen imports de `@mui/*` fuera del design system?126- [ ] ¿Se reutilizan helpers comunes? (fechas, env, snackbar)127- [ ] ¿Se respetan los aliases del proyecto? (`@/`, `@desingSystem/`, `@env`)128- [ ] ¿El plan no introduce librerías nuevas innecesarias?129130### Fase 5 — Entregar el plan (.agents/plans/<nombre>.md)131132#### Protocolo de Entrega Direct-to-Disk OBLIGATORIO133134El entregable completo de arquitectura **NUNCA se responde ni se vuelca en el hilo de chat**. Debe persistirse directamente en disco utilizando la plantilla oficial:1351361. **Plantilla oficial**: Utilizar la estructura definida en [`templates/architecture-plan.template.md`](./templates/architecture-plan.template.md).1372. **Destino del entregable**: Escribir el plan completo en `.agents/plans/<nombre>.md` (crear la carpeta `.agents/plans/` si no existe).138 - `<nombre>` debe ser el nombre de la feature o módulo en formato `kebab-case` (ej. `.agents/plans/solicitudes-pago.md`, `.agents/plans/tramites-layout.md`).1393. **Prohibido volcar el plan en el chat**: No imprimir el documento técnico completo, especificaciones extensas ni esquemas exhaustivos en la respuesta de la conversación para no saturar la ventana de contexto.1404. **Contenido obligatorio del archivo `.agents/plans/<nombre>.md`**:141 - **Objetivo y Contexto**: resumen de la feature/módulo y módulos afectados (nuevos vs modificados).142 - **Archivos a crear y modificar**: rutas completas de cada archivo nuevo y existente.143 - **Matriz RSC**: Server Components vs Client Components con justificación técnica.144 - **Data Flow y Servicios**: endpoints HTTP, tipos de retorno y llamadas encapsuladas.145 - **Hooks y React Query**: keys centralizadas en `query/keys.ts`, tipo de query/mutation y servicio que consume.146 - **Tipos de TypeScript y Schemas Zod**: contratos, interfaces y validaciones.147 - **Rutas y Layouts**: nuevas rutas en `src/app/` y consideraciones de layout/auth.148 - **Estados de UI**: loading, empty, error, success, edge cases por pantalla.149 - **Oportunidades de Mejora y Gaps Detectados**: análisis proactivo de inconsistencias o elementos omitidos en el requerimiento original.150 - **Preguntas de Negocio**: dudas de alcance o trade-offs que requieren validación del usuario.1511525. **Respuesta en el hilo de chat (Reporte Sintético)**:153 En el hilo de la conversación, el agente **únicamente** debe responder con un reporte sintético conciso:154 - **Ruta del entregable**: enlace/ruta al archivo generado (`.agents/plans/<nombre>.md`).155 - **Resumen ejecutivo**: síntesis breve (1-2 párrafos) de la estrategia arquitectónica y módulos afectados.156 - **Preguntas de Negocio y Gaps**: lista de preguntas o puntos de decisión críticos para el usuario antes de iniciar la implementación.157 - **Siguiente paso recomendado**: sugerir la siguiente skill (ej. `nextjs-design-craft` para UI o pasar a implementación siguiendo el plan tras la aprobación humana).158159---160161## Reglas de lo que SÍ debe hacer162163- Escribir obligatoriamente el plan completo en `.agents/plans/<nombre>.md` (`write_to_file`)164- Reportar en el chat únicamente el resumen sintético, ruta del archivo y preguntas de negocio / gaps165- Leer `AGENTS.md`, `README.md` y `package.json` antes de planificar166- Proponer rutas de archivo concretas: `src/modules/<dominio>/services/<nombre>.ts`167- Validar que el plan usa las dependencias que YA están en el proyecto168- Identificar hooks existentes que se pueden reutilizar169- Listar explícitamente los tipos de TypeScript necesarios170- Para cada pantalla nueva, pensar en: loading, empty, error, success, edge cases171- Si hay formularios, especificar el schema de zod172- Usar como referencia la estructura de un módulo existente del proyecto173- Considerar si el cambio afecta autenticación, navegación o providers globales174- Si el cambio toca providers globales, la cadena en `src/app/layout.tsx` es:175 `AuthProvider` → `DesignSystemProviders` → `SnackbarProvider` →176 `QueryErrorResetBoundaryProvider` → `QueryProvider`177178## Reglas de lo que NO debe hacer179180- NO volcar el plan técnico completo ni especificaciones largas en la respuesta del chat181- NO omitir la escritura del entregable en `.agents/plans/<nombre>.md`182- NO proponer lógica de negocio en `src/app/*` — siempre en `src/modules/*`183- NO hacer fetch directo en componentes — siempre delegar a services184- NO proponer imports directos de librerías de UI fuera del design system del proyecto185- NO inventar nuevas convenciones de carpetas si el proyecto ya tiene un patrón establecido186- NO proponer librerías nuevas sin verificar que no existe algo similar en `package.json`187- NO hardcodear query keys — siempre centralizar en `query/keys.ts`188- NO ignorar el design system existente del proyecto189- NO planificar sin haber leído el código actual (no planear en el vacío)190- NO saltarse los edge cases en el plan191- NO entregar un plan sin estados (loading/empty/error)192- NO proponer estructura de módulo inconsistente con los módulos existentes193- NO asumir que el proyecto usa una herramienta sin verificarlo en `package.json`194195---196197## Verificación198199El plan responde todas estas preguntas:200201- ¿Se escribió el archivo en `.agents/plans/<nombre>.md`?202- ¿El chat contiene solo el reporte sintético con preguntas de negocio y gaps?203- ¿Qué archivos se crean/modifican? (rutas completas)204- ¿Qué servicios se necesitan? (endpoint, método HTTP, tipo de respuesta)205- ¿Qué hooks? (useQuery/useMutation, query keys)206- ¿Qué rutas de Next.js? (src/app/...)207- ¿Qué tipos de TypeScript?208- ¿Qué estados de UI cubre cada pantalla?209- ¿Respeta las convenciones del proyecto? (aliases, carpetas, naming)210- ¿No introduce dependencias nuevas innecesarias?211212## Al terminar213214Confirmar que el plan quedó guardado en `.agents/plans/<nombre>.md`. Reportar en el chat el resumen sintético y las preguntas de negocio pendientes de validación. Sugerir al usuario la siguiente skill según el contexto tras la aprobación del plan:215216- Si hay UI nueva para diseñar → **nextjs-design-craft**217- Si hay que implementar directamente → empezar a codear siguiendo el plan218- Si hay que explorar más el código existente → usar `grep` o navegar `src/modules/`