Files
egutierrez 0883155432 feat(design-system): DESIGN_SYSTEM.md + prompts + extract-design command
- frontend/DESIGN_SYSTEM.md: contrato del @fn_library (regla suprema para
  Claude Design y agentes).
- frontend/design_prompts/: 11 plantillas de prompt (onboarding, dashboard,
  crud, detail, settings, auth, error, custom, handoff_integrate) +
  questionnaire numerado para arranque rapido.
- .claude/commands/extract-design.md: workflow de 10 pasos para extraer
  componentes nuevos y mejoras desde exports "standalone" de Claude Design
  al registry, sync al espejo fn-design-system y push a gitea+github.
- .claude/scripts/extract_design_bundle.py: decodificador del bundle
  (base64+gzip en manifest, nombra JSX por heuristica de header).
- .gitignore: ignorar subrepos/*/ (el mirror fn-design-system es repo
  propio con remotes dataforge/fn-design-system + gutierenmanuel/fn-design-system).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 20:46:00 +02:00

9.3 KiB

Questionnaire — arranque rápido para prompts de Claude Design

Cuando el usuario pida un prompt (ej. "quiero un dashboard", "prompt para crud de clientes", "hazme una settings"), el agente NO le pregunta todo en abierto. Le hace el cuestionario numerado de abajo, una tanda de preguntas cada vez, con opciones 1) 2) 3) 4) 5) para que responda rápido con los números correspondientes (1,3,2,4 o similar).

Reglas del flujo

  1. Detecta el template que aplica (dashboard / crud / detail / settings / auth / error / custom).
  2. Pregunta en tandas de 4-6 preguntas numeradas. No todo de golpe.
  3. Si una pregunta es texto libre, márcala como (abierta); el usuario contesta con texto en vez de número.
  4. Si una respuesta necesita opción fuera del menú, el usuario escribe "otra: <texto>" y continúa.
  5. Al final de todas las tandas, recapitulas las respuestas en una tabla y generas el prompt de Claude Design rellenado, listo para copiar.
  6. Si el usuario responde con un número fuera de rango o ambiguo, repite la pregunta con el rango válido resaltado.

Formato de respuesta del usuario

Puede contestar:

  • 1,2,3,1,2 — una respuesta por pregunta en el orden.
  • 1) 2 2) 3 3) 1 — explícito por número de pregunta.
  • Mezcla libre con números y texto: 1, "dashboard ventas", 3, 4, 2.

Template: dashboard

Tanda 1 — Contexto

Q1. Tipo de dashboard:

  1. Monitoreo técnico (latencias, errores, uptime)
  2. Business analytics (ventas, conversiones, ingresos)
  3. Contenido / tráfico (usuarios, pageviews, engagement)
  4. Operacional (inventario, órdenes, tareas)
  5. Otro (abierta — describe)

Q2. Título del dashboard (abierta).

Q3. Subtítulo / contexto temporal:

  1. "Tiempo real"
  2. "Últimas 24h"
  3. "Últimos 7 días"
  4. "Último mes"
  5. Configurable por usuario (date range picker)

Q4. Audiencia principal:

  1. Operador técnico
  2. Ejecutivo / C-level
  3. Cliente externo
  4. Equipo interno mixto

Tanda 2 — KPIs

Q5. Número de KPIs (fila superior):

  1. 2 2) 3 3) 4 4) 5 5) 6

Q6. Estilo de deltas:

  1. Porcentaje con flecha (▲ +12%)
  2. Valor absoluto (+123)
  3. Mixto (algunos % otros absolutos)
  4. Sin deltas

Q7. ¿Incluyen sparkline inline el KPI?

  1. Sí, todos los KPIs
  2. Solo los KPIs principales (1-2)
  3. No

Tanda 3 — Charts

Q8. Número de charts:

  1. 2 2) 3 3) 4 4) 5 5) 6

Q9. Mix de tipos de chart:

  1. Solo line (time-series)
  2. line + bar (evolución + comparación)
  3. line + bar + pie (variado)
  4. area stacked + line (distribución + serie)
  5. Otro (abierta — describe la combinación)

Q10. ¿Hay un chart principal (span 2, full width)?

  1. Sí, el primero
  2. Sí, el último
  3. Varios con span 2
  4. Todos span 1 (grid uniforme)

Tanda 4 — Header y controles

Q11. Acciones en el header:

  1. Solo Refresh
  2. Refresh + Export
  3. Refresh + Date range picker
  4. Refresh + Export + Date range picker
  5. Ninguna

Q12. Color scheme:

  1. Dark (por defecto)
  2. Light
  3. Sigue la preferencia del sistema

Q13. ¿Va dentro de FnAppShell (con header + navbar)?

  1. Sí — especifica qué items lleva el navbar (abierta si eliges esto)
  2. No — la página ocupa pantalla completa sin shell

Template: crud

Tanda 1 — Entidad

Q1. Nombre de la entidad (abierta, PascalCase. Ej. "Customer", "DeployTarget").

Q2. ¿Cuántas columnas visibles en la tabla?

  1. 3 2) 4 3) 5 4) 6 5) 7+

Q3. Lista las columnas (abierta, separadas por coma) — para cada una indica si es texto / número / fecha / badge / acción.

Tanda 2 — Acciones

Q4. Acciones por fila:

  1. Solo Edit
  2. Edit + Delete
  3. Edit + Delete + Duplicate
  4. Edit + Delete + "Ver detalle"
  5. Custom (abierta)

Q5. Acciones del header:

  1. Solo "Add"
  2. "Add" + "Import"
  3. "Add" + "Export"
  4. "Add" + "Import" + "Export"
  5. Bulk actions (select rows + apply)

Q6. ¿Modal o página separada para create/edit?

  1. Modal (Dialog)
  2. Drawer lateral (Sheet)
  3. Página completa aparte

Tanda 3 — Form

Q7. Número de campos en el form (1-5, 6-10, 11+):

  1. 1-5 2) 6-10 3) 11+

Q8. Lista los campos (abierta — nombre + tipo cada uno).

Q9. ¿Validación?

  1. Básica (required only)
  2. Completa (email, rangos, regex)
  3. Async (verificar contra API)
  4. Sin validación

Tanda 4 — Lista

Q10. Filtros sobre la tabla:

  1. Solo SearchBar global
  2. SearchBar + SimpleSelect (por categoría)
  3. SearchBar + Chips (tags activos)
  4. Filtros complejos (multi-select + date range)
  5. Sin filtros

Q11. Paginación:

  1. Pagination componente (numbers)
  2. Infinite scroll
  3. "Load more" button
  4. Sin paginación (máximo 100 filas)

Q12. ¿Sorting en columnas?

  1. Sí, en todas
  2. Solo en 2-3 principales
  3. No

Template: detail

Tanda 1 — Entidad

Q1. Nombre de la entidad (abierta).

Q2. Avatar del header:

  1. Iniciales generadas
  2. Imagen (URL)
  3. Icono Tabler (abierta — cuál)
  4. Sin avatar

Q3. Badge lateral:

  1. Status (success/warning/destructive)
  2. Tipo / categoría (secondary)
  3. Ambos
  4. Sin badge

Tanda 2 — Contenido

Q4. Número de campos en el grid:

  1. 3 2) 4-6 3) 7-10 4) 11+

Q5. Lista los campos (abierta — label + tipo).

Q6. Número de tabs:

  1. 1 (sin tabs) 2) 2 3) 3 4) 4 5) 5+

Q7. Tabs (abierta — lista de keys + labels + tipo de contenido de cada una).

Tanda 3 — Extras

Q8. ¿Timeline de actividad?

  1. Sí, vertical bajo los tabs
  2. Sí, en un tab propio
  3. Sí, en sidebar derecho
  4. No

Q9. Acciones del header:

  1. Solo Edit
  2. Edit + Delete
  3. Edit + Delete + Duplicate
  4. Edit + Delete + Share
  5. Custom (abierta)

Template: settings

Tanda 1 — Estructura

Q1. Número de secciones (items del nav lateral):

  1. 2-3 2) 4-5 3) 6-8 4) 9+

Q2. Lista las secciones (abierta — key + label + icono Tabler sugerido para cada una).

Q3. Modo de guardado:

  1. Botones "Cancelar" + "Guardar" al pie de cada sección
  2. Autosave con toast de confirmación
  3. Un solo "Guardar" global

Tanda 2 — Campos

Q4. Tipos de campos más comunes:

  1. Solo texto y toggles
  2. Texto + toggle + select
  3. Todo lo anterior + file upload (avatar, etc.)
  4. Todo + campos complejos (2FA, sessions, API keys)

Q5. ¿Hay sección de seguridad? (password, 2FA, sessions, api keys)

  1. Sí 2) No

Q6. ¿Hay sección de facturación? (plan, tarjetas, historial)

  1. Sí 2) No

Template: auth

Tanda 1 — Modo

Q1. Modo:

  1. Solo login
  2. Solo register
  3. Toggle login/register

Q2. Nombre de la app (abierta) (aparece en el header).

Q3. Logo / marca:

  1. Icono Tabler (abierta — cuál)
  2. SVG inline
  3. Texto (nombre de la app)
  4. Sin logo

Tanda 2 — Campos

Q4. Campos en register extra a email/password:

  1. Solo full_name
  2. full_name + organization
  3. full_name + organization + role
  4. Ninguno (solo email + password)
  5. Otro (abierta)

Q5. Password strength meter:

  1. Sí 2) No

Q6. Remember me:

  1. Sí 2) No

Tanda 3 — Social

Q7. Proveedores OAuth (puedes elegir varios — ej. 1,2):

  1. Google
  2. GitHub
  3. GitLab
  4. Microsoft
  5. SSO corporativo
  6. Ninguno (solo email/password)

Q8. Terms & conditions checkbox en register:

  1. Sí, required 2) No

Template: error

Q1. Código:

  1. 404 2) 500 3) 403 4) 503 5) Custom (abierta)

Q2. Tono del mensaje:

  1. Formal y breve
  2. Amigable / humorístico
  3. Técnico (para devs)

Q3. Icono Tabler:

  1. IconBug (error genérico)
  2. IconServerOff (backend down)
  3. IconLock (permission denied)
  4. IconSearchOff (not found)
  5. Otro (abierta)

Q4. Acciones:

  1. Solo "Volver al inicio"
  2. "Volver al inicio" + "Contactar soporte"
  3. "Volver al inicio" + "Reintentar"
  4. Las tres

Q5. ¿Mostrar request-id / trace-id para debugging?

  1. Sí 2) No

Template: custom

Q1. Descripción del objetivo de la pantalla (abierta — 1-2 frases).

Q2. ¿Dentro de FnAppShell?

  1. Sí, con header + navbar
  2. Sí, solo header
  3. No, pantalla completa

Q3. Primitivas principales (puedes marcar varias con coma):

  1. Card + KpiCard
  2. DataTable
  3. Charts (line/bar/area/pie)
  4. Command (combobox cmdk)
  5. GraphContainer (sigma.js)
  6. Timeline
  7. Dropzone (upload)
  8. Stepper
  9. Otro (abierta)

Q4. Estados a cubrir:

  1. Loading + Empty + Error
  2. Loading + Empty
  3. Solo loading
  4. Ninguno (datos siempre presentes)

Q5. Interactividad:

  1. Solo lectura
  2. Formulario / edición
  3. Drag & drop
  4. Realtime (SSE / WebSocket)
  5. Mix (abierta)

Q6. Data mock (abierta — pega JSON o describe).


Salida final del agente

Cuando el usuario haya respondido todas las tandas, el agente:

  1. Recapitula las respuestas en una tabla Markdown | # | Pregunta | Respuesta |.
  2. Genera el prompt completo de Claude Design con todos los placeholders rellenos, tomando el template correspondiente de frontend/design_prompts/{template}.md.
  3. Entrega el prompt final en un bloque de código copiable.
  4. Pregunta al final: "¿Copio al portapapeles / abres Claude Design?" o "¿Ajustamos algo antes?".