sdd-es 2.0.0 → 2.6.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/.claude/settings.json +29 -29
- package/.claude/settings.local.json +10 -0
- package/.claude-plugin/marketplace.json +10 -7
- package/.claude-plugin/plugin.json +59 -37
- package/.gitignore +20 -0
- package/.mcp.json +8 -0
- package/LICENSE +21 -0
- package/README.md +77 -40
- package/agents/architecture-designer.md +211 -0
- package/agents/arquitecto.md +16 -1
- package/agents/asesor-datos.md +15 -1
- package/agents/critico.md +37 -1
- package/agents/desarrollador-backend.md +3 -1
- package/agents/desarrollador-frontend.md +11 -16
- package/agents/disenador-api.md +13 -1
- package/agents/documentador.md +3 -1
- package/agents/investigador.md +3 -1
- package/agents/operaciones.md +3 -1
- package/agents/product-designer.md +268 -0
- package/agents/revisor.md +25 -1
- package/agents/seguridad.md +5 -1
- package/agents/tester.md +3 -1
- package/claude-hooks/agent-memory.js +288 -0
- package/claude-hooks/pre-tool-guard.js +61 -9
- package/cli/index.js +1 -2
- package/commands/sdd.adr.md +196 -0
- package/commands/sdd.analizar.md +23 -2
- package/commands/sdd.ayuda.md +13 -0
- package/commands/sdd.compliance.md +521 -0
- package/commands/sdd.configurar.md +34 -1
- package/commands/sdd.constitucion.md +198 -23
- package/commands/sdd.construir.md +210 -0
- package/commands/sdd.crear-mcp.md +2 -0
- package/commands/sdd.defect-report.md +134 -0
- package/commands/sdd.descubrir.md +19 -0
- package/commands/sdd.dise/303/261ar.md +188 -0
- package/commands/sdd.estado.md +120 -3
- package/commands/sdd.exportar.md +344 -0
- package/commands/sdd.implementar.md +272 -52
- package/commands/sdd.interpretar.md +239 -0
- package/commands/sdd.md +93 -4
- package/commands/sdd.optimizar-memoria.md +47 -0
- package/commands/sdd.optimizar.md +164 -0
- package/commands/sdd.planificar.md +64 -0
- package/commands/sdd.retro.md +74 -0
- package/commands/sdd.verificar.md +81 -0
- package/configuracion-ejemplo/.claude/CLAUDE.md +106 -0
- package/configuracion-ejemplo/sdd.config.yaml +10 -0
- package/craft/accessibility-baseline.md +216 -0
- package/craft/anti-ai-slop.md +158 -0
- package/craft/color.md +160 -0
- package/craft/typography.md +121 -0
- package/design-systems/bold-brutalist/DESIGN.md +239 -0
- package/design-systems/editorial-minimal/DESIGN.md +205 -0
- package/design-systems/neutral-modern/DESIGN.md +227 -0
- package/design-systems/vibrant-consumer/DESIGN.md +257 -0
- package/design-systems/warm-editorial/DESIGN.md +221 -0
- package/docs/AGENTES.md +4 -1
- package/docs/CASO-COMPLETO.md +206 -0
- package/docs/EJEMPLOS.md +61 -185
- package/docs/FABRICA.md +163 -115
- package/docs/INICIO-RAPIDO.md +27 -79
- package/docs/MEMORIA-Y-OBSERVABILIDAD.md +239 -0
- package/docs/MODELOS.md +3 -0
- package/docs/QUE-PASA-SI-FALLA.md +404 -0
- package/docs/README.md +43 -0
- package/docs/RELACION-CON-CLAUDE-CODE.md +38 -0
- package/docs/SEGURIDAD-PARA-NOTECNICOS.md +280 -0
- package/package.json +15 -10
- package/plantillas/job-story-mejorar-prompt.md +107 -0
- package/presets/enterprise.yaml +6 -0
- package/presets/lean.yaml +4 -0
- package/presets/startup.yaml +6 -0
- package/skills/adr-indexer/SKILL.md +181 -0
- package/skills/cache-audit/SKILL.md +163 -0
- package/skills/critica-diseno/SKILL.md +193 -0
- package/skills/descubrir-idea/SKILL.md +133 -0
- package/skills/effort-router/SKILL.md +128 -0
- package/skills/elegir-direccion/SKILL.md +184 -0
- package/skills/github-connect/IMPLEMENTATION-CHECKLIST.md +297 -0
- package/skills/github-connect/INDEX.md +223 -0
- package/skills/github-connect/INTEGRATION.md +361 -0
- package/skills/github-connect/QUICK-START.md +168 -0
- package/skills/github-connect/README.md +414 -0
- package/skills/github-connect/RESUMEN_IMPLEMENTACION.txt +374 -0
- package/skills/github-connect/SKILL.md +343 -0
- package/skills/github-connect/STRUCTURE.txt +252 -0
- package/skills/github-connect/example-config.yaml +41 -0
- package/skills/github-connect/github-connect.sh +419 -0
- package/skills/interpretar-idea/SKILL.md +254 -0
- package/skills/mejorar-prompt/SKILL.md +237 -0
- package/skills/memory-compactor/SKILL.md +68 -0
- package/skills/modo-guiado/SKILL.md +12 -2
- package/skills/mutation-detector/SKILL.md +134 -0
- package/skills/observabilidad-consumo/SKILL.md +164 -0
- package/skills/token-budget/SKILL.md +177 -0
- package/skills/vercel-deploy/00-START-HERE.txt +364 -0
- package/skills/vercel-deploy/CHECKLIST.md +205 -0
- package/skills/vercel-deploy/EXEC-SUMMARY.txt +322 -0
- package/skills/vercel-deploy/FLOW.txt +334 -0
- package/skills/vercel-deploy/INDEX.md +276 -0
- package/skills/vercel-deploy/INTEGRATION.md +328 -0
- package/skills/vercel-deploy/MANIFEST.md +310 -0
- package/skills/vercel-deploy/README.md +65 -0
- package/skills/vercel-deploy/SKILL.md +356 -0
- package/skills/vercel-deploy/deploy.sh +298 -0
- package/skills/vercel-deploy/estado.json.example +205 -0
- package/skills/vercel-deploy/skill.yaml +323 -0
- package/skills/vercel-deploy/vercel-deploy.sh +216 -0
- package/skills/wireframe-mvp/SKILL.md +157 -0
- package/docs/EJEMPLO-PRACTICA.md +0 -383
- package/mcp-figma/README.md +0 -158
- package/mcp-figma/package.json +0 -7
- package/mcp-figma/src/component-generator.js +0 -162
- package/mcp-figma/src/design-system-analyzer.js +0 -247
- package/mcp-figma/src/figma-client.js +0 -75
- package/mcp-figma/src/index.js +0 -114
- package/mcp-figma/src/mcp.js +0 -97
- package/mcp-figma/src/style-mapper.js +0 -85
- /package/skills/{compresion-tokens.md → compresion-tokens/SKILL.md} +0 -0
- /package/skills/{constitucion-constraint.md → constitucion-constraint/SKILL.md} +0 -0
- /package/skills/{deteccion-stack.md → deteccion-stack/SKILL.md} +0 -0
- /package/skills/{enrutador-agentes.md → enrutador-agentes/SKILL.md} +0 -0
- /package/skills/{gestion-estado.md → gestion-estado/SKILL.md} +0 -0
- /package/skills/{indexador.md → indexador/SKILL.md} +0 -0
- /package/skills/{validacion-spec.md → validacion-spec/SKILL.md} +0 -0
- /package/skills/{verificador-implementacion.md → verificador-implementacion/SKILL.md} +0 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Vercel Deploy Skill - Wrapper para invocación desde SDD-ES
|
|
3
|
+
# Uso: ./vercel-deploy.sh [--spec-id SPEC_ID] [--profile PROFILE]
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
# Colores
|
|
8
|
+
RED='\033[0;31m'
|
|
9
|
+
GREEN='\033[0;32m'
|
|
10
|
+
YELLOW='\033[1;33m'
|
|
11
|
+
BLUE='\033[0;34m'
|
|
12
|
+
NC='\033[0m' # No Color
|
|
13
|
+
|
|
14
|
+
# Valores por defecto
|
|
15
|
+
SPEC_ID="${spec_id:=}"
|
|
16
|
+
PROFILE="${profile:=experto}"
|
|
17
|
+
|
|
18
|
+
# Parsear argumentos
|
|
19
|
+
while [[ $# -gt 0 ]]; do
|
|
20
|
+
case $1 in
|
|
21
|
+
--spec-id) SPEC_ID="$2"; shift 2 ;;
|
|
22
|
+
--profile) PROFILE="$2"; shift 2 ;;
|
|
23
|
+
*) shift ;;
|
|
24
|
+
esac
|
|
25
|
+
done
|
|
26
|
+
|
|
27
|
+
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
28
|
+
echo -e "${BLUE}Vercel Deploy Skill${NC}"
|
|
29
|
+
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
30
|
+
echo ""
|
|
31
|
+
|
|
32
|
+
# 1. Validar token Vercel
|
|
33
|
+
if [ -z "$VERCEL_TOKEN" ]; then
|
|
34
|
+
echo -e "${RED}❌ VERCEL_TOKEN no configurado${NC}"
|
|
35
|
+
echo ""
|
|
36
|
+
echo "Para generar un token:"
|
|
37
|
+
echo "1. Ve a: https://vercel.com/account/tokens"
|
|
38
|
+
echo "2. Crea un nuevo token con scope 'full'"
|
|
39
|
+
echo "3. Copia el token y pégalo en la variable VERCEL_TOKEN"
|
|
40
|
+
echo ""
|
|
41
|
+
exit 1
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
echo -e "${BLUE}📋 Configuración:${NC}"
|
|
45
|
+
echo " Profile: $PROFILE"
|
|
46
|
+
echo " Spec ID: $SPEC_ID"
|
|
47
|
+
echo ""
|
|
48
|
+
|
|
49
|
+
# 2. Ejecutar pre-checks
|
|
50
|
+
echo -e "${BLUE}🔍 Ejecutando pre-checks...${NC}"
|
|
51
|
+
|
|
52
|
+
# Check: Token Vercel
|
|
53
|
+
echo -e "${GREEN}✅ Token Vercel presente${NC}"
|
|
54
|
+
|
|
55
|
+
# Check: Cambios no commiteados → auto-commit sin mostrar git comandos
|
|
56
|
+
if ! git diff-files --quiet || ! git diff-index --cached --quiet HEAD; then
|
|
57
|
+
echo -e "${YELLOW}⚠️ Guardando cambios automáticamente...${NC}"
|
|
58
|
+
git add -A
|
|
59
|
+
git commit -m "Auto-commit SDD-ES deploy ($(date +'%Y-%m-%d %H:%M:%S'))" 2>/dev/null || true
|
|
60
|
+
echo -e "${GREEN}✅ Cambios guardados${NC}"
|
|
61
|
+
else
|
|
62
|
+
echo -e "${GREEN}✅ Rama limpia${NC}"
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
# Check: Tests pasen (si existen)
|
|
66
|
+
if [ -f "package.json" ] && grep -q '"test"' package.json; then
|
|
67
|
+
echo -e "${BLUE}🧪 Ejecutando tests...${NC}"
|
|
68
|
+
if npm test 2>&1 | tail -5; then
|
|
69
|
+
echo -e "${GREEN}✅ Tests pasando${NC}"
|
|
70
|
+
else
|
|
71
|
+
echo -e "${YELLOW}⚠️ Tests con fallos o warnings${NC}"
|
|
72
|
+
fi
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Check: Sin secretos en código
|
|
76
|
+
echo -e "${BLUE}🔒 Verificando secretos...${NC}"
|
|
77
|
+
if grep -r "PRIVATE_KEY\|PASSWORD\|SECRET" --include="*.js" --include="*.ts" . 2>/dev/null | grep -v node_modules | grep -v ".git"; then
|
|
78
|
+
echo -e "${YELLOW}⚠️ Se encontraron posibles secretos en el código${NC}"
|
|
79
|
+
else
|
|
80
|
+
echo -e "${GREEN}✅ Sin secretos detectados${NC}"
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
echo ""
|
|
84
|
+
|
|
85
|
+
# 3. Auto-generar vercel.json si no existe
|
|
86
|
+
if [ ! -f "vercel.json" ]; then
|
|
87
|
+
echo -e "${BLUE}📝 Generando vercel.json...${NC}"
|
|
88
|
+
|
|
89
|
+
# Detectar tipo de proyecto
|
|
90
|
+
if [ -f "package.json" ]; then
|
|
91
|
+
# Node.js project
|
|
92
|
+
cat > vercel.json << 'EOF'
|
|
93
|
+
{
|
|
94
|
+
"version": 2,
|
|
95
|
+
"buildCommand": "npm run build || npm run dev",
|
|
96
|
+
"installCommand": "npm install",
|
|
97
|
+
"env": {
|
|
98
|
+
"NODE_ENV": "production"
|
|
99
|
+
},
|
|
100
|
+
"regions": ["sfo1"],
|
|
101
|
+
"functions": {
|
|
102
|
+
"api/**/*.js": {
|
|
103
|
+
"maxDuration": 10
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"redirects": [
|
|
107
|
+
{
|
|
108
|
+
"source": "/",
|
|
109
|
+
"destination": "/index.html"
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
EOF
|
|
114
|
+
echo -e "${GREEN}✅ vercel.json creado${NC}"
|
|
115
|
+
else
|
|
116
|
+
echo -e "${YELLOW}⚠️ No se pudo detectar tipo de proyecto${NC}"
|
|
117
|
+
fi
|
|
118
|
+
fi
|
|
119
|
+
|
|
120
|
+
echo ""
|
|
121
|
+
|
|
122
|
+
# 4. Desplegar a Vercel
|
|
123
|
+
echo -e "${BLUE}🚀 Desplegando a Vercel...${NC}"
|
|
124
|
+
|
|
125
|
+
# Usar Vercel CLI si está disponible, sino instrucciones
|
|
126
|
+
if command -v vercel &> /dev/null; then
|
|
127
|
+
echo -e "${BLUE}Usando Vercel CLI...${NC}"
|
|
128
|
+
|
|
129
|
+
# Deploy
|
|
130
|
+
if vercel --token "$VERCEL_TOKEN" --prod 2>&1 | tee /tmp/vercel-deploy.log; then
|
|
131
|
+
echo -e "${GREEN}✅ Deploy completado${NC}"
|
|
132
|
+
|
|
133
|
+
# Obtener URL
|
|
134
|
+
VERCEL_URL=$(grep "https://" /tmp/vercel-deploy.log | tail -1 | awk '{print $NF}')
|
|
135
|
+
if [ -n "$VERCEL_URL" ]; then
|
|
136
|
+
echo -e "${GREEN} URL: $VERCEL_URL${NC}"
|
|
137
|
+
fi
|
|
138
|
+
else
|
|
139
|
+
echo -e "${RED}❌ Error en el deploy${NC}"
|
|
140
|
+
exit 1
|
|
141
|
+
fi
|
|
142
|
+
else
|
|
143
|
+
echo -e "${YELLOW}⚠️ Vercel CLI no instalado${NC}"
|
|
144
|
+
echo ""
|
|
145
|
+
echo "Para instalar:"
|
|
146
|
+
echo " npm i -g vercel"
|
|
147
|
+
echo ""
|
|
148
|
+
echo "Luego ejecuta:"
|
|
149
|
+
echo " vercel --token \$VERCEL_TOKEN --prod"
|
|
150
|
+
echo ""
|
|
151
|
+
exit 1
|
|
152
|
+
fi
|
|
153
|
+
|
|
154
|
+
echo ""
|
|
155
|
+
|
|
156
|
+
# 5. Health check (3 reintentos)
|
|
157
|
+
echo -e "${BLUE}🏥 Ejecutando health checks...${NC}"
|
|
158
|
+
|
|
159
|
+
MAX_RETRIES=3
|
|
160
|
+
RETRY=0
|
|
161
|
+
HEALTH_OK=false
|
|
162
|
+
|
|
163
|
+
while [ $RETRY -lt $MAX_RETRIES ]; do
|
|
164
|
+
RETRY=$((RETRY + 1))
|
|
165
|
+
echo -e "${BLUE}Intento $RETRY/$MAX_RETRIES...${NC}"
|
|
166
|
+
|
|
167
|
+
sleep 5 # Esperar a que Vercel estabilice
|
|
168
|
+
|
|
169
|
+
if curl -s -o /dev/null -w "%{http_code}" "$VERCEL_URL" | grep -q "200"; then
|
|
170
|
+
echo -e "${GREEN}✅ Health check pasó${NC}"
|
|
171
|
+
HEALTH_OK=true
|
|
172
|
+
break
|
|
173
|
+
else
|
|
174
|
+
echo -e "${YELLOW}⚠️ Health check falló, reintentando...${NC}"
|
|
175
|
+
fi
|
|
176
|
+
done
|
|
177
|
+
|
|
178
|
+
if [ "$HEALTH_OK" = false ]; then
|
|
179
|
+
echo -e "${RED}❌ Health check falló después de $MAX_RETRIES intentos${NC}"
|
|
180
|
+
echo ""
|
|
181
|
+
echo "Tu código está publicado en Vercel, pero parece haber un problema."
|
|
182
|
+
echo "Verifica en: https://vercel.com/dashboard"
|
|
183
|
+
exit 1
|
|
184
|
+
fi
|
|
185
|
+
|
|
186
|
+
echo ""
|
|
187
|
+
|
|
188
|
+
# 6. Guardar configuración
|
|
189
|
+
echo -e "${BLUE}💾 Guardando estado del deploy...${NC}"
|
|
190
|
+
|
|
191
|
+
mkdir -p .sdd
|
|
192
|
+
|
|
193
|
+
cat > .sdd/.vercel-deploy.json << EOF
|
|
194
|
+
{
|
|
195
|
+
"deployed": true,
|
|
196
|
+
"deployment_date": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
|
|
197
|
+
"app_url": "$VERCEL_URL",
|
|
198
|
+
"profile": "$PROFILE",
|
|
199
|
+
"spec_id": "$SPEC_ID"
|
|
200
|
+
}
|
|
201
|
+
EOF
|
|
202
|
+
|
|
203
|
+
echo -e "${GREEN}✅ Configuración guardada${NC}"
|
|
204
|
+
|
|
205
|
+
echo ""
|
|
206
|
+
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
207
|
+
echo -e "${GREEN}✅ ¡Despliegue exitoso!${NC}"
|
|
208
|
+
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
209
|
+
echo ""
|
|
210
|
+
echo "Tu app está en vivo:"
|
|
211
|
+
echo -e " ${GREEN}$VERCEL_URL${NC}"
|
|
212
|
+
echo ""
|
|
213
|
+
echo "Puedes compartir este link con quien quieras."
|
|
214
|
+
echo ""
|
|
215
|
+
|
|
216
|
+
exit 0
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Genera un wireframe HTML de la pantalla P0 del MVP. Usa el DESIGN.md activo para colores, tipografía y estilo. Guarda el HTML en .sdd/diseño/ con la tool Write. Respeta {PLUGIN_DIR}/craft/anti-ai-slop.md.
|
|
3
|
+
model: sonnet
|
|
4
|
+
allowed-tools: Read, Write, Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: Wireframe MVP
|
|
8
|
+
|
|
9
|
+
## Propósito
|
|
10
|
+
|
|
11
|
+
Generar un **wireframe HTML funcional** de la pantalla más importante del MVP (P0). El wireframe es visual, usa los tokens del DESIGN.md activo, y el usuario puede verlo antes de que exista una línea de código real.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Lo que lees antes de empezar
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Pantalla P0
|
|
19
|
+
cat .sdd/product-design.json | node -e "
|
|
20
|
+
const d = JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));
|
|
21
|
+
const p0 = d.core_screens.find(s => s.priority === 'P0');
|
|
22
|
+
console.log(JSON.stringify(p0, null, 2));
|
|
23
|
+
console.log('DESIGN:', d.design_direction);
|
|
24
|
+
"
|
|
25
|
+
|
|
26
|
+
# DESIGN.md activo
|
|
27
|
+
DESIGN_PATH=$(cat .sdd/estado.json | node -e "
|
|
28
|
+
const d = JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));
|
|
29
|
+
console.log(d.design_system_path || '{PLUGIN_DIR}/design-systems/neutral-modern/DESIGN.md');
|
|
30
|
+
")
|
|
31
|
+
cat "$DESIGN_PATH"
|
|
32
|
+
|
|
33
|
+
# Reglas anti-slop
|
|
34
|
+
cat "{PLUGIN_DIR}/craft/anti-ai-slop.md" | head -80
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Lo que produces
|
|
40
|
+
|
|
41
|
+
Un HTML completo, en un solo archivo, guardado con la tool `Write` en `.sdd/diseño/wireframe-pantalla-principal.html`:
|
|
42
|
+
|
|
43
|
+
```html
|
|
44
|
+
<!DOCTYPE html>
|
|
45
|
+
<html lang="es">
|
|
46
|
+
<head>
|
|
47
|
+
<meta charset="UTF-8">
|
|
48
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
49
|
+
<title>[product.name] — [screen.name]</title>
|
|
50
|
+
<style>
|
|
51
|
+
/* Variables del DESIGN.md activo */
|
|
52
|
+
:root {
|
|
53
|
+
--bg-base: [valor del DESIGN.md];
|
|
54
|
+
--text-primary: [valor del DESIGN.md];
|
|
55
|
+
--accent: [valor del DESIGN.md];
|
|
56
|
+
/* ... resto de variables */
|
|
57
|
+
}
|
|
58
|
+
/* Estilos de componentes del DESIGN.md */
|
|
59
|
+
/* ... */
|
|
60
|
+
</style>
|
|
61
|
+
</head>
|
|
62
|
+
<body>
|
|
63
|
+
<!-- Wireframe de [screen.name] -->
|
|
64
|
+
<!-- Usando los elementos definidos en screen.elements[] -->
|
|
65
|
+
</body>
|
|
66
|
+
</html>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Reglas de generación
|
|
72
|
+
|
|
73
|
+
### 1. Fidelidad al DESIGN.md
|
|
74
|
+
|
|
75
|
+
- Los valores CSS **deben coincidir** con el DESIGN.md activo (colores, fuentes, border-radius, sombras)
|
|
76
|
+
- Para las fuentes: si el DESIGN.md usa Google Fonts, añadir el `<link>` correspondiente
|
|
77
|
+
- Para bold-brutalist: `border-radius: 0`, offset shadows, UPPERCASE en headings
|
|
78
|
+
- Para warm-editorial: Playfair Display para headings, bordes casi cuadrados
|
|
79
|
+
- Para neutral-modern: Inter, border-radius 6–8px, sombras mínimas
|
|
80
|
+
|
|
81
|
+
### 2. Contenido del wireframe
|
|
82
|
+
|
|
83
|
+
- Usar **copy real derivado del IR** — el nombre del producto, las features del mvp
|
|
84
|
+
- **No usar lorem ipsum** ni "Feature One" ni placeholders genéricos
|
|
85
|
+
- Los datos de ejemplo deben ser coherentes con el dominio (si es peluquería, usar "10:00 - Ana García", no "Item 1")
|
|
86
|
+
|
|
87
|
+
### 3. Estructura del HTML
|
|
88
|
+
|
|
89
|
+
- Un solo archivo (no imports externos excepto Google Fonts)
|
|
90
|
+
- CSS en `<style>` inline
|
|
91
|
+
- No usar frameworks externos (no Tailwind, no Bootstrap)
|
|
92
|
+
- JavaScript solo si la pantalla lo requiere (ej: toggle de tab, modal básico)
|
|
93
|
+
- El wireframe debe verse bien en 1280px de ancho (desktop first para web)
|
|
94
|
+
|
|
95
|
+
### 4. Elementos a incluir
|
|
96
|
+
|
|
97
|
+
Genera los elementos definidos en `screen.elements[]` del ProductDesign:
|
|
98
|
+
- `nav` → barra de navegación con el nombre del producto + links principales
|
|
99
|
+
- `hero` → sección principal con el value proposition
|
|
100
|
+
- `form` → formulario con los campos relevantes al dominio
|
|
101
|
+
- `table` → tabla con datos de ejemplo del dominio
|
|
102
|
+
- `card` → tarjeta(s) con información
|
|
103
|
+
- `list` → lista de items
|
|
104
|
+
- `button` → botón con el label del CTA real
|
|
105
|
+
- `modal` → modal (puede ser cerrado por defecto)
|
|
106
|
+
|
|
107
|
+
### 5. Guardar con Write
|
|
108
|
+
|
|
109
|
+
Usa la tool `Write` para guardar el HTML directamente:
|
|
110
|
+
- Ruta destino: `.sdd/diseño/wireframe-pantalla-principal.html`
|
|
111
|
+
- Crear el directorio `.sdd/diseño/` si no existe (con `Bash`: `mkdir -p .sdd/diseño`)
|
|
112
|
+
- Después de guardar, abrir en el navegador: `start .sdd/diseño/wireframe-pantalla-principal.html` (Windows) / `open ...` (Mac) / `xdg-open ...` (Linux)
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Checklist anti-AI-slop (OBLIGATORIO antes de finalizar)
|
|
117
|
+
|
|
118
|
+
Antes de guardar el HTML, verifica:
|
|
119
|
+
|
|
120
|
+
- [ ] ¿Los colores son exactamente los del DESIGN.md? (sin indigo default `#6366F1`)
|
|
121
|
+
- [ ] ¿No hay gradientes de 2 colores en diagonal sobre el hero?
|
|
122
|
+
- [ ] ¿Los iconos son SVG o texto — no emojis?
|
|
123
|
+
- [ ] ¿La fuente es la del DESIGN.md (no sistema default si el DESIGN.md especifica una)?
|
|
124
|
+
- [ ] ¿No hay métricas inventadas ("10x más rápido")?
|
|
125
|
+
- [ ] ¿El copy es específico del dominio (no "Feature One", "Lorem ipsum")?
|
|
126
|
+
- [ ] ¿No hay el patrón "card con borde izquierdo de color + métrica"?
|
|
127
|
+
|
|
128
|
+
Si alguno falla, corregir antes de guardar.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Guardar el output
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
mkdir -p .sdd/diseño
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Luego usar la tool `Write` con ruta `.sdd/diseño/wireframe-pantalla-principal.html` y el HTML completo como contenido.
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
# Abrir en navegador tras guardar
|
|
142
|
+
start .sdd/diseño/wireframe-pantalla-principal.html # Windows
|
|
143
|
+
# open .sdd/diseño/wireframe-pantalla-principal.html # macOS
|
|
144
|
+
# xdg-open .sdd/diseño/wireframe-pantalla-principal.html # Linux
|
|
145
|
+
|
|
146
|
+
echo "✅ Wireframe guardado en .sdd/diseño/wireframe-pantalla-principal.html"
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Notas
|
|
152
|
+
|
|
153
|
+
- El wireframe es un **boceto funcional**, no el diseño final
|
|
154
|
+
- El objetivo es que el usuario vea "su producto" antes de que exista código
|
|
155
|
+
- Después del wireframe, la skill `critica-diseno` evalúa y refina automáticamente
|
|
156
|
+
- El HTML generado puede usarse como base para el frontend real (los tokens CSS son reutilizables)
|
|
157
|
+
- El HTML se abre directamente en el navegador del sistema — no requiere servidor
|