Communitygithub.com

hamzacakmakk/frontend-architect

Planifica o reestructura la arquitectura frontend: jerarquía de componentes, estructura de carpetas, gestión de estado, obtención de datos, estrategia de estilos y presupuestos de rendimiento para React, Next.js, Vue, Svelte y aplicaciones similares. Úsalo cuando el usuario pregunte cómo estructurar un frontend, dividir componentes, gestionar el estado, organizar una base de código en crecimiento o establecer una base de UI escalable.

¿Qué es frontend-architect?

Frontend Architect es una habilidad profesional para desarrolladores que actúa como un arquitecto senior de frontend, ayudando a planificar y estructurar aplicaciones desde cero o a reestructurar bases de código existentes para que escalen de manera ordenada. Está diseñada para frameworks modernos como React, Next.js, Vue, Svelte y similares. La habilidad guía al usuario a través de un proceso metódico: primero analiza el contexto existente (framework, modo de renderizado, fuentes de datos, etc.), luego clasifica el estado en cinco categorías (servidor, URL, formulario, local UI y compartido) y asigna a cada una la herramienta adecuada (TanStack Query, Zustand, React Hook Form, etc.). Además, propone una estructura de carpetas basada en características (features), aísla componentes en capas (primitivas, patrones, características, rutas), define una estrategia de estilos basada en tokens y establece presupuestos de rendimiento y accesibilidad automatizados. El resultado final es un resumen ejecutivo con el árbol de carpetas, la jerarquía de componentes, el enfoque de obtención de datos y un plan de migración en pasos pequeños y entregables, destacando siempre los trade-offs y lo que se ha omitido deliberadamente.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hamzacakmakk/claude-frontend-skills/tree/HEAD/skills/frontend-architect

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Arquitecto Frontend

Diseña la estructura más simple que seguirá teniendo sentido cuando la base de código sea cinco veces más grande. Prefiere patrones aburridos y bien entendidos. Cada capa que agregues debe eliminar más complejidad de la que introduce.

1. Comprender antes de estructurar

  • Lee la aplicación existente: framework y enrutador, modo de renderizado (SPA, SSR, RSC, estático), fuentes de datos, librerías de estado actuales, enfoque de estilos, pruebas, herramientas de construcción.
  • Identifica los flujos de usuario principales y los datos que necesita cada uno. La arquitectura sigue a los datos.
  • Toma nota de las restricciones: tamaño del equipo, necesidades de SEO, necesidades offline, necesidades en tiempo real, presupuesto de rendimiento.

2. Componentes: una sola responsabilidad cada uno

Sigue el enfoque que la documentación de React llama "Thinking in React":

  1. Divide la UI en una jerarquía; cada componente hace una sola cosa. Si un componente necesita una descripción larga, divídelo.
  2. Construye primero una versión estática a partir de los datos.
  3. Encuentra el estado mínimo. Cualquier cosa que se pueda derivar de props u otro estado se calcula, no se almacena.
  4. Coloca cada parte del estado en el propietario común más cercano de los componentes que lo usan.
  5. Pasa callbacks hacia abajo; los datos fluyen en una sola dirección.

Capas de componentes:

  • Primitivas: Button, Input, Select, Dialog, Tooltip. Accesibles, estilizadas con tokens, sin lógica de negocio. Prefiere una librería headless (Radix, React Aria, Headless UI, Ark) en lugar de gestionar el foco a mano.
  • Patrones: FormField, DataTable, EmptyState, PageHeader. Componen primitivas.
  • Características: InvoiceList, BillingSettings. Poseen la obtención de datos y las reglas de negocio para un dominio.
  • Rutas/páginas: componen características; manejan parámetros, layout y límites de carga.

Composición sobre configuración: prefiere children/slots en lugar de componentes con veinte props booleanas.

3. Estado: clasifícalo primero

