@bacano/sdk 1.1.10 → 1.1.13
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/CONTENT_TYPE_MANAGEMENT.md +401 -0
- package/README.md +25 -4
- package/content-management-types.d.ts +260 -0
- package/content-management.cjs +199 -0
- package/content-management.d.ts +14 -0
- package/content-management.js +178 -0
- package/package.json +6 -1
- package/skills/bacano-figma-web/SKILL.md +26 -9
- package/skills/bacano-figma-web/references/bacano-mapping.md +3 -3
- package/skills/bacano-figma-web/references/content-workflow.md +62 -18
- package/skills/bacano-figma-web/references/extraction-contract.md +3 -0
- package/skills/bacano-figma-web/references/implementation-quality.md +67 -0
- package/skills/bacano-figma-web/references/visual-validation.md +4 -0
|
@@ -13,7 +13,9 @@ autenticación, marketing o Content por fuera de `@bacano/sdk`.
|
|
|
13
13
|
|
|
14
14
|
Antes de extraer el diseño, identificar:
|
|
15
15
|
|
|
16
|
-
- Web informativa o
|
|
16
|
+
- Web informativa, tienda virtual o sitio híbrido. Si permite una compra
|
|
17
|
+
completa, aplicar también los contratos de tienda a su superficie
|
|
18
|
+
transaccional.
|
|
17
19
|
- Enlace al archivo, página, sección o frame de Figma.
|
|
18
20
|
- Rutas que se implementarán y sus frames desktop/mobile.
|
|
19
21
|
- Repositorio y cascarón Bacano que se reutilizarán.
|
|
@@ -74,11 +76,12 @@ pnpm exec bacano-figma-web validate-snapshot .bacano/designs/<proyecto>/manifest
|
|
|
74
76
|
|
|
75
77
|
## 4. Mapear a Bacano antes de programar
|
|
76
78
|
|
|
77
|
-
Leer [references/bacano-mapping.md](references/bacano-mapping.md)
|
|
78
|
-
[references/content-workflow.md](references/content-workflow.md)
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
Leer [references/bacano-mapping.md](references/bacano-mapping.md),
|
|
80
|
+
[references/content-workflow.md](references/content-workflow.md) y
|
|
81
|
+
[references/implementation-quality.md](references/implementation-quality.md).
|
|
82
|
+
Preparar una matriz ruta → frame → componente → fuente de datos → Content →
|
|
83
|
+
responsive → preview → estado, y determinar si el trabajo comienza desde
|
|
84
|
+
Figma, desde Bacano Content o desde ambas fuentes.
|
|
82
85
|
|
|
83
86
|
- Reutilizar el starter, tokens y componentes existentes.
|
|
84
87
|
- Consumir Bacano y Content mediante `@bacano/sdk`.
|
|
@@ -93,9 +96,19 @@ Si Content todavía no existe, generar un blueprint de entrega y fixtures
|
|
|
93
96
|
temporales fieles al contenido visible de Figma. Los fixtures deben usar el
|
|
94
97
|
mismo view model que consumen los componentes y entrar por un único adaptador;
|
|
95
98
|
nunca repartir datos de prueba dentro de la UI. Si Content ya existe, mapearlo
|
|
96
|
-
sin sobrescribir estructuras o entradas.
|
|
97
|
-
|
|
98
|
-
|
|
99
|
+
sin sobrescribir estructuras o entradas. Si el usuario pide materializar el
|
|
100
|
+
blueprint, leer la sección de automatización de
|
|
101
|
+
[references/content-workflow.md](references/content-workflow.md) y el contrato
|
|
102
|
+
`CONTENT_TYPE_MANAGEMENT.md` incluido en `@bacano/sdk`. Crear o modificar tipos,
|
|
103
|
+
componentes, grupos, listas y entradas únicamente mediante el acceso temporal
|
|
104
|
+
y los scopes oficiales. Inventariar esos recursos antes de crear otros y
|
|
105
|
+
preparar entradas en borrador por defecto; la media permanece en el
|
|
106
|
+
backoffice y publicar requiere permiso y aprobación explícitos.
|
|
107
|
+
|
|
108
|
+
Al proponer keys nuevas, resolver primero el idioma según
|
|
109
|
+
`CONTENT_TYPE_MANAGEMENT.md`: instrucción explícita, convención existente y
|
|
110
|
+
después idioma principal del website. No traducir ni renombrar contratos ya
|
|
111
|
+
utilizados por el storefront.
|
|
99
112
|
|
|
100
113
|
Antes de modificar código, indicar brevemente qué rutas y componentes se
|
|
101
114
|
implementarán y qué decisiones de diseño son inferidas.
|
|
@@ -110,6 +123,10 @@ Trabajar por página o conjunto pequeño de secciones:
|
|
|
110
123
|
4. Integración Bacano real.
|
|
111
124
|
5. Comparación visual y correcciones.
|
|
112
125
|
|
|
126
|
+
No dar una página por validada únicamente porque compila. Comparar estructura,
|
|
127
|
+
contenido, responsive e interacciones del corte antes de continuar y registrar
|
|
128
|
+
lo pendiente cuando la revisión visual quede a cargo del usuario.
|
|
129
|
+
|
|
113
130
|
No añadir paquetes, fuentes, iconos o assets si el proyecto ya ofrece un
|
|
114
131
|
equivalente. Descargar assets mediante la fuente Figma autorizada; no incrustar
|
|
115
132
|
URLs temporales ni construir transformaciones de Storage manualmente.
|
|
@@ -7,9 +7,9 @@ negocio.
|
|
|
7
7
|
|
|
8
8
|
Antes de programar, registrar por ruta:
|
|
9
9
|
|
|
10
|
-
| Ruta | Frame | Componente | Fuente | Responsive | Estado |
|
|
11
|
-
| --- | --- | --- | --- | --- | --- |
|
|
12
|
-
| `/` | Home desktop/mobile | `Hero` | Content | 2 frames | pendiente |
|
|
10
|
+
| Ruta | Frame | Componente | Fuente | Content | Responsive | Preview | Estado |
|
|
11
|
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
12
|
+
| `/` | Home desktop/mobile | `Hero` | Content | `hero_inicio` | 2 frames | activa | pendiente |
|
|
13
13
|
|
|
14
14
|
Fuentes posibles: Content, catálogo estático, live state, public config,
|
|
15
15
|
checkout, auth u otra operación documentada del SDK.
|
|
@@ -19,12 +19,30 @@ Antes de crear campos o fixtures, asignar cada valor a una fuente:
|
|
|
19
19
|
No duplicar en Content información que ya tiene una fuente funcional. Un valor
|
|
20
20
|
visible en Figma no implica que sea editorial.
|
|
21
21
|
|
|
22
|
+
## Modelar sin extremos
|
|
23
|
+
|
|
24
|
+
No convertir una página extensa en un único tipo gigante ni crear un componente
|
|
25
|
+
para cada bloque visual. Separar una sección cuando tenga ciclo editorial,
|
|
26
|
+
responsable, reutilización o repetición propios. Crear un componente compartido
|
|
27
|
+
solo cuando coincidan tanto la estructura como el significado y la abstracción
|
|
28
|
+
reduzca duplicación real.
|
|
29
|
+
|
|
30
|
+
- Usar grupos para organizar entradas relacionadas por dominio o página.
|
|
31
|
+
- Usar repetibles para pasos, integrantes, preguntas, tarjetas y otras
|
|
32
|
+
colecciones homogéneas.
|
|
33
|
+
- Mantener directamente en el tipo los campos de un bloque exclusivo y simple.
|
|
34
|
+
- Crear primero listas y componentes realmente compartidos; después los tipos
|
|
35
|
+
consumidores.
|
|
36
|
+
- No hacer depender la UI del shape crudo de Content: fixture y mapper real
|
|
37
|
+
deben converger en el mismo view model.
|
|
38
|
+
|
|
22
39
|
## 2. Elegir el punto de partida
|
|
23
40
|
|
|
24
41
|
### Figma primero
|
|
25
42
|
|
|
26
43
|
1. Extraer el contenido público visible y sus assets autorizados.
|
|
27
|
-
2.
|
|
44
|
+
2. Resolver el idioma y proponer tipos, keys, campos y entradas en
|
|
45
|
+
`content-blueprint.json` siguiendo `CONTENT_TYPE_MANAGEMENT.md`.
|
|
28
46
|
3. Crear fixtures locales que implementen el view model de la página.
|
|
29
47
|
4. Implementar y validar el diseño contra esos fixtures.
|
|
30
48
|
5. Entregar el blueprint al equipo de Content para crearlo en Bacano.
|
|
@@ -66,22 +84,22 @@ Estructura recomendada:
|
|
|
66
84
|
"route": "/",
|
|
67
85
|
"sections": [
|
|
68
86
|
{
|
|
69
|
-
"sectionKey": "
|
|
87
|
+
"sectionKey": "hero-inicio",
|
|
70
88
|
"figmaNodeId": "1:20",
|
|
71
89
|
"component": "HomeHero",
|
|
72
90
|
"ownership": "content",
|
|
73
|
-
"contentTypeKey": "
|
|
74
|
-
"entryKey": "
|
|
91
|
+
"contentTypeKey": "hero_inicio",
|
|
92
|
+
"entryKey": "hero-principal-inicio",
|
|
75
93
|
"status": "missing",
|
|
76
94
|
"fields": [
|
|
77
95
|
{
|
|
78
|
-
"key": "
|
|
96
|
+
"key": "titulo",
|
|
79
97
|
"type": "text",
|
|
80
98
|
"required": true,
|
|
81
99
|
"sampleValue": "Compra para cada etapa"
|
|
82
100
|
}
|
|
83
101
|
],
|
|
84
|
-
"fixture": "fixtures/
|
|
102
|
+
"fixture": "fixtures/hero-inicio.json"
|
|
85
103
|
}
|
|
86
104
|
]
|
|
87
105
|
}
|
|
@@ -92,7 +110,9 @@ Estructura recomendada:
|
|
|
92
110
|
El blueprint es una propuesta y una evidencia de coordinación, no una orden de
|
|
93
111
|
escritura. No incluir IDs internos innecesarios, secretos, datos personales ni
|
|
94
112
|
respuestas crudas de GraphQL. Mantener keys estables y registrar cambios que
|
|
95
|
-
rompan el contrato.
|
|
113
|
+
rompan el contrato. Las propiedades técnicas del formato del blueprint
|
|
114
|
+
permanecen en inglés; los valores que representan tipos, componentes, campos y
|
|
115
|
+
entradas definidos por la empresa siguen el idioma resuelto para el proyecto.
|
|
96
116
|
|
|
97
117
|
## 4. Fixtures temporales
|
|
98
118
|
|
|
@@ -129,10 +149,13 @@ Entregar una tabla legible con:
|
|
|
129
149
|
- Estado y responsable.
|
|
130
150
|
- Dependencias entre componentes, listas y entradas.
|
|
131
151
|
|
|
132
|
-
El equipo de Content
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
152
|
+
El equipo de Content puede crear o ajustar la estructura desde Bacano. Si el
|
|
153
|
+
usuario autoriza que el agente materialice el blueprint, usar exclusivamente
|
|
154
|
+
`@bacano/sdk/content-management` y el token temporal generado desde **Conectar
|
|
155
|
+
agente**. Confirmar la empresa y los scopes, inventariar primero, crear
|
|
156
|
+
componentes antes de sus consumidores y trabajar inicialmente en borrador. La
|
|
157
|
+
skill puede preparar entradas cuando el usuario conceda
|
|
158
|
+
`content_entries:manage`; no carga media ni publica sin el scope específico.
|
|
136
159
|
|
|
137
160
|
## 6. Cambio a Bacano real
|
|
138
161
|
|
|
@@ -149,10 +172,31 @@ depende de contenido temporal, reportar `❌ NO LISTO` con las rutas y secciones
|
|
|
149
172
|
afectadas. Los fixtures pueden conservarse como datos de pruebas unitarias o
|
|
150
173
|
visuales siempre que no entren en el bundle o loader de producción.
|
|
151
174
|
|
|
152
|
-
## 7. Automatización
|
|
153
|
-
|
|
154
|
-
La
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
175
|
+
## 7. Automatización administrativa
|
|
176
|
+
|
|
177
|
+
La gestión de tipos pertenece al entrypoint separado
|
|
178
|
+
`@bacano/sdk/content-management`, no al cliente público del storefront. Antes de
|
|
179
|
+
escribir:
|
|
180
|
+
|
|
181
|
+
1. Pedir al usuario que genere un acceso temporal de 15, 30 o 60 minutos.
|
|
182
|
+
2. Guardarlo solo en el entorno local del proceso del agente.
|
|
183
|
+
3. Ejecutar `getContext()`, comprobar sus `scopes`, y después `listTypes()`,
|
|
184
|
+
`listGroups()`, `listOptionLists()` y `getReferences()`.
|
|
185
|
+
4. Mostrar el plan y esperar aprobación cuando altere estructuras existentes.
|
|
186
|
+
5. Crear primero listas y componentes, luego tipos consumidores, y mantener las
|
|
187
|
+
estructuras nuevas en borrador hasta validarlas.
|
|
188
|
+
6. Si se concedió `content_entries:manage`, inventariar entradas por tipo, key y
|
|
189
|
+
locale; crear las faltantes en borrador y actualizar únicamente con
|
|
190
|
+
`expectedUpdatedAt`.
|
|
191
|
+
7. No fusionar por nombres, no usar HTML crudo y no relacionar URLs remotas. La
|
|
192
|
+
media debe existir en Bacano y pertenecer a la empresa autorizada.
|
|
193
|
+
8. Para archivar o eliminar tipos, entradas, grupos o listas, inspeccionar
|
|
194
|
+
dependencias y confirmar nuevamente. Una actualización de lista debe enviar
|
|
195
|
+
todos los elementos que deben permanecer, incluidos sus IDs existentes.
|
|
196
|
+
9. Publicar o modificar una entrada publicada solo con
|
|
197
|
+
`content_entries:publish` y una aprobación humana explícita.
|
|
198
|
+
|
|
199
|
+
Nunca exponer el token en el navegador, commit, blueprint, salida de consola o
|
|
200
|
+
chat. Nunca convertir el blueprint en una importación implícita ni usar GraphQL
|
|
201
|
+
directo. La carga de media permanece bajo gestión editorial en Bacano hasta que
|
|
202
|
+
exista el scope y endpoint administrativo oficial.
|
|
@@ -87,6 +87,9 @@ Estado de página: `pending`, `extracted`, `implemented` o `validated`.
|
|
|
87
87
|
|
|
88
88
|
Cada página requiere `route`, `name`, `status` y al menos un frame desktop o
|
|
89
89
|
mobile con `nodeId` o `url`. No guardar secretos ni respuestas MCP completas.
|
|
90
|
+
Antes de implementar, comprobar que las rutas no apuntan accidentalmente al
|
|
91
|
+
mismo frame o `nodeId`. Una reutilización intencional debe quedar registrada en
|
|
92
|
+
`assumptions`.
|
|
90
93
|
|
|
91
94
|
## Estrategia de consultas
|
|
92
95
|
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Calidad de implementación desde Figma
|
|
2
|
+
|
|
3
|
+
Aplicar estas reglas al construir la interfaz. Son criterios de resultado, no
|
|
4
|
+
una obligación de usar una librería concreta.
|
|
5
|
+
|
|
6
|
+
## Responsive e inferencias
|
|
7
|
+
|
|
8
|
+
Si Figma no incluye un frame móvil, construir una adaptación mobile first y
|
|
9
|
+
registrarla como inferencia. Conservar jerarquía, contenido, orden semántico y
|
|
10
|
+
acciones principales; apilar columnas cuando corresponda y evitar overflow
|
|
11
|
+
horizontal. Verificar al menos móvil, tablet y escritorio.
|
|
12
|
+
|
|
13
|
+
No convertir automáticamente toda colección en carrusel. Usarlo únicamente
|
|
14
|
+
cuando mejore la exploración y asegurar scroll táctil, teclado, controles
|
|
15
|
+
accesibles, dimensiones estables y pausa durante la interacción. Respetar
|
|
16
|
+
`prefers-reduced-motion` cuando exista autoplay o movimiento.
|
|
17
|
+
|
|
18
|
+
## Componentes e interacción
|
|
19
|
+
|
|
20
|
+
Inspeccionar dependencias y componentes del proyecto antes de añadir paquetes.
|
|
21
|
+
No imponer HeroUI, Embla, Motion, CSS Modules u otra librería; reutilizar el
|
|
22
|
+
sistema existente y pedir autorización antes de introducir una dependencia
|
|
23
|
+
visual relevante.
|
|
24
|
+
|
|
25
|
+
Todo control interactivo necesita estado de hover cuando aplique,
|
|
26
|
+
`focus-visible`, teclado, contraste y área táctil suficiente. Usar
|
|
27
|
+
`aria-current="page"` en la navegación activa y no comunicar estados solo con
|
|
28
|
+
color. Las animaciones no deben cambiar el layout final, dejar contenido útil
|
|
29
|
+
oculto sin JavaScript ni ejecutarse contra la preferencia de movimiento
|
|
30
|
+
reducido.
|
|
31
|
+
|
|
32
|
+
## Perfil de exportación estática
|
|
33
|
+
|
|
34
|
+
Cuando el hosting y el proyecto estén definidos como export estático, comprobar
|
|
35
|
+
la configuración efectiva del framework. En Next.js suele incluir
|
|
36
|
+
`output: "export"`, `trailingSlash: true` y una estrategia de imágenes
|
|
37
|
+
compatible con exportación estática.
|
|
38
|
+
|
|
39
|
+
Materializar durante el build contenido, rutas, metadata, sitemap y JSON-LD.
|
|
40
|
+
Las rutas dinámicas editoriales deben enumerar todas las entradas publicadas y
|
|
41
|
+
fallar de forma explícita si el snapshot esperado está vacío o incompleto.
|
|
42
|
+
|
|
43
|
+
No introducir Route Handlers, API Routes, Server Actions, middleware, ISR,
|
|
44
|
+
`force-dynamic` ni secretos de servidor en un proyecto que debe producir solo
|
|
45
|
+
archivos estáticos. Esta prohibición no aplica automáticamente a un storefront
|
|
46
|
+
híbrido o SSR: primero clasificar su arquitectura.
|
|
47
|
+
|
|
48
|
+
Mantener un único bootstrap de configuración pública y un cliente Bacano por
|
|
49
|
+
worker o árbol. Reutilizar esa misma información para páginas, metadata,
|
|
50
|
+
sitemap, JSON-LD y provider; no consultar cada ruta por separado si existe un
|
|
51
|
+
snapshot oficial compartido.
|
|
52
|
+
|
|
53
|
+
## Preview y rutas editoriales
|
|
54
|
+
|
|
55
|
+
Mantener una allowlist finita de patrones editoriales. Los índices pueden ser
|
|
56
|
+
explícitos y los slugs de detalle pueden derivarse de las entradas publicadas;
|
|
57
|
+
no aceptar una ruta arbitraria solo porque coincide con una cadena. Preview
|
|
58
|
+
reutiliza componentes y mappers de producción, permanece fuera del sitemap y
|
|
59
|
+
no habilita funciones transaccionales o marketing.
|
|
60
|
+
|
|
61
|
+
## Diagnóstico antes de cambiar código
|
|
62
|
+
|
|
63
|
+
Un `ORIGIN_NOT_ALLOWED` o un `403` al resolver la configuración durante el
|
|
64
|
+
build suele indicar que el origen utilizado no está autorizado para el website.
|
|
65
|
+
Verificar dominio canónico, orígenes permitidos y ambiente antes de alterar el
|
|
66
|
+
cliente SDK. Una advertencia aislada sobre ausencia de caché del build no prueba
|
|
67
|
+
por sí sola que el storefront esté defectuoso.
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Validar por cortes para evitar corregir 70 secciones al final.
|
|
4
4
|
|
|
5
|
+
Para cada corte, distinguir `implementado`, `validado`, `pendiente de revisión
|
|
6
|
+
humana`, `no aplica` y `bloqueado`. Si el usuario conserva la validación visual,
|
|
7
|
+
no convertir su ausencia en una aprobación automática.
|
|
8
|
+
|
|
5
9
|
## Evidencia mínima por página
|
|
6
10
|
|
|
7
11
|
- URL/ruta implementada.
|