elsabro 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +268 -0
  2. package/agents/elsabro-analyst.md +176 -0
  3. package/agents/elsabro-debugger.md +293 -0
  4. package/agents/elsabro-executor.md +477 -0
  5. package/agents/elsabro-orchestrator.md +426 -0
  6. package/agents/elsabro-planner.md +278 -0
  7. package/agents/elsabro-qa.md +273 -0
  8. package/agents/elsabro-quick-dev.md +309 -0
  9. package/agents/elsabro-scrum-master.md +217 -0
  10. package/agents/elsabro-tech-writer.md +347 -0
  11. package/agents/elsabro-ux-designer.md +278 -0
  12. package/agents/elsabro-verifier.md +295 -0
  13. package/agents/elsabro-yolo-dev.md +322 -0
  14. package/bin/install.js +497 -0
  15. package/commands/elsabro/add-phase.md +114 -0
  16. package/commands/elsabro/add-todo.md +158 -0
  17. package/commands/elsabro/audit-milestone.md +147 -0
  18. package/commands/elsabro/check-todos.md +192 -0
  19. package/commands/elsabro/complete-milestone.md +138 -0
  20. package/commands/elsabro/debug.md +153 -0
  21. package/commands/elsabro/discuss-phase.md +160 -0
  22. package/commands/elsabro/execute.md +299 -0
  23. package/commands/elsabro/help.md +102 -0
  24. package/commands/elsabro/insert-phase.md +117 -0
  25. package/commands/elsabro/list-phase-assumptions.md +129 -0
  26. package/commands/elsabro/map-codebase.md +108 -0
  27. package/commands/elsabro/new-milestone.md +128 -0
  28. package/commands/elsabro/new.md +230 -0
  29. package/commands/elsabro/pause-work.md +261 -0
  30. package/commands/elsabro/plan-milestone-gaps.md +129 -0
  31. package/commands/elsabro/plan.md +272 -0
  32. package/commands/elsabro/progress.md +187 -0
  33. package/commands/elsabro/quick.md +99 -0
  34. package/commands/elsabro/remove-phase.md +136 -0
  35. package/commands/elsabro/research-phase.md +174 -0
  36. package/commands/elsabro/resume-work.md +288 -0
  37. package/commands/elsabro/set-profile.md +216 -0
  38. package/commands/elsabro/settings.md +185 -0
  39. package/commands/elsabro/start.md +204 -0
  40. package/commands/elsabro/update.md +71 -0
  41. package/commands/elsabro/verify-work.md +269 -0
  42. package/commands/elsabro/verify.md +207 -0
  43. package/hooks/dist/.gitkeep +2 -0
  44. package/package.json +45 -0
  45. package/references/error-handling-instructions.md +312 -0
  46. package/references/source-hierarchy.md +150 -0
  47. package/references/token-optimization.md +225 -0
  48. package/skills/api-setup.md +315 -0
  49. package/skills/auth-setup.md +180 -0
  50. package/skills/database-setup.md +238 -0
  51. package/skills/expo-app.md +261 -0
  52. package/skills/nextjs-app.md +206 -0
  53. package/skills/payments-setup.md +421 -0
  54. package/skills/sentry-setup.md +295 -0
  55. package/templates/error-handling-config.json +138 -0
  56. package/templates/session-state.json +69 -0
  57. package/templates/starters/.gitkeep +2 -0
  58. package/workflows/.gitkeep +2 -0