TipoDónde vive
Estado del servidor (datos de APIs)Una librería de caché: TanStack Query, SWR, RTK Query, o loaders del framework / componentes servidor. Nunca se copia en un store global.
Estado de URL (filtros, pestañas, paginación, elemento seleccionado)La URL (parámetros de búsqueda, parámetros de ruta).
Estado de formularioLa librería de formularios (React Hook Form, Conform, formularios nativos + acciones) o inputs no controlados.
Estado local de UI (abierto/cerrado, hover)Estado del componente.
Estado compartido de cliente (sesión, preferencias, borradores multi-paso)Context para valores de baja frecuencia; Zustand/Jotai/Redux solo cuando muchos componentes distantes lo actualizan a menudo.

Actualizaciones optimistas para mutaciones de bajo riesgo, con reversión en caso de error. Mutaciones idempotentes para cualquier cosa que un doble clic pueda repetir.

4. Estructura de carpetas

Organiza por característica (feature), con una capa compartida delgada:

src/
  app/ o routes/        # enrutado, layouts, límites de carga/error
  features/
    billing/
      components/
      api.ts             # consultas y mutaciones para este dominio
      hooks.ts
      types.ts
      index.ts           # superficie pública de la característica
  components/ui/         # primitivas y patrones (sistema de diseño)
  lib/                   # helpers independientes del framework, cliente de API
  styles/                # tokens.css, reseteos globales

Reglas: las características importan de components/ui y lib, nunca de los internos de otra característica (pasan a través de su index.ts). No hay un vertedero de utils.ts; nombra los helpers por lo que hacen.

5. Estrategia de estilos

  • Los tokens como propiedades personalizadas de CSS son la única fuente de verdad (consulta el skill frontend-design en tokens.md o el skill design-system-generator).
  • Elige un enfoque de estilos para la base de código: Tailwind mapeado a tokens, CSS Modules, o un sistema CSS-in-JS sin runtime / atómico (vanilla-extract, StyleX, Panda). Evita CSS-in-JS con runtime en aplicaciones sensibles al rendimiento o renderizadas en servidor.
  • Mantén la especificidad plana; las variantes son props, no anulaciones en cascada.

6. Presupuestos de rendimiento y calidad

  • Establece presupuestos: LCP < 2.5s, INP < 200ms, CLS < 0.1 en un teléfono de gama media; presupuesto de JS por ruta.
  • Divide el código por ruta; carga perezosa de componentes pesados, que están debajo del pliegue o que solo requieren interacción.
  • Reserva espacio para contenido asíncrono; virtualiza listas largas; mueve trabajo pesado fuera del hilo principal.
  • Imágenes: formatos modernos, tamaños explícitos, srcset responsivo, prioridad solo para la imagen LCP.
  • Fuentes: auto-alojadas, subconjunto, precargadas con moderación, font-display: swap.
  • La accesibilidad es arquitectura: las primitivas gestionan el foco y ARIA para que las características no puedan equivocarse. Añade comprobaciones automatizadas (axe en pruebas, eslint-plugin-jsx-a11y) al CI.
  • Límites de error por ruta y por widget independiente; un fallo nunca vacía la aplicación.

7. Salida

Entrega: un resumen breve de la arquitectura (stack, modo de renderizado, clasificación del estado), el árbol de carpetas, la jerarquía de componentes para los flujos principales, el enfoque de obtención de datos y un plan de migración en pasos pequeños y entregables si se reestructura una aplicación existente. Menciona los trade-offs y lo que deliberadamente no agregaste.

Lista de verificación

  • Cada parte del estado tiene un único propietario y un único tipo (servidor, URL, formulario, local, compartido).
  • Los datos del servidor se almacenan en caché, no se copian en stores globales.
  • Las características están aisladas detrás de un index público; las primitivas no tienen lógica de negocio.
  • Un solo enfoque de estilos, impulsado por tokens.
  • Existen división de código por ruta y límites de carga/error.
  • Los presupuestos de rendimiento y las comprobaciones de accesibilidad están definidos y automatizados cuando sea posible.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Skills relacionados