create-bunspace 0.1.1 → 0.2.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/dist/bin.js +132 -1
- package/dist/templates/fumadocs/.env.example +49 -0
- package/dist/templates/fumadocs/.github/workflows/deploy.yml +89 -0
- package/dist/templates/fumadocs/CLAUDE.md +164 -0
- package/dist/templates/fumadocs/LICENSE +21 -0
- package/dist/templates/fumadocs/MUST-FOLLOW-GUIDELINES.md +269 -0
- package/dist/templates/fumadocs/README.md +319 -0
- package/dist/templates/fumadocs/biome.json +41 -0
- package/dist/templates/fumadocs/bun.lock +883 -0
- package/dist/templates/fumadocs/content-template/docs/getting-started/index.mdx +92 -0
- package/dist/templates/fumadocs/content-template/docs/getting-started/installation.mdx +168 -0
- package/dist/templates/fumadocs/content-template/docs/getting-started/quick-start.mdx +168 -0
- package/dist/templates/fumadocs/content-template/docs/index.mdx +70 -0
- package/dist/templates/fumadocs/content-template/en/docs/getting-started/index.mdx +92 -0
- package/dist/templates/fumadocs/content-template/en/docs/getting-started/installation.mdx +168 -0
- package/dist/templates/fumadocs/content-template/en/docs/getting-started/quick-start.mdx +168 -0
- package/dist/templates/fumadocs/content-template/en/docs/index.mdx +69 -0
- package/dist/templates/fumadocs/messages/en.json +14 -0
- package/dist/templates/fumadocs/messages/es.json +14 -0
- package/dist/templates/fumadocs/next.config.mjs +35 -0
- package/dist/templates/fumadocs/oxlint.json +14 -0
- package/dist/templates/fumadocs/package.json +35 -0
- package/dist/templates/fumadocs/postcss.config.mjs +5 -0
- package/dist/templates/fumadocs/source.config.ts +31 -0
- package/dist/templates/fumadocs/src/app/(home)/layout.tsx +6 -0
- package/dist/templates/fumadocs/src/app/(home)/page.tsx +132 -0
- package/dist/templates/fumadocs/src/app/api/search/route.ts +9 -0
- package/dist/templates/fumadocs/src/app/docs/[[...slug]]/page.tsx +62 -0
- package/dist/templates/fumadocs/src/app/docs/layout.tsx +11 -0
- package/dist/templates/fumadocs/src/app/en/docs/[[...slug]]/page.tsx +61 -0
- package/dist/templates/fumadocs/src/app/en/docs/layout.tsx +11 -0
- package/dist/templates/fumadocs/src/app/global.css +3 -0
- package/dist/templates/fumadocs/src/app/layout.tsx +47 -0
- package/dist/templates/fumadocs/src/app/llms-full.txt/route.ts +10 -0
- package/dist/templates/fumadocs/src/app/og/docs/[...slug]/route.tsx +27 -0
- package/dist/templates/fumadocs/src/components/language-selector.tsx +56 -0
- package/dist/templates/fumadocs/src/components/markdown-actions.tsx +61 -0
- package/dist/templates/fumadocs/src/config/site.config.ts +115 -0
- package/dist/templates/fumadocs/src/lib/layout.shared.tsx +23 -0
- package/dist/templates/fumadocs/src/lib/source.ts +91 -0
- package/dist/templates/fumadocs/src/mdx-components.tsx +14 -0
- package/dist/templates/fumadocs/tsconfig.json +46 -0
- package/package.json +1 -1
- package/templates/fumadocs/.env.example +49 -0
- package/templates/fumadocs/.github/workflows/deploy.yml +89 -0
- package/templates/fumadocs/CLAUDE.md +164 -0
- package/templates/fumadocs/LICENSE +21 -0
- package/templates/fumadocs/MUST-FOLLOW-GUIDELINES.md +269 -0
- package/templates/fumadocs/README.md +319 -0
- package/templates/fumadocs/biome.json +41 -0
- package/templates/fumadocs/bun.lock +883 -0
- package/templates/fumadocs/content-template/docs/getting-started/index.mdx +92 -0
- package/templates/fumadocs/content-template/docs/getting-started/installation.mdx +168 -0
- package/templates/fumadocs/content-template/docs/getting-started/quick-start.mdx +168 -0
- package/templates/fumadocs/content-template/docs/index.mdx +70 -0
- package/templates/fumadocs/content-template/en/docs/getting-started/index.mdx +92 -0
- package/templates/fumadocs/content-template/en/docs/getting-started/installation.mdx +168 -0
- package/templates/fumadocs/content-template/en/docs/getting-started/quick-start.mdx +168 -0
- package/templates/fumadocs/content-template/en/docs/index.mdx +69 -0
- package/templates/fumadocs/messages/en.json +14 -0
- package/templates/fumadocs/messages/es.json +14 -0
- package/templates/fumadocs/next.config.mjs +35 -0
- package/templates/fumadocs/oxlint.json +14 -0
- package/templates/fumadocs/package.json +35 -0
- package/templates/fumadocs/postcss.config.mjs +5 -0
- package/templates/fumadocs/source.config.ts +31 -0
- package/templates/fumadocs/src/app/(home)/layout.tsx +6 -0
- package/templates/fumadocs/src/app/(home)/page.tsx +132 -0
- package/templates/fumadocs/src/app/api/search/route.ts +9 -0
- package/templates/fumadocs/src/app/docs/[[...slug]]/page.tsx +62 -0
- package/templates/fumadocs/src/app/docs/layout.tsx +11 -0
- package/templates/fumadocs/src/app/en/docs/[[...slug]]/page.tsx +61 -0
- package/templates/fumadocs/src/app/en/docs/layout.tsx +11 -0
- package/templates/fumadocs/src/app/global.css +3 -0
- package/templates/fumadocs/src/app/layout.tsx +47 -0
- package/templates/fumadocs/src/app/llms-full.txt/route.ts +10 -0
- package/templates/fumadocs/src/app/og/docs/[...slug]/route.tsx +27 -0
- package/templates/fumadocs/src/components/language-selector.tsx +56 -0
- package/templates/fumadocs/src/components/markdown-actions.tsx +61 -0
- package/templates/fumadocs/src/config/site.config.ts +115 -0
- package/templates/fumadocs/src/lib/layout.shared.tsx +23 -0
- package/templates/fumadocs/src/lib/source.ts +91 -0
- package/templates/fumadocs/src/mdx-components.tsx +14 -0
- package/templates/fumadocs/tsconfig.json +46 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
# MUST-FOLLOW-GUIDELINES.md
|
|
2
|
+
|
|
3
|
+
> **IMPORTANTE**: Este documento es la fuente de verdad para todas las reglas de desarrollo en este proyecto.
|
|
4
|
+
> **El incumplimiento de estas reglas sera motivo de correccion obligatoria en code review.**
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Stack Definitivo
|
|
9
|
+
|
|
10
|
+
| Herramienta | Version/Configuracion | Uso |
|
|
11
|
+
|-------------|----------------------|-----|
|
|
12
|
+
| **Runtime** | Bun v1.1.43+ | Package manager + runtime |
|
|
13
|
+
| **Bundling** | Rolldown v1.0.0-beta.58 | Build de packages |
|
|
14
|
+
| **Type Checking** | TSGO v7.0.0-dev (@typescript/native-preview) | TypeScript compiler |
|
|
15
|
+
| **Linting** | Oxlint v0.11.1 | Linting rapido (OxC-based) |
|
|
16
|
+
| **Formatting** | Prettier v3.4.2 + organize-imports | Formato de codigo |
|
|
17
|
+
| **Validation** | Arktype | Validacion de esquemas |
|
|
18
|
+
| **Versioning** | Changesets v2.27.11 | Versionado de packages |
|
|
19
|
+
| **Logging** | @mks2508/better-logger v4.0.0 | Logging estructurado |
|
|
20
|
+
| **Error Handling** | @mks2508/no-throw v0.1.0 | Result pattern |
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Estructura de Carpetas Obligatoria
|
|
25
|
+
|
|
26
|
+
### Root del Monorepo
|
|
27
|
+
```
|
|
28
|
+
mks-fumadocs-template/
|
|
29
|
+
├── docs/ # Documentacion del proyecto
|
|
30
|
+
├── tools/ # Scripts y herramientas de desarrollo
|
|
31
|
+
├── core/
|
|
32
|
+
│ └── packages/
|
|
33
|
+
│ ├── main/
|
|
34
|
+
│ └── utils/
|
|
35
|
+
└── apps/
|
|
36
|
+
└── example/
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Estructura de un Package
|
|
40
|
+
```
|
|
41
|
+
core/packages/main/
|
|
42
|
+
├── src/
|
|
43
|
+
│ ├── utils/ # Utilidades locales del package
|
|
44
|
+
│ │ └── index.ts # Barrel export
|
|
45
|
+
│ ├── types/ # Tipos del dominio del package
|
|
46
|
+
│ │ ├── *.types.ts # Tipos especificos
|
|
47
|
+
│ │ ├── constants.ts # Constantes del package
|
|
48
|
+
│ │ └── index.ts # Barrel export
|
|
49
|
+
│ ├── *.ts # Codigo fuente principal
|
|
50
|
+
│ └── index.ts # Export principal
|
|
51
|
+
├── dist/ # Build output
|
|
52
|
+
├── package.json
|
|
53
|
+
├── rolldown.config.ts
|
|
54
|
+
└── tsconfig.json
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## REGLA 1: JSDoc Completo Profesional
|
|
60
|
+
|
|
61
|
+
### Requerimientos Obligatorios
|
|
62
|
+
|
|
63
|
+
TODA funcion, clase, metodo, interface, type, y constante exportada DEBE tener JSDoc completo:
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
/**
|
|
67
|
+
* Descripcion clara y concisa de que hace y por que.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* // Codigo ejecutable que demuestra uso tipico
|
|
72
|
+
* const result = await myFunction('example');
|
|
73
|
+
* if (result.isErr()) {
|
|
74
|
+
* log.error('Failed', result.error);
|
|
75
|
+
* return;
|
|
76
|
+
* }
|
|
77
|
+
* console.log(result.value);
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* @param paramName - Descripcion del parametro
|
|
81
|
+
* @returns Result<T, E> Descripcion del valor de retorno
|
|
82
|
+
* @throws {AppError} Cuando y por que se lanza este error
|
|
83
|
+
* @see {@link IOptions} Referencias a tipos relacionados
|
|
84
|
+
*/
|
|
85
|
+
export async function myFunction(
|
|
86
|
+
param: string,
|
|
87
|
+
options?: IOptions
|
|
88
|
+
): Promise<Result<string, AppError>> {
|
|
89
|
+
// ...
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Tags Obligatorios
|
|
94
|
+
|
|
95
|
+
| Tag | Cuando usar | Formato |
|
|
96
|
+
|-----|-------------|---------|
|
|
97
|
+
| `@description` | Siempre | Primera linea (implicita) |
|
|
98
|
+
| `@param` | Cada parametro | `@param name - Description` |
|
|
99
|
+
| `@returns` | Siempre | `@returns Type - Description` |
|
|
100
|
+
| `@example` | Funciones publicas | Codigo TypeScript ejecutable |
|
|
101
|
+
| `@throws` | Si puede lanzar | `@throws {ErrorType} Cuando` |
|
|
102
|
+
| `@see` | Referencias | `@see {@link ISomething}` |
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## REGLA 2: Logging - NUNCA console.log
|
|
107
|
+
|
|
108
|
+
### Obligatorio
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
import { createLogger } from 'mks-fumadocs-template/utils/logger';
|
|
112
|
+
|
|
113
|
+
const log = createLogger('MyComponent');
|
|
114
|
+
|
|
115
|
+
// CORRECTO
|
|
116
|
+
log.info('Started');
|
|
117
|
+
log.success('Completed');
|
|
118
|
+
log.warn('High memory usage');
|
|
119
|
+
log.error('Failed to connect', { error });
|
|
120
|
+
log.critical('System failure');
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Prohibido
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
// INCORRECTO
|
|
127
|
+
console.log('Started');
|
|
128
|
+
console.error('Failed');
|
|
129
|
+
console.info('Info');
|
|
130
|
+
console.warn('Warning');
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## REGLA 3: Result Pattern - SIEMPRE
|
|
136
|
+
|
|
137
|
+
### Obligatorio
|
|
138
|
+
|
|
139
|
+
TODA operacion que pueda fallar DEBE usar `Result<T, E>` del package `mks-fumadocs-template/utils/result`:
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
import {
|
|
143
|
+
ok,
|
|
144
|
+
tryCatch,
|
|
145
|
+
type Result
|
|
146
|
+
} from 'mks-fumadocs-template/utils/result';
|
|
147
|
+
import {
|
|
148
|
+
createAppError,
|
|
149
|
+
AppErrorCode
|
|
150
|
+
} from 'mks-fumadocs-template/utils/result';
|
|
151
|
+
|
|
152
|
+
async function fetchData(
|
|
153
|
+
url: string
|
|
154
|
+
): Promise<Result<string, AppError>> {
|
|
155
|
+
const result = await tryCatch(
|
|
156
|
+
async () => {
|
|
157
|
+
const response = await fetch(url);
|
|
158
|
+
if (!response.ok) {
|
|
159
|
+
throw new Error(`HTTP ${response.status}`);
|
|
160
|
+
}
|
|
161
|
+
return await response.text();
|
|
162
|
+
},
|
|
163
|
+
AppErrorCode.NetworkError
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
if (result.isErr()) {
|
|
167
|
+
return createAppError(
|
|
168
|
+
AppErrorCode.NetworkError,
|
|
169
|
+
`Failed to fetch from ${url}`,
|
|
170
|
+
result.error
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return ok(result.value);
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## REGLA 4: Nomenclatura - Prefijo I
|
|
181
|
+
|
|
182
|
+
### Interfaces
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
// CORRECTO - Prefijo I
|
|
186
|
+
export interface IOptions {
|
|
187
|
+
url: string;
|
|
188
|
+
timeout?: number;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export interface ICallback {
|
|
192
|
+
onSuccess: () => void;
|
|
193
|
+
onError: (error: Error) => void;
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Types (sin prefijo)
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
// CORRECTO - Sin prefijo
|
|
201
|
+
export type Options = {
|
|
202
|
+
url: string;
|
|
203
|
+
timeout?: number;
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
export type ErrorCode =
|
|
207
|
+
| 'NETWORK_ERROR'
|
|
208
|
+
| 'NOT_FOUND'
|
|
209
|
+
| 'PERMISSION_DENIED';
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## REGLA 5: Barrel Exports - SIEMPRE
|
|
215
|
+
|
|
216
|
+
TODA carpeta con multiples archivos DEBE tener un `index.ts` que exporte todo:
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
// src/types/index.ts
|
|
220
|
+
export * from './main.types';
|
|
221
|
+
export * from './constants';
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## REGLA 6: Async/Await - Preferencia
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
// CORRECTO - Async/await
|
|
230
|
+
async function processFile(path: string): Promise<void> {
|
|
231
|
+
const content = await readFile(path);
|
|
232
|
+
const processed = await transform(content);
|
|
233
|
+
await writeFile(path, processed);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// INCORRECTO - Promise chaining
|
|
237
|
+
function processFile(path: string) {
|
|
238
|
+
return readFile(path)
|
|
239
|
+
.then(content => transform(content))
|
|
240
|
+
.then(processed => writeFile(path, processed));
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Checklist Pre-Commit
|
|
247
|
+
|
|
248
|
+
Antes de hacer commit de codigo, verificar:
|
|
249
|
+
|
|
250
|
+
- [ ] Todo codigo nuevo tiene JSDoc completo
|
|
251
|
+
- [ ] No hay `console.log/debug/error/info/warn`
|
|
252
|
+
- [ ] Todo lo que puede fallar usa `Result<T, E>`
|
|
253
|
+
- [ ] Interfaces tienen prefijo `I`
|
|
254
|
+
- [ ] Barrel exports en todas las carpetas
|
|
255
|
+
- [ ] Async/await en lugar de Promise chaining
|
|
256
|
+
- [ ] `bun run typecheck` pasa
|
|
257
|
+
- [ ] `bun run lint` pasa
|
|
258
|
+
- [ ] `bun run format` aplicado
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## Fuentes de Referencia
|
|
263
|
+
|
|
264
|
+
- **CLAUDE.md** - Guia de arquitectura del monorepo
|
|
265
|
+
- **@mks2508/better-logger** - Documentacion del logger
|
|
266
|
+
- **@mks2508/no-throw** - Documentacion del Result pattern
|
|
267
|
+
- **Arktype** - https://arktype.io/
|
|
268
|
+
- **Rolldown** - https://rollup.rs/
|
|
269
|
+
- **Oxlint** - https://oxlint.com/
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
# {{PROJECT_NAME}} - Documentation Template
|
|
2
|
+
|
|
3
|
+
> {{DESCRIPTION}}
|
|
4
|
+
|
|
5
|
+
## 🚀 Quick Start
|
|
6
|
+
|
|
7
|
+
Este es un template de documentación basado en **Fumadocs** (Next.js + MDX) listo para usar con:
|
|
8
|
+
|
|
9
|
+
- ✅ Soporte bilingüe (Español/Inglés)
|
|
10
|
+
- ✅ Búsqueda integrada
|
|
11
|
+
- ✅ Tema oscuro/claro automático
|
|
12
|
+
- ✅ GitHub Pages ready
|
|
13
|
+
- ✅ MDX con componentes de React
|
|
14
|
+
- ✅ Pipeline de CI/CD configurado
|
|
15
|
+
|
|
16
|
+
## 📋 Requisitos Previos
|
|
17
|
+
|
|
18
|
+
- **Bun** v1.1.43+ (recomendado) o Node.js v20+
|
|
19
|
+
- **GitHub** (para despliegue)
|
|
20
|
+
|
|
21
|
+
## 🔧 Instalación
|
|
22
|
+
|
|
23
|
+
### Opción 1: Usando mks-scaffolder (Recomendado)
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
bunx mks-scaffolder create mi-proyecto --template fumadocs
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Sigue las instrucciones interactivas para configurar tu proyecto.
|
|
30
|
+
|
|
31
|
+
### Opción 2: Manual
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
git clone https://github.com/{{GITHUB_REPO}}.git mi-proyecto
|
|
35
|
+
cd mi-proyecto
|
|
36
|
+
bun install
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## ⚙️ Configuración
|
|
40
|
+
|
|
41
|
+
### 1. Variables de Entorno
|
|
42
|
+
|
|
43
|
+
Crea `.env.local` en la raíz:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Copia el template
|
|
47
|
+
cp .env.example .env.local
|
|
48
|
+
|
|
49
|
+
# Edita con tus valores
|
|
50
|
+
PROJECT_NAME=Mi Proyecto
|
|
51
|
+
DESCRIPTION=Descripción de mi proyecto
|
|
52
|
+
AUTHOR=Tu Nombre
|
|
53
|
+
BASE_PATH=/mi-proyecto
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 2. Contenido Placeholder
|
|
57
|
+
|
|
58
|
+
El template incluye contenido de ejemplo en `content-template/`:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
content-template/
|
|
62
|
+
├── docs/
|
|
63
|
+
│ ├── index.mdx # Página principal (ES)
|
|
64
|
+
│ └── getting-started/
|
|
65
|
+
│ ├── index.mdx
|
|
66
|
+
│ ├── installation.mdx
|
|
67
|
+
│ └── quick-start.mdx
|
|
68
|
+
└── en/docs/ # Versión en inglés
|
|
69
|
+
└── (misma estructura)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Para usarlo:**
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# Opción A: Copiar todo el contenido
|
|
76
|
+
cp -r content-template/* content/
|
|
77
|
+
|
|
78
|
+
# Opción B: Copiar solo lo que necesitas
|
|
79
|
+
# Los archivos usan variables {{PLACEHOLDER}} que debes reemplazar
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 3. Reemplazar Placeholders
|
|
83
|
+
|
|
84
|
+
Los archivos de contenido usan **placeholders** que debes reemplazar:
|
|
85
|
+
|
|
86
|
+
- `{{PROJECT_NAME}}` - Nombre de tu proyecto
|
|
87
|
+
- `{{DESCRIPTION}}` - Descripción del proyecto
|
|
88
|
+
- `{{AUTHOR}}` - Tu nombre
|
|
89
|
+
- `{{GITHUB_REPO}}` - `usuario/repo`
|
|
90
|
+
- `{{BASE_PATH}}` - Path para GitHub Pages
|
|
91
|
+
|
|
92
|
+
**Ejemplo de búsqueda y reemplazo:**
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# Con sed (Linux/macOS)
|
|
96
|
+
find content/ -type f -name "*.mdx" -exec sed -i '' 's/{{PROJECT_NAME}}/Mi Proyecto/g' {} +
|
|
97
|
+
find content/ -type f -name "*.mdx" -exec sed -i '' 's/{{DESCRIPTION}}/Mi descripción/g' {} +
|
|
98
|
+
|
|
99
|
+
# O edita manualmente cada archivo
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## 🏃 Desarrollo
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# Instalar dependencias
|
|
106
|
+
bun install
|
|
107
|
+
|
|
108
|
+
# Servidor de desarrollo
|
|
109
|
+
bun run dev
|
|
110
|
+
|
|
111
|
+
# Build para producción
|
|
112
|
+
bun run build
|
|
113
|
+
|
|
114
|
+
# Previsualizar build
|
|
115
|
+
bun run start
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Abre [http://localhost:3000](http://localhost:3000).
|
|
119
|
+
|
|
120
|
+
## 🚀 Deploy a GitHub Pages
|
|
121
|
+
|
|
122
|
+
### Pipeline Automático
|
|
123
|
+
|
|
124
|
+
El template incluye un workflow de GitHub Actions en `.github/workflows/deploy.yml` que:
|
|
125
|
+
|
|
126
|
+
1. ✅ Se ejecuta en cada push a `main`
|
|
127
|
+
2. ✅ Build del sitio con `bun run build`
|
|
128
|
+
3. ✅ Deploy automático a GitHub Pages
|
|
129
|
+
4. ✅ Soporte para rutas con `basePath`
|
|
130
|
+
|
|
131
|
+
### Configuración del Repositorio
|
|
132
|
+
|
|
133
|
+
1. **Activa GitHub Pages:**
|
|
134
|
+
- Ve a `Settings` > `Pages`
|
|
135
|
+
- Source: `GitHub Actions`
|
|
136
|
+
|
|
137
|
+
2. **Configura `BASE_PATH`:**
|
|
138
|
+
- Si tu repo es `usuario/mi-proyecto`, usa `/mi-proyecto`
|
|
139
|
+
- Si usas dominio custom, usa `/`
|
|
140
|
+
|
|
141
|
+
3. **Push a main:**
|
|
142
|
+
```bash
|
|
143
|
+
git add .
|
|
144
|
+
git commit -m "feat: initial docs"
|
|
145
|
+
git push origin main
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
4. **Espera el workflow:**
|
|
149
|
+
- Ve a la pestaña `Actions`
|
|
150
|
+
- Espera a que el workflow termine
|
|
151
|
+
- Tu documentación estará en `https://usuario.github.io/mi-proyecto/`
|
|
152
|
+
|
|
153
|
+
## 📁 Estructura del Proyecto
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
.
|
|
157
|
+
├── content/ # Tu documentación (MDX)
|
|
158
|
+
│ ├── docs/ # Versión en español
|
|
159
|
+
│ └── en/docs/ # Versión en inglés
|
|
160
|
+
├── content-template/ # Contenido placeholder (ejemplos)
|
|
161
|
+
├── messages/ # Traducciones de la UI
|
|
162
|
+
│ ├── es.json
|
|
163
|
+
│ └── en.json
|
|
164
|
+
├── src/
|
|
165
|
+
│ ├── app/ # Next.js app directory
|
|
166
|
+
│ ├── components/ # Componentes React reutilizables
|
|
167
|
+
│ ├── config/ # Configuración centralizada
|
|
168
|
+
│ │ └── site.config.ts # Configuración del sitio
|
|
169
|
+
│ └── lib/ # Utilidades y configuración
|
|
170
|
+
├── public/ # Archivos estáticos
|
|
171
|
+
├── .github/workflows/ # Workflows de CI/CD
|
|
172
|
+
│ └── deploy.yml # Deploy automático a GH Pages
|
|
173
|
+
├── .env.example # Template de variables de entorno
|
|
174
|
+
├── next.config.mjs # Configuración de Next.js
|
|
175
|
+
└── package.json
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## 🎨 Personalización
|
|
179
|
+
|
|
180
|
+
### Configuración del Sitio
|
|
181
|
+
|
|
182
|
+
Edita `src/config/site.config.ts` o usa variables de entorno:
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
// src/config/site.config.ts
|
|
186
|
+
export const siteConfig = {
|
|
187
|
+
name: process.env.PROJECT_NAME || 'Mi Documentación',
|
|
188
|
+
description: process.env.DESCRIPTION || 'Descripción',
|
|
189
|
+
author: process.env.AUTHOR || 'Autor',
|
|
190
|
+
// ...
|
|
191
|
+
};
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Logo
|
|
195
|
+
|
|
196
|
+
Opción 1: SVG en `.env.local`:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
LOGO_SVG='<svg viewBox="0 0 24 24">...</svg>'
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Opción 2: Texto:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
LOGO_TEXT="Mi Proyecto"
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Opción 3: Editar `src/lib/layout.shared.tsx` directamente.
|
|
209
|
+
|
|
210
|
+
### Colores
|
|
211
|
+
|
|
212
|
+
Edita `src/app/global.css`:
|
|
213
|
+
|
|
214
|
+
```css
|
|
215
|
+
:root {
|
|
216
|
+
--color-primary: #0088cc; /* Tu color primario */
|
|
217
|
+
--color-dark: #0f172a;
|
|
218
|
+
--color-light: #ffffff;
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## 📝 Escribir Contenido
|
|
223
|
+
|
|
224
|
+
### Formato MDX
|
|
225
|
+
|
|
226
|
+
Los archivos usan **frontmatter** obligatorio:
|
|
227
|
+
|
|
228
|
+
```mdx
|
|
229
|
+
---
|
|
230
|
+
title: Título de la Página
|
|
231
|
+
description: Descripción para SEO
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
# Contenido aquí
|
|
235
|
+
|
|
236
|
+
Puedes usar **markdown** estándar y componentes de React.
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Componentes Disponibles
|
|
240
|
+
|
|
241
|
+
```mdx
|
|
242
|
+
import { Callout, Steps, Tabs } from 'fumadocs-ui/components';
|
|
243
|
+
|
|
244
|
+
<Callout type="info">
|
|
245
|
+
Información importante
|
|
246
|
+
</Callout>
|
|
247
|
+
|
|
248
|
+
<Steps>
|
|
249
|
+
### Paso 1
|
|
250
|
+
### Paso 2
|
|
251
|
+
</Steps>
|
|
252
|
+
|
|
253
|
+
<Tabs items={['Tab 1', 'Tab 2']}>
|
|
254
|
+
<Tab>Contenido 1</Tab>
|
|
255
|
+
<Tab>Contenido 2</Tab>
|
|
256
|
+
</Tabs>
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## 🌍 i18n (Internacionalización)
|
|
260
|
+
|
|
261
|
+
### Agregar idiomas
|
|
262
|
+
|
|
263
|
+
1. Agrega el archivo de traducción en `messages/`:
|
|
264
|
+
|
|
265
|
+
```json
|
|
266
|
+
// messages/fr.json
|
|
267
|
+
{
|
|
268
|
+
"nav": {
|
|
269
|
+
"gettingStarted": "Pour Commencer"
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
2. Actualiza `.env.local`:
|
|
275
|
+
|
|
276
|
+
```bash
|
|
277
|
+
NEXT_PUBLIC_SUPPORTED_LOCALES=es,en,fr
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Traducir contenido
|
|
281
|
+
|
|
282
|
+
Crea la estructura equivalente en `content/fr/docs/`.
|
|
283
|
+
|
|
284
|
+
## 📚 Recursos
|
|
285
|
+
|
|
286
|
+
- [Fumadocs Documentation](https://fumadocs.vercel.app/)
|
|
287
|
+
- [Fumadocs UI Components](https://fumadocs.vercel.app/ui)
|
|
288
|
+
- [Next.js Documentation](https://nextjs.org/docs)
|
|
289
|
+
- [MDX Documentation](https://mdxjs.com/)
|
|
290
|
+
|
|
291
|
+
## 🐛 Troubleshooting
|
|
292
|
+
|
|
293
|
+
### Build falla
|
|
294
|
+
|
|
295
|
+
```bash
|
|
296
|
+
# Limpia cache
|
|
297
|
+
rm -rf .next out node_modules bun.lockb
|
|
298
|
+
bun install
|
|
299
|
+
bun run build
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### GitHub Pages retorna 404
|
|
303
|
+
|
|
304
|
+
- Verifica que `BASE_PATH` en `.env.local` coincida con tu repo name
|
|
305
|
+
- Activa GitHub Pages desde `GitHub Actions` (no desde `Deploy from a branch`)
|
|
306
|
+
- Espera unos minutos después del deploy
|
|
307
|
+
|
|
308
|
+
### Buscador no funciona
|
|
309
|
+
|
|
310
|
+
- Verifica que `src/app/api/search/route.ts` existe
|
|
311
|
+
- Rebuild después de agregar contenido nuevo
|
|
312
|
+
|
|
313
|
+
## 📄 Licencia
|
|
314
|
+
|
|
315
|
+
MIT
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
**Generado con [mks-fumadocs-template](https://github.com/mks2508/mks-fumadocs-template)**
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://biomejs.dev/schemas/2.2.0/schema.json",
|
|
3
|
+
"vcs": {
|
|
4
|
+
"enabled": true,
|
|
5
|
+
"clientKind": "git",
|
|
6
|
+
"useIgnoreFile": true
|
|
7
|
+
},
|
|
8
|
+
"files": {
|
|
9
|
+
"ignoreUnknown": true,
|
|
10
|
+
"includes": [
|
|
11
|
+
"**",
|
|
12
|
+
"!node_modules",
|
|
13
|
+
"!.next",
|
|
14
|
+
"!dist",
|
|
15
|
+
"!build",
|
|
16
|
+
"!.source"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"formatter": {
|
|
20
|
+
"enabled": true,
|
|
21
|
+
"indentStyle": "space",
|
|
22
|
+
"indentWidth": 2
|
|
23
|
+
},
|
|
24
|
+
"linter": {
|
|
25
|
+
"enabled": true,
|
|
26
|
+
"rules": {
|
|
27
|
+
"recommended": true
|
|
28
|
+
},
|
|
29
|
+
"domains": {
|
|
30
|
+
"next": "recommended",
|
|
31
|
+
"react": "recommended"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"assist": {
|
|
35
|
+
"actions": {
|
|
36
|
+
"source": {
|
|
37
|
+
"organizeImports": "on"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|