--- layer: wiki type: Document title: "CLAUDE — DashDescomplicar" description: >- Instruções operacionais para Claude Code no projecto DashDescomplicar. Stack React 19 + Express + EasyPanel Swarm. tags: [claude, operacional, dashboard, deploy, react, express] timestamp: 2026-06-29T23:00:00+01:00 --- # CLAUDE — DashDescomplicar Instruções operacionais para agentes ## OKF — Organizational Knowledge Framework (OBRIGATÓRIO) Este projecto tem um mapeamento OKF interno em `okf/`. **Antes de qualquer acção, consultar o OKF.** | Regra | Detalhe | |-------|---------| | **Consultar antes de agir** | Ler `okf/index.md` ao iniciar sessão. Ver entidades relevantes ao contexto. | | **Manter actualizado** | Se criares, alterares ou removeres um componente, actualizar a ficha OKF correspondente. | | **Novo componente = nova ficha** | Qualquer novo serviço, módulo, integração ou script → criar `5W2H-PDCA.md` em `okf/entidades/`. | | **Validar antes de commit** | `okf-validate.sh --project .` — 0 erros para commit. | | **Relacionamentos bidirecionais** | Se A depende de B, tanto A como B devem registar a relação. | **Estrutura:** `okf/index.md` → índice geral. `okf/entidades/` → uma pasta por componente com `5W2H-PDCA.md`. IA a trabalhar neste projecto. ## Contexto - **Projecto:** DashDescomplicar — dashboard interno `dash.descomplicar.pt` - **Desk:** Projecto #65 - **Versão actual:** 2.7.3 (ver `CHANGELOG.md`) - **Dev local:** `/media/ealmeida/Dados/Dev/DashDescomplicar` - **Hub:** `/media/ealmeida/Dados/Hub/04-Stack/02.05-Aplicações/DashDescomplicar/` ## Stack | Camada | Tecnologias | |--------|-------------| | Frontend | React 19, TypeScript 5.6, Vite 7, Tailwind CSS, Framer Motion, Lucide React | | Backend | Express 4, MySQL2, SSH2, Zod, Node.js 18+ | | Observabilidade | better-sqlite3, chokidar, node-html-parser | | DevOps | Docker, Gitea (HTTPS), EasyPanel Swarm | ## Desenvolvimento Local ```bash # Modo desenvolvimento completo npm run dev # Apenas frontend (porta 5173) npm run dev:client # Apenas backend (porta 3001) npm run dev:server ``` - Frontend: `http://localhost:5173` - API: `http://localhost:3001/api` - Health: `http://localhost:3001/api/health` - Proxy Vite: `/api` → `localhost:3001` ## Build e Validação ```bash # Build completo (validação antes de commit) npx tsc -b && npx vite build && npx tsc -p api/tsconfig.json # Build rápido npm run build ``` ## Pipeline de Deploy 1. **Validar build localmente** (obrigatório) 2. **Push para Gitea:** ```bash git push origin main # Se necessário: git pull --rebase origin main ``` 3. **Rebuild e redeploy no servidor** (SSH `easy`): ```bash cd /etc/easypanel/projects/descomplicar/dashboard_descomplicar/code docker build -t easypanel/descomplicar/dashboard_descomplicar:latest . docker service update --force descomplicar_dashboard_descomplicar ``` 4. **Verificar:** ```bash curl -sf https://dash.descomplicar.pt/api/dashboard curl -sf https://dash.descomplicar.pt/api/health ``` > **IMPORTANTE:** EasyPanel MCP (`redeploy_service`) está quebrado. Usar **sempre** SSH directo para redeploy. ## Variáveis de Ambiente Prefixo correcto: `DB_*` (NÃO `MYSQL_*`) ```env DB_HOST=176.9.3.158 DB_USER=ealmeida_desk24 DB_PASS=... DB_NAME=ealmeida_desk24 WP_MONITOR_API_KEY=... HETZNER_TOKEN=... NODE_ENV=production FRONTEND_URL=https://dash.descomplicar.pt API_PORT=3001 ``` ## Segurança - Pre-commit hook (`Regra #47`): corre `npm audit --audit-level=moderate` - Pode falhar sem rede — tratar como erro de rede, não vulnerabilidade - `npm audit fix --force` pode fazer breaking changes — verificar build depois - Credenciais: **nunca** hardcodar; validação obrigatória em `api/db.ts` - `.env` está no `.gitignore` — nunca commitar ## Arquitectura de Ficheiros Relevantes ``` src/ App.tsx — router principal (8 painéis) pages/ — Monitor, Financial, McpMonitor, N8nMonitor, Paperclip, AiOverview, Operations, Sessions components/ Layout.tsx — sidebar com navegação api/ server.ts — Express com rate-limit, CORS, Zod db.ts — MySQL2 connection pool routes/ — wp-monitor, monitor, hetzner, sessions, ... services/ — monitoring, server-metrics, calendar, dashboard, ... scripts/ — sessions-indexer, sessions-patterns, check-sites, ... ``` ## Padrões de Código - Validação Zod em todas as rotas API - `.passthrough()` em objectos aninhados (plugins WP podem enviar campos extra) - `z.string()` em vez de `z.enum()` para health status (plugins enviam qualquer string) - `z.any().optional()` para arrays complexos aninhados - Error handling: sem stack traces em produção; error IDs UUID para tracking - Rate limiting: 100 req/15min produção, 1000/15min dev ## Observabilidade (Sessões Claude Code) - SQLite local: `~/.claude-work/sessions.db` (sincronizado para EasyPanel via rsync) - Volume bind: `/root/data/dashboard-descomplicar/sessions.db → /data/sessions.db` - Env var servidor: `OBSERVABILIDADE_DB=/data/sessions.db` - Timer sync: `obs-index-sync.timer` (cada 15min) - Fontes: Claude Code JSONL, Hermes (`~/.hermes/state.db`), OpenCode (`~/.local/share/opencode/opencode.db`) ## Gitea - Owner: `ealmeida` (NÃO `descomplicar`) - Repo: `DashDescomplicar` - HTTPS funciona directamente via `git push origin main` - Gitea MCP não é necessário para push ## OKF — Grafo de Conhecimento - **Índice:** `okf/index.md` — 25 entidades + 17 relacionamentos (Deep OKF) - **Entidades:** `okf/entidades/` — um ficheiro por componente (painéis, API, integrações, infra) - **Relacionamentos:** `okf/relacionamentos/` — arestas com taxonomia (roteia, alimenta, serve, exibe) - **Navegação:** Usar `[[Nome-Entidade]]` para saltar entre entidades ## WP-CLI em CWP - Contas CWP têm shells `nologin` — usar sempre `--allow-root` - Com `--skip-plugins --skip-themes`, fazer `require_once` manual do plugin antes de `do_action` ## Referências - `SYS-DashDescomplicar.md` — descrição geral do sistema e painéis - `okf/index.md` — grafo de conhecimento completo (Deep OKF) - `MEMORY.md` — memórias operacionais acumuladas - `CHANGELOG.md` — histórico de versões - `docs/SPECS/SPEC-dashboard-expansion-q2-2026.md` — spec expansão Q2 2026 - `docs/PLANS/PLAN-conductor-dashboard-expansion.md` — plano de expansão - `AUDIT-REPORT.md` — auditoria de segurança