da-proj 1.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.
package/README.md ADDED
@@ -0,0 +1,410 @@
1
+ # da-proj
2
+
3
+ > 🚀 **Automatiza tu portfolio de desarrollador** - CLI tool que simplifica la gestión de metadata de proyectos y sincronización con tu portfolio web.
4
+
5
+ ## ¿Por qué da-proj?
6
+
7
+ Como desarrollador, mantener tu portfolio actualizado puede ser tedioso. Cada vez que terminas un proyecto, necesitas:
8
+
9
+ - Crear metadata estructurada
10
+ - Configurar GitHub Actions
11
+ - Sincronizar con tu portfolio web
12
+ - Gestionar API keys en múltiples dispositivos
13
+
14
+ **da-proj hace todo esto por ti** con comandos simples e interactivos.
15
+
16
+ ---
17
+
18
+ ## ✨ Características
19
+
20
+ ### 📝 Generación Automática de Metadata
21
+
22
+ - Crea archivos `.project-metadata.mdx` con formato estructurado
23
+ - Valida con JSON Schema automáticamente
24
+ - Incluye toda la información de tu proyecto (título, tecnologías, imágenes, etc.)
25
+
26
+ ### 🔄 Sincronización con Portfolio
27
+
28
+ - GitHub Actions workflow pre-configurado
29
+ - Sincroniza automáticamente cuando haces push
30
+ - Notifica a tu API de portfolio con los cambios
31
+
32
+ ### 🔐 Gestión de API Keys
33
+
34
+ - Configura GitHub Secrets fácilmente desde la terminal
35
+ - Múltiples perfiles para diferentes portfolios
36
+ - Sincronización de configuración entre dispositivos vía GitHub
37
+
38
+ ### 📁 Organización de Imágenes
39
+
40
+ - Carpeta `proj-images/` lista para usar
41
+ - README con guías de optimización
42
+ - Estructura consistente en todos tus proyectos
43
+
44
+ ---
45
+
46
+ ## 🚀 Inicio Rápido
47
+
48
+ ### Instalación
49
+
50
+ No necesitas instalar nada. Usa directamente con `npx` o `bunx`:
51
+
52
+ ```bash
53
+ # Con npm
54
+ npx da-proj --init
55
+
56
+ # Con bun (recomendado)
57
+ bunx da-proj --init
58
+ ```
59
+
60
+ O instala globalmente:
61
+
62
+ ```bash
63
+ npm install -g da-proj
64
+ # o
65
+ bun install -g da-proj
66
+ ```
67
+
68
+ ### Uso Básico
69
+
70
+ #### 1. Inicializar un Proyecto
71
+
72
+ ```bash
73
+ cd tu-proyecto
74
+ bunx da-proj --init
75
+ ```
76
+
77
+ El CLI te guiará con preguntas interactivas:
78
+
79
+ - 📌 Título del proyecto
80
+ - 🏷️ Categoría (Web Development, AI/ML, Mobile, etc.)
81
+ - ⭐ Tipo (featured o small)
82
+ - 📊 Estado (active, in-progress, archived)
83
+ - 💻 Tecnologías utilizadas
84
+ - 🔗 URLs de demo y repositorio
85
+ - 🖼️ Rutas de imágenes
86
+
87
+ #### 2. Configurar GitHub Secrets
88
+
89
+ ```bash
90
+ bunx da-proj --secrets
91
+ ```
92
+
93
+ Esto te permite:
94
+
95
+ - Crear/seleccionar perfiles de portfolio
96
+ - Configurar `PORTFOLIO_API_URL` y `PORTFOLIO_API_KEY`
97
+ - Guardar perfiles para reutilizar en otros proyectos
98
+
99
+ #### 3. Sincronizar Configuración (Opcional)
100
+
101
+ Si trabajas en múltiples dispositivos:
102
+
103
+ ```bash
104
+ # Primera vez: Configurar GitHub sync
105
+ bunx da-proj --setup-github-sync
106
+
107
+ # Subir configuración
108
+ bunx da-proj --push
109
+
110
+ # En otro dispositivo: Descargar configuración
111
+ bunx da-proj --pull
112
+
113
+ # Ver estado de sincronización
114
+ bunx da-proj --sync-status
115
+ ```
116
+
117
+ ---
118
+
119
+ ## 📂 Archivos Generados
120
+
121
+ Después de ejecutar `--init`, se crearán:
122
+
123
+ ```
124
+ tu-proyecto/
125
+ ├── .project-metadata.mdx # ✨ Metadata del proyecto
126
+ ├── .project-schema.json # 📋 Schema de validación
127
+ ├── .github/
128
+ │ └── workflows/
129
+ │ └── sync-portfolio.yml # 🔄 GitHub Actions workflow
130
+ ├── proj-images/ # 🖼️ Carpeta para imágenes
131
+ │ ├── README.md # 📖 Guía de imágenes
132
+ │ └── .gitkeep
133
+ └── README.md # 📄 README profesional (si no existe)
134
+ ```
135
+
136
+ ### Ejemplo de `.project-metadata.mdx`
137
+
138
+ ```mdx
139
+ ---
140
+ title: "Mi App Increíble"
141
+ category: "Web Development"
142
+ type: "featured"
143
+ status: "active"
144
+ technologies:
145
+ - React
146
+ - TypeScript
147
+ - Node.js
148
+ - PostgreSQL
149
+ images:
150
+ cover: /proj-images/cover.png
151
+ gallery:
152
+ - /proj-images/screenshot1.png
153
+ - /proj-images/screenshot2.png
154
+ repository: https://github.com/usuario/mi-app
155
+ demo: https://mi-app.vercel.app
156
+ ---
157
+
158
+ # Mi App Increíble
159
+
160
+ ## Descripción
161
+
162
+ Una aplicación web moderna que resuelve [problema específico]...
163
+
164
+ ## Características Principales
165
+
166
+ - ✅ Feature 1
167
+ - ✅ Feature 2
168
+ - ✅ Feature 3
169
+ ```
170
+
171
+ ---
172
+
173
+ ## 🔧 Comandos Disponibles
174
+
175
+ ### Comandos Principales
176
+
177
+ ```bash
178
+ # Inicializar metadata del proyecto
179
+ bunx da-proj --init
180
+
181
+ # Configurar GitHub secrets
182
+ bunx da-proj --secrets
183
+
184
+ # Sincronizar configuración (export/import manual)
185
+ bunx da-proj --sync
186
+
187
+ # Mostrar ayuda
188
+ bunx da-proj --help
189
+ ```
190
+
191
+ ### Comandos de GitHub Sync
192
+
193
+ ```bash
194
+ # Configurar sincronización vía GitHub
195
+ bunx da-proj --setup-github-sync
196
+
197
+ # Subir configuración local a GitHub
198
+ bunx da-proj --push
199
+
200
+ # Descargar configuración desde GitHub
201
+ bunx da-proj --pull
202
+
203
+ # Ver estado de sincronización
204
+ bunx da-proj --sync-status
205
+ ```
206
+
207
+ ---
208
+
209
+ ## 🔐 Configuración de GitHub Secrets
210
+
211
+ ### Opción 1: Usando el CLI (Recomendado)
212
+
213
+ ```bash
214
+ bunx da-proj --secrets
215
+ ```
216
+
217
+ El CLI te guiará para:
218
+
219
+ 1. Verificar que GitHub CLI esté instalado
220
+ 2. Crear o seleccionar un perfil
221
+ 3. Configurar automáticamente los secrets en tu repo
222
+
223
+ ### Opción 2: Manual
224
+
225
+ 1. Ve a tu repositorio en GitHub
226
+ 2. Settings → Secrets and variables → Actions
227
+ 3. Agrega estos secrets:
228
+ - `PORTFOLIO_API_URL`: URL de tu API de portfolio
229
+ - `PORTFOLIO_API_KEY`: Tu API key
230
+
231
+ 📖 **Guía detallada:** Ver [docs/SETUP-SECRETS.md](docs/SETUP-SECRETS.md)
232
+
233
+ ---
234
+
235
+ ## 🌐 Sincronización entre Dispositivos
236
+
237
+ ### ¿Por qué sincronizar?
238
+
239
+ Si trabajas en múltiples computadoras (PC de escritorio, laptop, etc.), puedes sincronizar tus perfiles de portfolio usando GitHub.
240
+
241
+ ### Configuración (Una sola vez)
242
+
243
+ ```bash
244
+ # En tu primera PC
245
+ bunx da-proj --setup-github-sync
246
+ # → Crea un repo privado "da-proj-secrets"
247
+
248
+ bunx da-proj --push
249
+ # → Sube tu configuración
250
+ ```
251
+
252
+ ### Uso en Otros Dispositivos
253
+
254
+ ```bash
255
+ # En tu laptop
256
+ bunx da-proj --setup-github-sync
257
+ # → Conecta al repo existente
258
+
259
+ bunx da-proj --pull
260
+ # → Descarga todos tus perfiles
261
+ ```
262
+
263
+ 📖 **Guía completa:** Ver [docs/GITHUB-SYNC.md](docs/GITHUB-SYNC.md)
264
+
265
+ ---
266
+
267
+ ## 🎯 Casos de Uso
268
+
269
+ ### Freelancer con Múltiples Clientes
270
+
271
+ ```bash
272
+ # Crear perfiles para cada cliente
273
+ bunx da-proj --secrets
274
+ # → Perfil "cliente-acme" con su portfolio
275
+ # → Perfil "cliente-tech" con su portfolio
276
+ # → Perfil "personal" con tu portfolio
277
+
278
+ # En cada proyecto, selecciona el perfil apropiado
279
+ cd proyecto-acme
280
+ bunx da-proj --secrets # Selecciona "cliente-acme"
281
+ ```
282
+
283
+ ### Desarrollador con Portfolio Personal
284
+
285
+ ```bash
286
+ # Una sola vez
287
+ bunx da-proj --secrets
288
+ # → Crea perfil "main"
289
+
290
+ # En cada nuevo proyecto
291
+ cd nuevo-proyecto
292
+ bunx da-proj --init # Genera metadata
293
+ bunx da-proj --secrets # Usa perfil "main"
294
+ ```
295
+
296
+ ### Equipo Compartiendo Configuración
297
+
298
+ ```bash
299
+ # Líder del equipo
300
+ bunx da-proj --setup-github-sync
301
+ bunx da-proj --push
302
+
303
+ # Miembros del equipo
304
+ bunx da-proj --setup-github-sync # Conecta al repo compartido
305
+ bunx da-proj --pull # Descarga configuración
306
+ ```
307
+
308
+ ---
309
+
310
+ ## 🛠️ Desarrollo
311
+
312
+ ### Requisitos
313
+
314
+ - Bun runtime (recomendado) o Node.js 18+
315
+ - Git repository inicializado
316
+ - GitHub CLI (para comandos de secrets y sync)
317
+
318
+ ### Setup Local
319
+
320
+ ```bash
321
+ # Clonar el repositorio
322
+ git clone https://github.com/tu-usuario/da-proj.git
323
+ cd da-proj
324
+
325
+ # Instalar dependencias
326
+ bun install
327
+
328
+ # Ejecutar en modo desarrollo
329
+ bun run dev --init
330
+
331
+ # Compilar
332
+ bun run build
333
+ ```
334
+
335
+ ### Estructura del Proyecto
336
+
337
+ ```
338
+ da-proj/
339
+ ├── src/
340
+ │ ├── commands/ # Comandos del CLI
341
+ │ │ ├── init.ts # Inicializar proyecto
342
+ │ │ ├── secrets.ts # Configurar GitHub secrets
343
+ │ │ ├── sync.ts # Sincronización manual
344
+ │ │ ├── setup-github-sync.ts
345
+ │ │ ├── push.ts
346
+ │ │ ├── pull.ts
347
+ │ │ └── sync-status.ts
348
+ │ ├── generators/ # Generadores de archivos
349
+ │ ├── utils/ # Utilidades
350
+ │ │ ├── github.ts # GitHub CLI/API
351
+ │ │ ├── github-config.ts
352
+ │ │ └── config.ts
353
+ │ ├── types/ # TypeScript types
354
+ │ └── index.ts # Entry point
355
+ ├── docs/ # Documentación
356
+ └── package.json
357
+ ```
358
+
359
+ ---
360
+
361
+ ## 📚 Documentación
362
+
363
+ - [Setup de Secrets](docs/SETUP-SECRETS.md) - Guía detallada de configuración
364
+ - [GitHub Sync](docs/GITHUB-SYNC.md) - Sincronización entre dispositivos
365
+ - [Workflow Explicado](docs/WORKFLOW-EXPLICADO.md) - Cómo funciona GitHub Actions
366
+ - [Arquitectura](src/README.md) - Estructura del código
367
+
368
+ ---
369
+
370
+ ## 🤝 Contribuir
371
+
372
+ Las contribuciones son bienvenidas! Por favor:
373
+
374
+ 1. Fork el proyecto
375
+ 2. Crea una rama para tu feature (`git checkout -b feature/amazing-feature`)
376
+ 3. Commit tus cambios (`git commit -m 'Add amazing feature'`)
377
+ 4. Push a la rama (`git push origin feature/amazing-feature`)
378
+ 5. Abre un Pull Request
379
+
380
+ ---
381
+
382
+ ## 📝 Changelog
383
+
384
+ Ver [CHANGELOG.md](CHANGELOG.md) para historial de cambios.
385
+
386
+ ---
387
+
388
+ ## 📄 Licencia
389
+
390
+ MIT © Dereck Angeles
391
+
392
+ ---
393
+
394
+ ## 💬 Soporte
395
+
396
+ ¿Tienes preguntas o problemas?
397
+
398
+ - 📧 Email: tu-email@ejemplo.com
399
+ - 🐛 Issues: [GitHub Issues](https://github.com/tu-usuario/da-proj/issues)
400
+ - 📖 Docs: [Documentación completa](docs/)
401
+
402
+ ---
403
+
404
+ <div align="center">
405
+
406
+ **💼 Hecho con ❤️ para automatizar portfolios de desarrolladores**
407
+
408
+ ⭐ Si te gusta este proyecto, dale una estrella en GitHub!
409
+
410
+ </div>
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "da-proj",
3
+ "version": "1.0.0",
4
+ "description": "CLI tool to setup portfolio project metadata with automatic GitHub Actions sync",
5
+ "bin": {
6
+ "da-proj": "./src/index.ts"
7
+ },
8
+ "type": "module",
9
+ "files": [
10
+ "src/**/*.ts",
11
+ "README.md"
12
+ ],
13
+ "scripts": {
14
+ "prepublishOnly": "bun run build",
15
+ "build": "bun build src/index.ts --compile --outfile create-project-meta",
16
+ "dev": "bun run src/index.ts",
17
+ "generate-key": "bun run scripts/generate-api-key.ts",
18
+ "generate-key:ps": "pwsh -File scripts/generate-api-key.ps1",
19
+ "generate-key:node": "node scripts/generate-api-key.js"
20
+ },
21
+ "dependencies": {
22
+ "@inquirer/prompts": "^8.2.0",
23
+ "gray-matter": "^4.0.3"
24
+ },
25
+ "devDependencies": {
26
+ "bun-types": "latest"
27
+ },
28
+ "keywords": [
29
+ "portfolio",
30
+ "cli",
31
+ "metadata",
32
+ "github-actions",
33
+ "project-setup",
34
+ "mdx",
35
+ "automation",
36
+ "developer-tools"
37
+ ],
38
+ "author": "Dereck Angeles - dereckangeles15071998@gmail.com",
39
+ "license": "MIT",
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "https://github.com/DereckAn/da-proj.git"
43
+ },
44
+ "homepage": "https://github.com/DereckAn/da-proj#readme",
45
+ "bugs": {
46
+ "url": "https://github.com/DereckAn/da-proj/issues"
47
+ },
48
+ "engines": {
49
+ "node": ">=18.0.0"
50
+ }
51
+ }
package/src/README.md ADDED
@@ -0,0 +1,190 @@
1
+ # Arquitectura del Proyecto
2
+
3
+ ## Estructura de Carpetas
4
+
5
+ ```
6
+ src/
7
+ ├── commands/ # Comandos del CLI
8
+ │ ├── init.ts # Comando --init (inicializar proyecto)
9
+ │ └── secrets.ts # Comando --secrets (configurar GitHub secrets)
10
+
11
+ ├── generators/ # Generadores de archivos
12
+ │ ├── mdx.ts # Genera .project-metadata.mdx
13
+ │ ├── readme.ts # Genera README.md
14
+ │ ├── schema.ts # Genera .project-schema.json
15
+ │ └── workflow.ts # Genera GitHub Actions workflow
16
+
17
+ ├── utils/ # Utilidades compartidas
18
+ │ ├── config.ts # Manejo de configuración global
19
+ │ ├── github.ts # Funciones de GitHub CLI
20
+ │ └── logger.ts # Logger con colores
21
+
22
+ ├── types/ # Definiciones de tipos TypeScript
23
+ │ └── index.ts # Todos los tipos e interfaces
24
+
25
+ └── index.ts # Punto de entrada principal
26
+ ```
27
+
28
+ ## Flujo de Ejecución
29
+
30
+ ### Comando `--init`
31
+
32
+ ```
33
+ index.ts
34
+ └─> initCommand() [commands/init.ts]
35
+ ├─> Recopila información del usuario (prompts)
36
+ ├─> Crea ProjectMetadata
37
+ ├─> generateMDX() [generators/mdx.ts]
38
+ ├─> generateWorkflow() [generators/workflow.ts]
39
+ ├─> generateReadme() [generators/readme.ts]
40
+ ├─> generateSchema() [generators/schema.ts]
41
+ └─> Escribe archivos al disco
42
+ ```
43
+
44
+ ### Comando `--secrets`
45
+
46
+ ```
47
+ index.ts
48
+ └─> secretsCommand() [commands/secrets.ts]
49
+ ├─> checkGitHubCLI() [utils/github.ts]
50
+ ├─> getExistingSecrets() [utils/github.ts]
51
+ ├─> readGlobalConfig() [utils/config.ts]
52
+ ├─> Selecciona o crea perfil
53
+ ├─> saveGlobalConfig() [utils/config.ts]
54
+ └─> setGitHubSecret() [utils/github.ts]
55
+ ```
56
+
57
+ ## Módulos
58
+
59
+ ### commands/
60
+ Contiene la lógica de cada comando del CLI. Cada comando es independiente y puede ser ejecutado por separado.
61
+
62
+ **Responsabilidades:**
63
+ - Interactuar con el usuario (prompts)
64
+ - Orquestar llamadas a utils y generators
65
+ - Manejar errores específicos del comando
66
+
67
+ ### generators/
68
+ Funciones puras que generan contenido de archivos. No tienen efectos secundarios.
69
+
70
+ **Responsabilidades:**
71
+ - Generar strings con el contenido de archivos
72
+ - Formatear metadata en diferentes formatos (MDX, YAML, JSON)
73
+
74
+ ### utils/
75
+ Funciones de utilidad compartidas entre comandos.
76
+
77
+ **Responsabilidades:**
78
+ - Interactuar con APIs externas (GitHub CLI)
79
+ - Leer/escribir configuración
80
+ - Logging y formateo de mensajes
81
+
82
+ ### types/
83
+ Definiciones de tipos TypeScript compartidas en todo el proyecto.
84
+
85
+ **Responsabilidades:**
86
+ - Definir interfaces y tipos
87
+ - Mantener consistencia de tipos
88
+
89
+ ## Agregar Nuevos Comandos
90
+
91
+ Para agregar un nuevo comando (ej: `--update`):
92
+
93
+ 1. **Crear el comando:**
94
+ ```typescript
95
+ // src/commands/update.ts
96
+ export async function updateCommand() {
97
+ // Tu lógica aquí
98
+ }
99
+ ```
100
+
101
+ 2. **Agregar al index.ts:**
102
+ ```typescript
103
+ import { updateCommand } from "./commands/update.js";
104
+
105
+ // En parseArgs:
106
+ options: {
107
+ // ...
108
+ update: { type: "boolean", short: "u" },
109
+ }
110
+
111
+ // En main():
112
+ if (args.values.update) {
113
+ await updateCommand();
114
+ process.exit(0);
115
+ }
116
+ ```
117
+
118
+ 3. **Actualizar help:**
119
+ ```typescript
120
+ ${colors.bright}OPTIONS:${colors.reset}
121
+ // ...
122
+ -u, --update Update existing metadata
123
+ ```
124
+
125
+ ## Agregar Nuevos Generadores
126
+
127
+ Para agregar un nuevo generador (ej: `CONTRIBUTING.md`):
128
+
129
+ 1. **Crear el generador:**
130
+ ```typescript
131
+ // src/generators/contributing.ts
132
+ export function generateContributing(): string {
133
+ return `# Contributing Guide...`;
134
+ }
135
+ ```
136
+
137
+ 2. **Usar en comando:**
138
+ ```typescript
139
+ // src/commands/init.ts
140
+ import { generateContributing } from "../generators/contributing.js";
141
+
142
+ // En initCommand():
143
+ await writeFile("CONTRIBUTING.md", generateContributing());
144
+ ```
145
+
146
+ ## Principios de Diseño
147
+
148
+ ### 1. Separación de Responsabilidades
149
+ Cada módulo tiene una responsabilidad clara y única.
150
+
151
+ ### 2. Funciones Puras
152
+ Los generators son funciones puras sin efectos secundarios.
153
+
154
+ ### 3. Composición
155
+ Los comandos componen funciones de utils y generators.
156
+
157
+ ### 4. Tipos Fuertes
158
+ Todo está tipado con TypeScript para mayor seguridad.
159
+
160
+ ### 5. Modularidad
161
+ Fácil agregar nuevos comandos, generators o utils sin modificar código existente.
162
+
163
+ ## Testing (Futuro)
164
+
165
+ Estructura sugerida para tests:
166
+
167
+ ```
168
+ tests/
169
+ ├── commands/
170
+ │ ├── init.test.ts
171
+ │ └── secrets.test.ts
172
+ ├── generators/
173
+ │ ├── mdx.test.ts
174
+ │ └── workflow.test.ts
175
+ └── utils/
176
+ ├── config.test.ts
177
+ └── github.test.ts
178
+ ```
179
+
180
+ ## Dependencias
181
+
182
+ - `@inquirer/prompts`: Prompts interactivos
183
+ - `gray-matter`: Parsing de MDX (solo en workflow generado)
184
+ - `bun`: Runtime
185
+
186
+ ## Notas
187
+
188
+ - Todos los imports usan `.js` extension (requerido por ES modules)
189
+ - El shebang `#!/usr/bin/env bun` está solo en `src/index.ts`
190
+ - La configuración global se guarda en `~/.da-proj-config.json`