roadmap-kit 1.0.1 → 1.0.2
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.
- package/cli.js +611 -26
- package/dashboard/index.html +7 -5
- package/dashboard/server.js +35 -10
- package/dashboard/src/App.jsx +571 -175
- package/dashboard/src/index.css +555 -304
- package/dashboard/src/main.jsx +2 -2
- package/dashboard/src/themes.js +50 -0
- package/dashboard/tailwind.config.js +7 -1
- package/dashboard/vite.config.js +3 -0
- package/package.json +1 -1
- package/dashboard/dist/assets/index-BzYzLB7u.css +0 -1
- package/dashboard/dist/assets/index-DIonhzlK.js +0 -506
- package/dashboard/dist/index.html +0 -18
- package/dashboard/dist/roadmap.json +0 -268
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="es" class="dark">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🗺️</text></svg>" />
|
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
-
<title>ROADMAP // Terminal</title>
|
|
8
|
-
<!-- Fonts: Orbitron for display, IBM Plex Mono for everything else -->
|
|
9
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
|
-
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&family=Orbitron:wght@400;500;600;700;800;900&family=Space+Grotesk:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
|
12
|
-
<script type="module" crossorigin src="/assets/index-DIonhzlK.js"></script>
|
|
13
|
-
<link rel="stylesheet" crossorigin href="/assets/index-BzYzLB7u.css">
|
|
14
|
-
</head>
|
|
15
|
-
<body class="bg-black text-slate-100 antialiased">
|
|
16
|
-
<div id="root"></div>
|
|
17
|
-
</body>
|
|
18
|
-
</html>
|
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"project_info": {
|
|
3
|
-
"name": "User Management System",
|
|
4
|
-
"version": "1.0.0",
|
|
5
|
-
"description": "Sistema completo de gestión de usuarios con autenticación JWT, roles y permisos.",
|
|
6
|
-
"purpose": "Permitir a administradores gestionar usuarios de la plataforma con control granular de permisos. Los usuarios normales solo pueden ver su propio perfil.",
|
|
7
|
-
"stack": ["Next.js 14", "Prisma", "PostgreSQL", "TailwindCSS", "TypeScript"],
|
|
8
|
-
"architecture": "Monorepo con App Router de Next.js. API routes en /app/api. Componentes reutilizables en /components/ui. Utilidades en /lib.",
|
|
9
|
-
"total_progress": 35,
|
|
10
|
-
"last_sync": "2026-01-31T10:00:00Z",
|
|
11
|
-
"conventions": {
|
|
12
|
-
"naming": {
|
|
13
|
-
"variables": "camelCase",
|
|
14
|
-
"components": "PascalCase",
|
|
15
|
-
"files": "kebab-case para utilidades, PascalCase.tsx para componentes",
|
|
16
|
-
"constants": "UPPER_SNAKE_CASE"
|
|
17
|
-
},
|
|
18
|
-
"file_structure": "Cada feature tiene su carpeta en /app con route.ts y page.tsx",
|
|
19
|
-
"database": "Usar Prisma con migraciones. NO crear tablas manualmente.",
|
|
20
|
-
"styling": "TailwindCSS únicamente. NO crear archivos CSS personalizados.",
|
|
21
|
-
"error_handling": "Usar lib/api-response.ts para respuestas consistentes"
|
|
22
|
-
},
|
|
23
|
-
"shared_resources": {
|
|
24
|
-
"ui_components": [
|
|
25
|
-
{
|
|
26
|
-
"path": "components/ui/Button.tsx",
|
|
27
|
-
"description": "Botón reutilizable con variantes (primary, secondary, danger)",
|
|
28
|
-
"usage": "import { Button } from '@/components/ui/Button'"
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
"path": "components/ui/Input.tsx",
|
|
32
|
-
"description": "Input con validación integrada",
|
|
33
|
-
"usage": "import { Input } from '@/components/ui/Input'"
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
"path": "components/ui/Modal.tsx",
|
|
37
|
-
"description": "Modal con overlay y animaciones",
|
|
38
|
-
"usage": "import { Modal } from '@/components/ui/Modal'"
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"path": "components/ui/Table.tsx",
|
|
42
|
-
"description": "Tabla con paginación, ordenamiento y filtros",
|
|
43
|
-
"usage": "import { Table } from '@/components/ui/Table'"
|
|
44
|
-
}
|
|
45
|
-
],
|
|
46
|
-
"utilities": [
|
|
47
|
-
{
|
|
48
|
-
"path": "lib/auth.ts",
|
|
49
|
-
"description": "Funciones de autenticación",
|
|
50
|
-
"exports": ["generateToken", "verifyPassword", "hashPassword", "verifyToken"],
|
|
51
|
-
"usage": "import { generateToken } from '@/lib/auth'",
|
|
52
|
-
"warning": null
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"path": "lib/db.ts",
|
|
56
|
-
"description": "Cliente Prisma singleton",
|
|
57
|
-
"exports": ["prisma"],
|
|
58
|
-
"usage": "import { prisma } from '@/lib/db'",
|
|
59
|
-
"warning": "NO crear nuevas instancias de PrismaClient"
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
"path": "lib/i18n.ts",
|
|
63
|
-
"description": "Gestión de idiomas",
|
|
64
|
-
"exports": ["useTranslation", "t"],
|
|
65
|
-
"usage": "const { t } = useTranslation()",
|
|
66
|
-
"warning": null
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
"path": "lib/api-response.ts",
|
|
70
|
-
"description": "Respuestas estandarizadas de API",
|
|
71
|
-
"exports": ["apiSuccess", "apiError"],
|
|
72
|
-
"usage": "return apiError('Invalid credentials', 401)",
|
|
73
|
-
"warning": null
|
|
74
|
-
}
|
|
75
|
-
],
|
|
76
|
-
"database_tables": [
|
|
77
|
-
{
|
|
78
|
-
"name": "User",
|
|
79
|
-
"fields": ["id", "email", "password", "role", "createdAt", "updatedAt"],
|
|
80
|
-
"description": "Tabla principal de usuarios. NO crear duplicados."
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
"name": "Session",
|
|
84
|
-
"fields": ["id", "userId", "token", "expiresAt"],
|
|
85
|
-
"description": "Sesiones activas con tokens JWT"
|
|
86
|
-
}
|
|
87
|
-
]
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
"features": [
|
|
91
|
-
{
|
|
92
|
-
"id": "auth",
|
|
93
|
-
"name": "Autenticación",
|
|
94
|
-
"description": "Sistema de login/logout con JWT y refresh tokens. Incluye validación de credenciales, generación de tokens y manejo de sesiones.",
|
|
95
|
-
"status": "in_progress",
|
|
96
|
-
"progress": 50,
|
|
97
|
-
"priority": "high",
|
|
98
|
-
"tasks": [
|
|
99
|
-
{
|
|
100
|
-
"id": "auth-db-schema",
|
|
101
|
-
"name": "Diseño de tabla de usuarios",
|
|
102
|
-
"description": "Crear schema Prisma con User y Session. IMPORTANTE: Usar tabla User existente, NO crear nueva. Añadir índices en email para búsquedas rápidas.",
|
|
103
|
-
"status": "completed",
|
|
104
|
-
"priority": "high",
|
|
105
|
-
"ai_notes": "Se usó Prisma con campos email (unique) y password (hashed con bcrypt). Se añadió índice en email para búsquedas rápidas. Se decidió usar bcrypt con 10 rounds por balance entre seguridad y performance.",
|
|
106
|
-
"affected_files": [
|
|
107
|
-
"prisma/schema.prisma",
|
|
108
|
-
"prisma/migrations/20260130_create_users.sql"
|
|
109
|
-
],
|
|
110
|
-
"reused_resources": [],
|
|
111
|
-
"git": {
|
|
112
|
-
"branch": "feature/auth-db",
|
|
113
|
-
"pr_number": 1,
|
|
114
|
-
"pr_url": "https://github.com/user/repo/pull/1",
|
|
115
|
-
"last_commit": "7a2b3c4d5e6f7g8h9i0j",
|
|
116
|
-
"commits": ["7a2b3c4d5e6f7g8h9i0j"]
|
|
117
|
-
},
|
|
118
|
-
"metrics": {
|
|
119
|
-
"lines_added": 45,
|
|
120
|
-
"lines_removed": 0,
|
|
121
|
-
"files_created": 2,
|
|
122
|
-
"files_modified": 0,
|
|
123
|
-
"complexity_score": 2
|
|
124
|
-
},
|
|
125
|
-
"technical_debt": [],
|
|
126
|
-
"started_at": "2026-01-29T14:00:00Z",
|
|
127
|
-
"completed_at": "2026-01-30T10:30:00Z"
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
"id": "auth-login-api",
|
|
131
|
-
"name": "API de Login con JWT",
|
|
132
|
-
"description": "Endpoint POST /api/auth/login. Validar con Zod. IMPORTANTE: Usar lib/auth.ts para generar tokens. NO duplicar lógica de JWT. Retornar token y refresh token.",
|
|
133
|
-
"status": "in_progress",
|
|
134
|
-
"priority": "high",
|
|
135
|
-
"ai_notes": "Implementando validación con Zod para email y password. Reutilizando generateToken() y verifyPassword() de lib/auth.ts. Manejo de errores con try-catch y respuestas JSON estándar usando apiError() de lib/api-response.ts. Se decidió usar cookies httpOnly para el refresh token por seguridad.",
|
|
136
|
-
"affected_files": [
|
|
137
|
-
"src/app/api/auth/login/route.ts",
|
|
138
|
-
"lib/auth.ts"
|
|
139
|
-
],
|
|
140
|
-
"reused_resources": [
|
|
141
|
-
"lib/auth.ts (generateToken, verifyPassword)",
|
|
142
|
-
"lib/db.ts (prisma client)",
|
|
143
|
-
"lib/api-response.ts (apiError, apiSuccess)"
|
|
144
|
-
],
|
|
145
|
-
"git": {
|
|
146
|
-
"branch": "feature/auth-api",
|
|
147
|
-
"pr_number": 2,
|
|
148
|
-
"pr_url": "https://github.com/user/repo/pull/2",
|
|
149
|
-
"last_commit": "9f8e7d6c5b4a3g2h1i0j",
|
|
150
|
-
"commits": ["9f8e7d6c5b4a3g2h1i0j", "8e7d6c5b4a3g2h1i0j9f"]
|
|
151
|
-
},
|
|
152
|
-
"metrics": {
|
|
153
|
-
"lines_added": 120,
|
|
154
|
-
"lines_removed": 5,
|
|
155
|
-
"files_created": 1,
|
|
156
|
-
"files_modified": 1,
|
|
157
|
-
"complexity_score": 5
|
|
158
|
-
},
|
|
159
|
-
"technical_debt": [
|
|
160
|
-
{
|
|
161
|
-
"description": "Falta implementar rate limiting para evitar brute force attacks",
|
|
162
|
-
"severity": "high",
|
|
163
|
-
"estimated_effort": "2 hours"
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
"description": "Los errores deberían usar un sistema centralizado de logging (Winston o Pino)",
|
|
167
|
-
"severity": "medium",
|
|
168
|
-
"estimated_effort": "4 hours"
|
|
169
|
-
}
|
|
170
|
-
],
|
|
171
|
-
"started_at": "2026-01-30T11:00:00Z",
|
|
172
|
-
"completed_at": null
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
"id": "auth-logout-api",
|
|
176
|
-
"name": "API de Logout",
|
|
177
|
-
"description": "Endpoint POST /api/auth/logout. Invalidar token en base de datos (tabla Session). Limpiar cookies.",
|
|
178
|
-
"status": "pending",
|
|
179
|
-
"priority": "medium",
|
|
180
|
-
"ai_notes": "",
|
|
181
|
-
"affected_files": [],
|
|
182
|
-
"reused_resources": [],
|
|
183
|
-
"git": {
|
|
184
|
-
"branch": null,
|
|
185
|
-
"pr_number": null,
|
|
186
|
-
"pr_url": null,
|
|
187
|
-
"last_commit": null,
|
|
188
|
-
"commits": []
|
|
189
|
-
},
|
|
190
|
-
"metrics": {
|
|
191
|
-
"lines_added": 0,
|
|
192
|
-
"lines_removed": 0,
|
|
193
|
-
"files_created": 0,
|
|
194
|
-
"files_modified": 0,
|
|
195
|
-
"complexity_score": 0
|
|
196
|
-
},
|
|
197
|
-
"technical_debt": [],
|
|
198
|
-
"started_at": null,
|
|
199
|
-
"completed_at": null
|
|
200
|
-
}
|
|
201
|
-
]
|
|
202
|
-
},
|
|
203
|
-
{
|
|
204
|
-
"id": "user-management",
|
|
205
|
-
"name": "Gestión de Usuarios",
|
|
206
|
-
"description": "CRUD completo de usuarios con listado, creación, edición y eliminación. Incluye validación de permisos.",
|
|
207
|
-
"status": "pending",
|
|
208
|
-
"progress": 0,
|
|
209
|
-
"priority": "high",
|
|
210
|
-
"tasks": [
|
|
211
|
-
{
|
|
212
|
-
"id": "user-list",
|
|
213
|
-
"name": "Listado de usuarios",
|
|
214
|
-
"description": "Página con tabla de usuarios. IMPORTANTE: Usar components/ui/Table.tsx existente. Incluir paginación, búsqueda y filtros por rol.",
|
|
215
|
-
"status": "pending",
|
|
216
|
-
"priority": "high",
|
|
217
|
-
"ai_notes": "",
|
|
218
|
-
"affected_files": [],
|
|
219
|
-
"reused_resources": [],
|
|
220
|
-
"git": {
|
|
221
|
-
"branch": null,
|
|
222
|
-
"pr_number": null,
|
|
223
|
-
"pr_url": null,
|
|
224
|
-
"last_commit": null,
|
|
225
|
-
"commits": []
|
|
226
|
-
},
|
|
227
|
-
"metrics": {
|
|
228
|
-
"lines_added": 0,
|
|
229
|
-
"lines_removed": 0,
|
|
230
|
-
"files_created": 0,
|
|
231
|
-
"files_modified": 0,
|
|
232
|
-
"complexity_score": 0
|
|
233
|
-
},
|
|
234
|
-
"technical_debt": [],
|
|
235
|
-
"started_at": null,
|
|
236
|
-
"completed_at": null
|
|
237
|
-
},
|
|
238
|
-
{
|
|
239
|
-
"id": "user-create",
|
|
240
|
-
"name": "Crear usuario",
|
|
241
|
-
"description": "Formulario para crear nuevos usuarios. IMPORTANTE: Usar components/ui/Input.tsx y Button.tsx. Validar email único.",
|
|
242
|
-
"status": "pending",
|
|
243
|
-
"priority": "high",
|
|
244
|
-
"ai_notes": "",
|
|
245
|
-
"affected_files": [],
|
|
246
|
-
"reused_resources": [],
|
|
247
|
-
"git": {
|
|
248
|
-
"branch": null,
|
|
249
|
-
"pr_number": null,
|
|
250
|
-
"pr_url": null,
|
|
251
|
-
"last_commit": null,
|
|
252
|
-
"commits": []
|
|
253
|
-
},
|
|
254
|
-
"metrics": {
|
|
255
|
-
"lines_added": 0,
|
|
256
|
-
"lines_removed": 0,
|
|
257
|
-
"files_created": 0,
|
|
258
|
-
"files_modified": 0,
|
|
259
|
-
"complexity_score": 0
|
|
260
|
-
},
|
|
261
|
-
"technical_debt": [],
|
|
262
|
-
"started_at": null,
|
|
263
|
-
"completed_at": null
|
|
264
|
-
}
|
|
265
|
-
]
|
|
266
|
-
}
|
|
267
|
-
]
|
|
268
|
-
}
|