@@ -0,0 +1,150 @@
1
+ ---
2
+ name: source-hierarchy
3
+ description: Referencia que define la prioridad de fuentes de información (Context7 > Docs > WebSearch > Training)
4
+ ---
5
+
6
+ # Jerarquía de Fuentes
7
+
8
+ Esta referencia define el orden de prioridad para buscar información antes de planificar o implementar.
9
+
10
+ ## Regla de Oro
11
+
12
+ **NUNCA confiar solo en el conocimiento de entrenamiento de Claude para APIs específicas, versiones, o sintaxis.**
13
+
14
+ El conocimiento de Claude puede tener 6-18 meses de antigüedad. Las librerías cambian constantemente.
15
+
16
+ ## Jerarquía de Confianza
17
+
18
+ | Prioridad | Fuente | Confianza | Cuándo Usar |
19
+ |-----------|--------|-----------|-------------|
20
+ | 1 | **Context7** | HIGH | Cualquier librería/framework conocido |
21
+ | 2 | **Documentación oficial** (WebFetch) | MEDIUM-HIGH | Si Context7 no tiene cobertura |
22
+ | 3 | **WebSearch** | MEDIUM | Tendencias, comparaciones, problemas comunes |
23
+ | 4 | **Training Data** | LOW | Solo como último recurso, marcar como "no verificado" |
24
+
25
+ ## Uso de Context7
26
+
27
+ ### Cuándo SIEMPRE usar
28
+
29
+ - Sintaxis de API de cualquier librería
30
+ - Configuración de frameworks
31
+ - Patrones recomendados
32
+ - Versiones actuales
33
+ - Breaking changes recientes
34
+
35
+ ### Cómo usar
36
+
37
+ ```
38
+ 1. Resolver librería:
39
+ mcp__plugin_context7_context7__resolve-library-id
40
+ Input: nombre de librería (ej: "next.js", "prisma", "tailwindcss")
41
+ Output: ID exacto con versión
42
+
43
+ 2. Buscar documentación:
44
+ mcp__plugin_context7_context7__query-docs
45
+ Input: ID de librería + consulta específica
46
+ Output: Chunks de documentación + ejemplos
47
+ ```
48
+
49
+ ### Ejemplo
50
+
51
+ ```
52
+ // Mal: Asumir sintaxis
53
+ const router = useRouter(); // ¿Es correcto para Next.js 15?
54
+
55
+ // Bien: Verificar primero
56
+ 1. resolve-library-id("next.js") → /vercel/next.js/v15.0.3
57
+ 2. query-docs(id, "useRouter app router") → [documentación actual]
58
+ 3. Usar sintaxis verificada
59
+ ```
60
+
61
+ ## Uso de WebSearch
62
+
63
+ ### Cuándo usar
64
+
65
+ - Comparar opciones (ej: "Prisma vs Drizzle 2026")
66
+ - Encontrar soluciones a errores específicos
67
+ - Verificar tendencias actuales
68
+ - Buscar artículos recientes
69
+
70
+ ### Cómo usar
71
+
72
+ - SIEMPRE incluir el año actual en búsquedas
73
+ - Verificar hallazgos con Context7 o docs oficiales
74
+ - Marcar como MEDIUM confidence
75
+
76
+ ### Ejemplo
77
+
78
+ ```
79
+ WebSearch: "best authentication library nextjs 2026"
80
+ → Encuentra: "NextAuth v5 es el estándar"
81
+ → Verificar: Context7 query-docs para NextAuth v5
82
+ → Usar: Información verificada
83
+ ```
84
+
85
+ ## Marcado de Confianza
86
+
87
+ En RESEARCH.md y PLAN.md, siempre indicar:
88
+
89
+ ```markdown
90
+ ## Stack Verificado
91
+
92
+ | Librería | Versión | Fuente | Confianza |
93
+ |----------|---------|--------|-----------|
94
+ | next.js | 15.0.3 | Context7 | HIGH |
95
+ | prisma | 5.20.0 | Context7 | HIGH |
96
+ | stripe | 14.0.0 | WebSearch + Context7 | HIGH |
97
+ | custom-lib | 1.0.0 | GitHub README | MEDIUM |
98
+ | otra-cosa | ? | Training data | LOW - VERIFICAR |
99
+ ```
100
+
101
+ ## Anti-Patrones
102
+
103
+ ### ❌ No hacer
104
+
105
+ ```
106
+ // Asumir sin verificar
107
+ "Usa el patrón estándar de Next.js..."
108
+
109
+ // Inventar APIs
110
+ "La función createUser() acepta..."
111
+
112
+ // Mezclar versiones
113
+ "En Next.js puedes usar getServerSideProps..."
114
+ (Esto es Pages Router, no App Router)
115
+ ```
116
+
117
+ ### ✅ Hacer
118
+
119
+ ```
120
+ // Verificar primero
121
+ "Según Context7 (Next.js v15.0.3), el patrón actual es..."
122
+
123
+ // Citar fuente
124
+ "De acuerdo a la documentación oficial de Prisma 5.20..."
125
+
126
+ // Especificar versión
127
+ "Para Next.js 15 con App Router, usa Server Components..."
128
+ ```
129
+
130
+ ## Proceso de Investigación
131
+
132
+ ```
133
+ 1. ¿Es sobre una librería/framework?
134
+ SÍ → Context7 primero
135
+ NO → Continuar
136
+
137
+ 2. ¿Context7 tiene información?
138
+ SÍ → Usar como fuente principal
139
+ NO → WebFetch a docs oficiales
140
+
141
+ 3. ¿Necesito comparar opciones?
142
+ SÍ → WebSearch con año actual
143
+ NO → Continuar
144
+
145
+ 4. ¿La información es reciente?
146
+ SÍ → Marcar confianza apropiada
147
+ NO → Buscar fuente más reciente
148
+
149
+ 5. Documentar fuente y confianza
150
+ ```
@@ -0,0 +1,225 @@
1
+ ---
2
+ name: token-optimization
3
+ description: Estrategias para usar el contexto de Claude eficientemente (regla del 50%, lazy loading, waves)
4
+ ---
5
+
6
+ # Optimización de Tokens
7
+
8
+ Esta referencia define estrategias para usar el contexto de Claude de forma eficiente, manteniendo calidad.
9
+
10
+ ## El Problema
11
+
12
+ Claude tiene una ventana de contexto limitada (~200K tokens). Cuando se llena:
13
+ - La calidad de respuestas degrada
14
+ - El modelo "olvida" instrucciones anteriores
15
+ - Aumentan las alucinaciones
16
+
17
+ ## Solución: Context Budgeting
18
+
19
+ ### Regla del 50%
20
+
21
+ **Cada plan debe poder ejecutarse usando máximo 50% del contexto.**
22
+
23
+ ¿Por qué 50%?
24
+ - Deja espacio para el código generado
25
+ - Deja espacio para errores y correcciones
26
+ - Mantiene calidad consistente
27
+
28
+ Si un plan necesita más:
29
+ - Dividirlo en múltiples planes
30
+ - Ejecutar en waves separadas
31
+
32
+ ### Presupuesto por Componente
33
+
34
+ | Componente | Budget Máximo | Notas |
35
+ |------------|---------------|-------|
36
+ | PROJECT.md | 5% | Resumen del proyecto |
37
+ | REQUIREMENTS.md | 5% | Lista de requisitos |
38
+ | RESEARCH.md | 10% | Solo hallazgos relevantes |
39
+ | PLAN.md | 15% | El plan actual |
40
+ | Código existente | 10% | Solo archivos relevantes |
41
+ | **Buffer** | 5% | Para imprevistos |
42
+ | **Total en entrada** | ~50% | Dejar 50% para output |
43
+
44
+ ## Estrategias de Optimización
45
+
46
+ ### 1. Lazy Loading
47
+
48
+ **NO hacer:**
49
+ ```
50
+ Cargar TODO el codebase al inicio
51
+ Cargar TODA la documentación
52
+ ```
53
+
54
+ **SÍ hacer:**
55
+ ```
56
+ Cargar solo archivos relevantes para ESTA tarea
57
+ Cargar solo secciones de docs necesarias
58
+ Usar @references que se resuelven on-demand
59
+ ```
60
+
61
+ ### 2. Compresión de Artifacts
62
+
63
+ **RESEARCH.md debe ser:**
64
+ ```markdown
65
+ ## Stack: Next.js 15 + Prisma 5
66
+
67
+ ### Auth
68
+ - Usar NextAuth v5
69
+ - Patrón: middleware + session
70
+
71
+ ### Pitfalls
72
+ - No usar jsonwebtoken (CommonJS issues)
73
+ ```
74
+
75
+ **NO debe ser:**
76
+ ```markdown
77
+ ## Investigación Exhaustiva de Opciones de Autenticación
78
+
79
+ Después de analizar múltiples opciones incluyendo
80
+ Passport.js, Auth0, Clerk, y NextAuth, hemos determinado
81
+ que para este proyecto específico considerando los
82
+ requisitos de escalabilidad y facilidad de implementación...
83
+ [300 líneas más]
84
+ ```
85
+
86
+ ### 3. Referencias, No Copias
87
+
88
+ **NO hacer:**
89
+ ```markdown
90
+ ## Contexto
91
+ [Copiar todo PROJECT.md aquí]
92
+ [Copiar todo REQUIREMENTS.md aquí]
93
+ ```
94
+
95
+ **SÍ hacer:**
96
+ ```markdown
97
+ ## Contexto
98
+ @.planning/PROJECT.md
99
+ @.planning/REQUIREMENTS.md
100
+
101
+ Solo estos puntos relevantes:
102
+ - Requisito R3: Autenticación
103
+ - Decisión D2: Usar NextAuth
104
+ ```
105
+
106
+ ### 4. Agentes con Contexto Fresco
107
+
108
+ **Patrón:** Spawnnear agentes especializados
109
+
110
+ Cada agente obtiene ~200K tokens frescos.
111
+ El orquestador mantiene solo el estado mínimo.
112
+
113
+ ```
114
+ Orquestador (30% contexto):
115
+ - Coordina
116
+ - Mantiene estado
117
+ - Agrega resultados
118
+
119
+ Agente 1 (100% fresco):
120
+ - Investiga tema A
121
+ - Retorna resumen
122
+
123
+ Agente 2 (100% fresco):
124
+ - Investiga tema B
125
+ - Retorna resumen
126
+ ```
127
+
128
+ ### 5. Waves para Paralelización
129
+
130
+ ```
131
+ Wave 1: [Planes independientes]
132
+ Plan 1: Contexto fresco
133
+ Plan 2: Contexto fresco
134
+
135
+ Wave 2: [Dependen de Wave 1]
136
+ Plan 3: Contexto fresco + summaries de Wave 1
137
+ ```
138
+
139
+ ## Métricas de Salud
140
+
141
+ ### Señales de Contexto Sano
142
+
143
+ - Respuestas coherentes y completas
144
+ - Sigue instrucciones correctamente
145
+ - No repite información
146
+ - No "olvida" decisiones anteriores
147
+
148
+ ### Señales de Contexto Saturado
149
+
150
+ - Respuestas vagas o incompletas
151
+ - Olvida instrucciones recientes
152
+ - Mezcla información de diferentes partes
153
+ - Aumentan alucinaciones
154
+
155
+ ### Acción si Saturado
156
+
157
+ ```
158
+ 1. STOP - No seguir agregando contexto
159
+ 2. Crear nuevo plan más pequeño
160
+ 3. Spawnnear agente fresco
161
+ 4. Resumir lo hecho y continuar en nueva sesión
162
+ ```
163
+
164
+ ## Templates Optimizados
165
+
166
+ ### PLAN.md Optimizado
167
+
168
+ ```markdown
169
+ ---
170
+ phase: 1
171
+ plan: 1
172
+ wave: 1
173
+ must_haves:
174
+ truths: ["User can login"]
175
+ artifacts: [{path: "src/app/login/page.tsx"}]
176
+ ---
177
+
178
+ # Login Page
179
+
180
+ ## Contexto
181
+ @.planning/RESEARCH.md#auth
182
+
183
+ ## Tareas
184
+
185
+ <task>
186
+ <name>Create login form</name>
187
+ <files>src/app/login/page.tsx</files>
188
+ <action>Form with email/password, NextAuth signIn()</action>
189
+ <verify>npm run build</verify>
190
+ </task>
191
+ ```
192
+
193
+ **Nota:** Solo referencias, no copias. Solo lo necesario.
194
+
195
+ ### SUMMARY.md Optimizado
196
+
197
+ ```markdown
198
+ # Summary: Login (01-01)
199
+
200
+ ## Done
201
+ - [x] Login form created
202
+ - [x] NextAuth configured
203
+
204
+ ## Files
205
+ - src/app/login/page.tsx
206
+ - src/lib/auth.ts
207
+
208
+ ## Verify
209
+ - [x] Build passes
210
+ - [ ] User test: can login
211
+ ```
212
+
213
+ **Nota:** Bullets, no prosa. Solo hechos.
214
+
215
+ ## Checklist Pre-Ejecución
216
+
217
+ Antes de ejecutar un plan, verificar:
218
+
219
+ - [ ] ¿El plan cabe en 50% del contexto?
220
+ - [ ] ¿Las referencias son específicas (no "todo el archivo")?
221
+ - [ ] ¿El research está resumido?
222
+ - [ ] ¿Hay espacio para el código a generar?
223
+ - [ ] ¿Puedo dividir en partes más pequeñas?
224
+
225
+ Si cualquiera falla → Optimizar antes de ejecutar.
@@ -0,0 +1,315 @@
1
+ ---
2
+ name: api-setup
3
+ description: Skill para crear APIs y endpoints. Usa este skill cuando el usuario quiere crear una API, backend, o endpoints.
4
+ ---
5
+
6
+ # Skill: Setup de API/Backend
7
+
8
+ <when_to_use>
9
+ Usar cuando el usuario menciona:
10
+ - "API"
11
+ - "backend"
12
+ - "endpoints"
13
+ - "servidor"
14
+ - "REST"
15
+ - "GraphQL"
16
+ - "rutas" (en contexto de backend)
17
+ </when_to_use>
18
+
19
+ <before_starting>
20
+ ## Investigación Obligatoria
21
+
22
+ **ANTES de crear la API, entender el contexto:**
23
+
24
+ ```
25
+ 1. Detectar tipo de proyecto:
26
+ - ¿Ya tiene Next.js? → API Routes
27
+ - ¿Ya tiene Expo? → Necesita backend separado
28
+ - ¿Proyecto nuevo? → Sugerir opciones
29
+
30
+ 2. Preguntar al usuario:
31
+ - ¿Qué datos va a manejar la API?
32
+ - ¿Necesita autenticación?
33
+ - ¿Va a ser pública o privada?
34
+
35
+ 3. Buscar en Context7:
36
+ mcp__plugin_context7_context7__resolve-library-id("hono")
37
+ mcp__plugin_context7_context7__query-docs(id, "getting started")
38
+ ```
39
+ </before_starting>
40
+
41
+ <options_by_context>
42
+ ## Opciones por Contexto
43
+
44
+ ### Ya tiene Next.js → API Routes
45
+
46
+ **Pros:**
47
+ - No necesita servidor adicional
48
+ - Comparte tipos con frontend
49
+ - Deploy junto con la app
50
+
51
+ **Ubicación:**
52
+ ```
53
+ src/app/api/[endpoint]/route.ts
54
+ ```
55
+
56
+ ### Proyecto nuevo → Hono (Recomendado)
57
+
58
+ **Pros:**
59
+ - Ligero y rápido
60
+ - TypeScript nativo
61
+ - Funciona en edge, Node, Deno, Bun
62
+ - Similar a Express pero moderno
63
+
64
+ **Setup:**
65
+ ```bash
66
+ npm create hono@latest my-api
67
+ ```
68
+
69
+ ### Alternativas
70
+
71
+ | Opción | Cuándo Usar |
72
+ |--------|-------------|
73
+ | Express | Equipo ya lo conoce |
74
+ | Fastify | Necesita máximo rendimiento |
75
+ | tRPC | Frontend y backend TypeScript |
76
+ | GraphQL | Queries complejas, múltiples clientes |
77
+ </options_by_context>
78
+
79
+ <nextjs_api_setup>
80
+ ## API Routes en Next.js
81
+
82
+ ### Paso 1: Crear endpoint
83
+
84
+ ```typescript
85
+ // src/app/api/users/route.ts
86
+ // VERIFICAR con Context7 para sintaxis actual
87
+
88
+ import { NextResponse } from 'next/server'
89
+
90
+ export async function GET() {
91
+ // Tu lógica aquí
92
+ return NextResponse.json({ users: [] })
93
+ }
94
+
95
+ export async function POST(request: Request) {
96
+ const body = await request.json()
97
+ // Crear usuario
98
+ return NextResponse.json({ success: true })
99
+ }
100
+ ```
101
+
102
+ ### Paso 2: Endpoint con parámetros
103
+
104
+ ```typescript
105
+ // src/app/api/users/[id]/route.ts
106
+
107
+ import { NextResponse } from 'next/server'
108
+
109
+ export async function GET(
110
+ request: Request,
111
+ { params }: { params: { id: string } }
112
+ ) {
113
+ const id = params.id
114
+ // Buscar usuario por id
115
+ return NextResponse.json({ user: { id } })
116
+ }
117
+ ```
118
+
119
+ ### Paso 3: Validación con Zod
120
+
121
+ ```typescript
122
+ // src/app/api/users/route.ts
123
+ import { z } from 'zod'
124
+ import { NextResponse } from 'next/server'
125
+
126
+ const createUserSchema = z.object({
127
+ email: z.string().email(),
128
+ name: z.string().min(2),
129
+ })
130
+
131
+ export async function POST(request: Request) {
132
+ const body = await request.json()
133
+
134
+ const result = createUserSchema.safeParse(body)
135
+ if (!result.success) {
136
+ return NextResponse.json(
137
+ { error: result.error.flatten() },
138
+ { status: 400 }
139
+ )
140
+ }
141
+
142
+ // Crear usuario con result.data
143
+ return NextResponse.json({ success: true })
144
+ }
145
+ ```
146
+ </nextjs_api_setup>
147
+
148
+ <hono_setup>
149
+ ## Setup Hono (Standalone API)
150
+
151
+ ### Paso 1: Crear proyecto
152
+
153
+ ```bash
154
+ npm create hono@latest my-api
155
+ # Seleccionar: nodejs
156
+ cd my-api
157
+ npm install
158
+ ```
159
+
160
+ ### Paso 2: Estructura básica
161
+
162
+ ```typescript
163
+ // src/index.ts
164
+ // VERIFICAR con Context7
165
+
166
+ import { Hono } from 'hono'
167
+ import { cors } from 'hono/cors'
168
+
169
+ const app = new Hono()
170
+
171
+ // Middleware
172
+ app.use('/*', cors())
173
+
174
+ // Rutas
175
+ app.get('/', (c) => c.json({ message: 'API funcionando' }))
176
+
177
+ app.get('/users', (c) => {
178
+ return c.json({ users: [] })
179
+ })
180
+
181
+ app.post('/users', async (c) => {
182
+ const body = await c.req.json()
183
+ return c.json({ success: true })
184
+ })
185
+
186
+ export default app
187
+ ```
188
+
189
+ ### Paso 3: Validación con Zod
190
+
191
+ ```typescript
192
+ import { Hono } from 'hono'
193
+ import { zValidator } from '@hono/zod-validator'
194
+ import { z } from 'zod'
195
+
196
+ const app = new Hono()
197
+
198
+ const createUserSchema = z.object({
199
+ email: z.string().email(),
200
+ name: z.string().min(2),
201
+ })
202
+
203
+ app.post(
204
+ '/users',
205
+ zValidator('json', createUserSchema),
206
+ async (c) => {
207
+ const data = c.req.valid('json')
208
+ // data está tipado y validado
209
+ return c.json({ success: true })
210
+ }
211
+ )
212
+ ```
213
+
214
+ ### Paso 4: Ejecutar
215
+
216
+ ```bash
217
+ npm run dev
218
+ ```
219
+ </hono_setup>
220
+
221
+ <verification>
222
+ ## Verificación
223
+
224
+ ### Automática
225
+ ```bash
226
+ # Probar endpoint GET
227
+ curl http://localhost:3000/api/users
228
+
229
+ # Probar endpoint POST
230
+ curl -X POST http://localhost:3000/api/users \
231
+ -H "Content-Type: application/json" \
232
+ -d '{"email":"test@example.com","name":"Test"}'
233
+ ```
234
+
235
+ ### Manual (para usuario)
236
+ ```
237
+ Para ti (Usuario):
238
+
239
+ 1. Abre tu navegador
240
+ 2. Ve a: http://localhost:3000/api/users
241
+ 3. Deberías ver una respuesta JSON
242
+
243
+ ¿Ves datos JSON?
244
+ - SÍ → La API está funcionando
245
+ - NO → Verifica que el servidor esté corriendo
246
+ ```
247
+ </verification>
248
+
249
+ <common_patterns>
250
+ ## Patrones Comunes
251
+
252
+ ### Middleware de autenticación
253
+
254
+ ```typescript
255
+ // middleware/auth.ts
256
+ import { createMiddleware } from 'hono/factory'
257
+
258
+ export const authMiddleware = createMiddleware(async (c, next) => {
259
+ const token = c.req.header('Authorization')?.replace('Bearer ', '')
260
+
261
+ if (!token) {
262
+ return c.json({ error: 'No autorizado' }, 401)
263
+ }
264
+
265
+ // Verificar token
266
+ // c.set('user', decodedUser)
267
+
268
+ await next()
269
+ })
270
+ ```
271
+
272
+ ### Manejo de errores
273
+
274
+ ```typescript
275
+ app.onError((err, c) => {
276
+ console.error(err)
277
+ return c.json(
278
+ { error: 'Error interno del servidor' },
279
+ 500
280
+ )
281
+ })
282
+ ```
283
+
284
+ ### Rate limiting
285
+
286
+ ```typescript
287
+ import { rateLimiter } from 'hono-rate-limiter'
288
+
289
+ app.use(
290
+ rateLimiter({
291
+ windowMs: 15 * 60 * 1000, // 15 minutos
292
+ limit: 100, // 100 requests por ventana
293
+ message: { error: 'Demasiadas solicitudes' },
294
+ })
295
+ )
296
+ ```
297
+ </common_patterns>
298
+
299
+ <common_issues>
300
+ ## Problemas Comunes
301
+
302
+ ### "CORS error"
303
+ - Agregar middleware de CORS
304
+ - Verificar origin permitido
305
+ - En Next.js: configurar headers en next.config.js
306
+
307
+ ### "404 Not Found"
308
+ - Verificar ruta del archivo
309
+ - En Next.js: debe estar en app/api/
310
+ - Verificar nombre del archivo (route.ts)
311
+
312
+ ### "Method not allowed"
313
+ - Exportar la función con el nombre correcto (GET, POST, etc.)
314
+ - Verificar que el método existe en el archivo
315
+ </common_issues>