Config Shared Web
Overview
Executa bootstrap deterministico do shell web compartilhado no frontend (apps/web por default) em duas camadas:
- camada base (
templates/base): Tailwind CSS v4, estrutura do projeto, rotas, modulo examples, src/shared (context/hook/template), internacionalizacao e validador de formularios;
- camada de biblioteca de UI (
templates/ui-libraries/<library>): dependencias, setup da biblioteca e componentes basicos.
Adapter default: shadcn.
Workflow
- Definir parametros com o usuario:
--theme <name-or-hex> (default: fuchsia)
--mode <dark|light> (default: dark)
--ui-library <name> (default: shadcn)
- Executar script principal:
node .agents/skills/config-shared-web/scripts/init-shared-web.mjs --theme fuchsia --mode dark --ui-library shadcn
- Validar estrutura base criada:
src/app/(private)
src/app/(public)
src/app/(private)/example
src/modules/examples
src/shared/components/ui/empty-dashboard-state.tsx
src/shared/components/ui/sidebar-menu.component.tsx
src/shared/i18n
src/shared/components/form/validator
src/shared/context
src/shared/hooks
src/shared/template
src/shared/template/app-shell.component.tsx
public/illustrations/empty-dashboard-dark.svg
- Validar estrutura da biblioteca de UI selecionada:
- para
shadcn: components.json, src/shared/components/ui, src/shared/lib/class-name.util.ts
- Validar dependencias:
- base:
react-hook-form (usado pelo validador em src/shared/components/form/validator)
- shadcn: dependencias Radix/lucide/sonner/cva/clsx/tailwind-merge +
shadcn (dev)
- Confirmar layout admin com:
- sidebar parametrizavel via prop
sidebar
- menu colapsado exibindo apenas icones no desktop
- hover/focus no icone colapsado exibindo label do item
- topbar com toggle
- dropdown de usuario com logout
- comportamento responsivo (mobile via drawer)
- Registrar execucao no
.log/skills.log (automatico no script).
Commands
Bootstrap completo com Shadcn em modo dark (padrao):
node .agents/skills/config-shared-web/scripts/init-shared-web.mjs --theme fuchsia --mode dark --ui-library shadcn
Escolher outro tema e modo light:
node .agents/skills/config-shared-web/scripts/init-shared-web.mjs --theme '#22c55e' --mode light --ui-library shadcn
Executar sem instalar dependencias (somente arquivos):
node .agents/skills/config-shared-web/scripts/init-shared-web.mjs --ui-library shadcn --skip-install
Simular alteracoes sem gravar arquivos:
node .agents/skills/config-shared-web/scripts/init-shared-web.mjs --ui-library shadcn --dry-run
O que o script garante
Camada base (independente da biblioteca de UI)
- Grupos de rota:
src/app/(private) com layout administrativo
src/app/(private)/dashboard como entrada do shell
src/app/(public) com layout boxed/centralizado
src/app/(private)/example/* para catalogo de exemplos
- Estrutura compartilhada base:
src/shared/context
src/shared/hooks
src/shared/template
src/shared/i18n
src/shared/components/form/validator
- Estrutura de modulo funcional:
src/modules/examples/data
src/modules/examples/components
src/modules/examples/pages
- Estrutura compartilhada de UI:
src/shared/components/ui/empty-dashboard-state.tsx (estado vazio de dashboard)
src/shared/components/ui/sidebar-menu.component.tsx (padrao de navegacao lateral com suporte a colapso e tooltip)
- Compatibilidade de shell para integracoes que esperam
AppShell:
src/shared/template/app-shell.component.tsx (alias de AdminShell)
- Assets de ilustracao para dashboard vazio:
public/illustrations/empty-dashboard-dark.svg
- Tema base em
src/app/globals.css com token dinamico de cor primaria (--theme).
- Classe de modo no
body controlada por --mode (dark ou light).
- Dependencia runtime obrigatoria:
react-hook-form.
Camada UI library (adapter)
- Seleciona adapter por
--ui-library.
- Permite estender a skill sem mexer no scaffold base.
- Adapter
shadcn aplica:
- dependencias runtime e dev necessarias;
components.json;
src/shared/lib/class-name.util.ts;
src/shared/components/ui/*, incluindo componentes compostos (metric-card, table-card, pagination-controls, delete-confirmation-dialog e correlatos).
Comportamento de shell
- Sidebar desktop colapsavel (somente icones no estado colapsado).
- Em mobile, navegacao lateral exibida somente via drawer.
- Logo no sidebar com icone + texto (texto oculto quando colapsado).
- Topbar com toggle, notificacoes e dropdown de usuario.
- Rodape global com copyright.
- Dashboard privado inicial renderiza
EmptyDashboardState com ilustracao SVG.
EmptyDashboardState deve aceitar moduleName?: string; sem prop, manter "Dashboard Vazio"; com prop, mostrar "Dashboard " com destaque visual no nome.
SidebarMenu padroniza menu de navegacao com item principal opcional, grupos por secao e suporte a menu colapsado com tooltip.
Notes
- Script idempotente: pode ser reexecutado para reconciliar arquivos.
- Antes de escrever arquivos, o script valida contrato minimo de templates (base + adapter) e falha com erro explicito se faltar arquivo requerido.
- Ao detectar integracao existente com modulos externos em arquivos de
src/app (ex.: @/modules/auth, @/modules/accounts), o script preserva esses arquivos em vez de sobrescrever com template base.
- Se o frontend configurado em
skills.config.json nao existir, o script falha com erro explicito.
- Para adicionar nova biblioteca no futuro:
- criar adapter em
scripts/ui-libraries/<nome>.mjs;
- criar templates em
templates/ui-libraries/<nome>.
- Consultar
references/shared-web-contract.md para o contrato completo dos arquivos gerados.
- Consultar
../skills-standards.md para diretrizes globais de padronizacao.
Risk Logging Guardrails
- Registrar fatos de execucao em
.log/skills.log com marcador no inicio da linha.
- Marcadores minimos esperados:
[CMD], [FILE_CREATE], [FILE_UPDATE], [FILE_DELETE], [DIR_CREATE], [RISK], [FAIL], [AI].
- Sempre registrar
[RISK] quando houver sobrescrita, exclusao, rename/move, ou fallback forcado em arquivos/pastas.
- Toda falha inesperada deve gerar
[FAIL] com descricao factual curta do evento.
- Operacoes de terminal e alteracoes de arquivos devem passar pelos utilitarios compartilhados em
../utils para manter rastreabilidade consistente.
1---2name: config-shared-web3description: Inicializar e padronizar a camada web compartilhada para apps admin em Next.js com Tailwind CSS v4, scaffold base agnostico de biblioteca de componentes, grupos de rotas `app/(private)` e `app/(public)`, estrutura `src/shared` (incluindo i18n e form validator), modulo `src/modules/examples` e adapter de UI selecionavel (default: Shadcn). Usar quando o pedido envolver bootstrap/rebootstrap do shell web, criacao de layout dashboard reutilizavel e setup inicial de componentes/paginas de referencia.4---56# Config Shared Web78## Overview910Executa bootstrap deterministico do shell web compartilhado no frontend (`apps/web` por default) em duas camadas:1112- camada base (`templates/base`): **Tailwind CSS v4**, estrutura do projeto, rotas, modulo examples, `src/shared` (context/hook/template), internacionalizacao e validador de formularios;13- camada de biblioteca de UI (`templates/ui-libraries/<library>`): dependencias, setup da biblioteca e componentes basicos.1415Adapter default: `shadcn`.1617## Workflow18191. Definir parametros com o usuario:20 - `--theme <name-or-hex>` (default: `fuchsia`)21 - `--mode <dark|light>` (default: `dark`)22 - `--ui-library <name>` (default: `shadcn`)232. Executar script principal:24 - `node .agents/skills/config-shared-web/scripts/init-shared-web.mjs --theme fuchsia --mode dark --ui-library shadcn`253. Validar estrutura base criada:26 - `src/app/(private)`27 - `src/app/(public)`28 - `src/app/(private)/example`29 - `src/modules/examples`30 - `src/shared/components/ui/empty-dashboard-state.tsx`31 - `src/shared/components/ui/sidebar-menu.component.tsx`32 - `src/shared/i18n`33 - `src/shared/components/form/validator`34 - `src/shared/context`35 - `src/shared/hooks`36 - `src/shared/template`37 - `src/shared/template/app-shell.component.tsx`38 - `public/illustrations/empty-dashboard-dark.svg`394. Validar estrutura da biblioteca de UI selecionada:40 - para `shadcn`: `components.json`, `src/shared/components/ui`, `src/shared/lib/class-name.util.ts`415. Validar dependencias:42 - base: `react-hook-form` (usado pelo validador em `src/shared/components/form/validator`)43 - shadcn: dependencias Radix/lucide/sonner/cva/clsx/tailwind-merge + `shadcn` (dev)446. Confirmar layout admin com:45 - sidebar parametrizavel via prop `sidebar`46 - menu colapsado exibindo apenas icones no desktop47 - hover/focus no icone colapsado exibindo label do item48 - topbar com toggle49 - dropdown de usuario com logout50 - comportamento responsivo (mobile via drawer)517. Registrar execucao no `.log/skills.log` (automatico no script).5253## Commands5455Bootstrap completo com Shadcn em modo dark (padrao):5657```bash58node .agents/skills/config-shared-web/scripts/init-shared-web.mjs --theme fuchsia --mode dark --ui-library shadcn59```6061Escolher outro tema e modo light:6263```bash64node .agents/skills/config-shared-web/scripts/init-shared-web.mjs --theme '#22c55e' --mode light --ui-library shadcn65```6667Executar sem instalar dependencias (somente arquivos):6869```bash70node .agents/skills/config-shared-web/scripts/init-shared-web.mjs --ui-library shadcn --skip-install71```7273Simular alteracoes sem gravar arquivos:7475```bash76node .agents/skills/config-shared-web/scripts/init-shared-web.mjs --ui-library shadcn --dry-run77```7879## O que o script garante8081### Camada base (independente da biblioteca de UI)8283- Grupos de rota:84 - `src/app/(private)` com layout administrativo85 - `src/app/(private)/dashboard` como entrada do shell86 - `src/app/(public)` com layout boxed/centralizado87 - `src/app/(private)/example/*` para catalogo de exemplos88- Estrutura compartilhada base:89 - `src/shared/context`90 - `src/shared/hooks`91 - `src/shared/template`92 - `src/shared/i18n`93 - `src/shared/components/form/validator`94- Estrutura de modulo funcional:95 - `src/modules/examples/data`96 - `src/modules/examples/components`97 - `src/modules/examples/pages`98- Estrutura compartilhada de UI:99 - `src/shared/components/ui/empty-dashboard-state.tsx` (estado vazio de dashboard)100 - `src/shared/components/ui/sidebar-menu.component.tsx` (padrao de navegacao lateral com suporte a colapso e tooltip)101- Compatibilidade de shell para integracoes que esperam `AppShell`:102 - `src/shared/template/app-shell.component.tsx` (alias de `AdminShell`)103- Assets de ilustracao para dashboard vazio:104 - `public/illustrations/empty-dashboard-dark.svg`105- Tema base em `src/app/globals.css` com token dinamico de cor primaria (`--theme`).106- Classe de modo no `body` controlada por `--mode` (`dark` ou `light`).107- Dependencia runtime obrigatoria: `react-hook-form`.108109### Camada UI library (adapter)110111- Seleciona adapter por `--ui-library`.112- Permite estender a skill sem mexer no scaffold base.113- Adapter `shadcn` aplica:114 - dependencias runtime e dev necessarias;115 - `components.json`;116 - `src/shared/lib/class-name.util.ts`;117 - `src/shared/components/ui/*`, incluindo componentes compostos (`metric-card`, `table-card`, `pagination-controls`, `delete-confirmation-dialog` e correlatos).118119### Comportamento de shell120121- Sidebar desktop colapsavel (somente icones no estado colapsado).122- Em mobile, navegacao lateral exibida somente via drawer.123- Logo no sidebar com icone + texto (texto oculto quando colapsado).124- Topbar com toggle, notificacoes e dropdown de usuario.125- **Rodape** global com copyright.126- Dashboard privado inicial renderiza `EmptyDashboardState` com ilustracao SVG.127- `EmptyDashboardState` deve aceitar `moduleName?: string`; sem prop, manter "Dashboard Vazio"; com prop, mostrar "Dashboard <moduleName>" com destaque visual no nome.128- `SidebarMenu` padroniza menu de navegacao com item principal opcional, grupos por secao e suporte a menu colapsado com tooltip.129130## Notes131132- Script idempotente: pode ser reexecutado para reconciliar arquivos.133- Antes de escrever arquivos, o script valida contrato minimo de templates (base + adapter) e falha com erro explicito se faltar arquivo requerido.134- Ao detectar integracao existente com modulos externos em arquivos de `src/app` (ex.: `@/modules/auth`, `@/modules/accounts`), o script preserva esses arquivos em vez de sobrescrever com template base.135- Se o frontend configurado em `skills.config.json` nao existir, o script falha com erro explicito.136- Para adicionar nova biblioteca no futuro:137 - criar adapter em `scripts/ui-libraries/<nome>.mjs`;138 - criar templates em `templates/ui-libraries/<nome>`.139- Consultar `references/shared-web-contract.md` para o contrato completo dos arquivos gerados.140- Consultar `../skills-standards.md` para diretrizes globais de padronizacao.141142## Risk Logging Guardrails143144- Registrar fatos de execucao em `.log/skills.log` com marcador no inicio da linha.145- Marcadores minimos esperados: `[CMD]`, `[FILE_CREATE]`, `[FILE_UPDATE]`, `[FILE_DELETE]`, `[DIR_CREATE]`, `[RISK]`, `[FAIL]`, `[AI]`.146- Sempre registrar `[RISK]` quando houver sobrescrita, exclusao, rename/move, ou fallback forcado em arquivos/pastas.147- Toda falha inesperada deve gerar `[FAIL]` com descricao factual curta do evento.148- Operacoes de terminal e alteracoes de arquivos devem passar pelos utilitarios compartilhados em `../utils` para manter rastreabilidade consistente.149