atualiza definições de skills e plugins do Claude com melhorias locais

This commit is contained in:
2026-06-10 13:27:46 +01:00
parent cb8699075f
commit f9f8f5135f
14 changed files with 543 additions and 252 deletions
+91 -2
View File
@@ -116,6 +116,18 @@ Mostra: "750 EUR + IVA" + "Investimento único · prazo 1-2 semanas"
| Import de componentes SVG (`<Svg>`, `<Circle>`) | Crasha web worker do PDFDownloadLink | Implementar gráficos inline com `<View>` |
| `Font.register` com fontes locais/CDN em multi-página | Falha silenciosa | Usar Helvetica/Helvetica-Bold (built-in) |
| `href` vazio no PDFDownloadLink | PDF não gerou — verificar consola | Cache do browser — Ctrl+Shift+R |
| `width: "100%"` em bars/elementos dentro de flex container | Não resolve — fica invisível | Usar `alignSelf: "stretch"` no elemento e no container pai |
| Imagens com path absoluto (`/home/...`) | react-pdf não acede ao filesystem local | Colocar em `public/assets/` e referenciar como `"assets/foto.png"` (sem `/` inicial) |
| `borderBottomWidth` no header + `borderTopWidth` em componente filho | Duplica a linha dourada visualmente | Usar apenas `borderTopWidth: 2` no próprio header; remover `borderBottom` |
**Hifenização:** Para desactivar em todo o PDF, adicionar ao `<Document>`:
```jsx
hyphenationCallback={(word) => [word]}
```
**Ícones no PDF:** Usar `PDFIcons.jsx` (`src/pdf/sections/`) com `Svg/Path/Circle/Line/Polyline` de `@react-pdf/renderer`. NÃO importar lucide-react nos componentes PDF — crasha o worker.
**Ícones na web:** Usar `lucide-react`. Padrão: `FALLBACK_ICONS[i % FALLBACK_ICONS.length]` para rotação automática por índice quando o JSON não tem campo `icon`.
### 6. Página 360° (service360) — contextualizar
@@ -132,6 +144,64 @@ Se `service360` for `null`, a secção não aparece.
As condições estão numa página PDF separada (não na mesma que o roadmap) para evitar corte entre páginas. O componente `PDFWorkDone` retorna um Fragment com 2 Pages.
### 8. Apresentação 16:9 — PDFPresentation.jsx
Existe um segundo output PDF em formato 1920×1080 (slides), activado por um botão "Apresentação 16:9" no canto inferior direito da proposta web.
**Ficheiros envolvidos:**
- `src/pdf/PDFPresentation.jsx` — documento completo com todos os slides
- `src/pdf/sections/PDFSlide.jsx` — wrapper de slide (Page 1440×810pt, header com logo, rodapé com numeração)
**Dimensões:** 1920×1080 @ 72dpi → `[1440, 810]` em pontos (unidade do react-pdf).
**Estrutura de slides:**
| Slide | Componente | Dados |
|-------|-----------|-------|
| Capa | `SlideCover` | `data.title`, `client`, `date`, `company` |
| Diagnóstico | `SlideProblem` | `context.description`, `context.diagnosis` |
| Descomplicar 360° | `Slide360` | `educationSections` com `label:"Descomplicar 360°"` |
| Educação | `SlideEducation` | restantes `educationSections` |
| Soluções | `SlideService360` | `service360.areas` |
| Previsão de leads | `SlideLeadForecast` | `leadForecast` |
| Preços | `SlidePricing` | `plans` |
| Roadmap | `SlideRoadmap` | `roadmap` |
| Contacto | `SlideContact` | `company`, `client.contact` |
**Helper components internos (PDFPresentation.jsx):**
- `GoldLine` — linha dourada decorativa
- `Tag` — label uppercase dourado (fontSize 13)
- `SlideTitle` — título principal do slide (fontSize 52 default)
- `SlideBody` — corpo do slide (fontSize 19)
- `Card` — caixa de conteúdo com border esquerda dourada (title 16, body 14)
- `CardGrid` — wrapper flexWrap para cards
**Tamanhos de referência para legibilidade em sala:**
- Tag: 13pt | SlideTitle: 42-58pt | SlideBody: 19pt
- Card title: 16pt | Card body: 14pt
- Cover logo: height 120 (3× maior que header normal)
**Separação Slide360 vs SlideEducation:**
```jsx
const slide360 = educationSections?.find(s => s.label?.toLowerCase().includes("360"))
const otherSections = educationSections?.filter(s => !s.label?.toLowerCase().includes("360"))
```
**Botão no App.jsx:**
```jsx
<PDFDownloadLink
document={<PDFPresentation data={currentProposal} />}
fileName={`apresentacao-descomplicar-${...}.pdf`}
>
{({ loading }) => <button>Apresentação 16:9</button>}
</PDFDownloadLink>
```
**PROIBIÇÕES específicas do 16:9:**
- NÃO usar `gap` em `flexWrap` (mesmo bug do A4)
- NÃO usar `rgba()` em `borderColor`
- Manter `hyphenationCallback` no `<Document>` do PDFPresentation também
---
## Protocolo
@@ -342,6 +412,7 @@ rm -f /tmp/propostas-dist.tar.gz
|------|---------|------|------|
| `ljm-360-61a8aecc` | A Loja da Maria | 360° (mensal) | 2026-03-20 |
| `ccv-bookeo-a3f7c1d2` | Carvoeiro Caves | Migração técnica (único) | 2026-03-23 |
| `pbk-autoridade-local-2026` | Equipa Sérgio Oliveira e Paula Barros · KW Portugal | SEO + conteúdo hiperlocal (mensal) | 2026-04-27 |
---
@@ -366,12 +437,26 @@ rm -f /tmp/propostas-dist.tar.gz
- Checklist pré-build e teste PDF obrigatório
- Condições comerciais em página PDF separada
### v2.2.0 (2026-04-27)
- Formato 16:9 documentado: `PDFPresentation.jsx` + `PDFSlide.jsx`
- Regra 8 adicionada: estrutura de slides, dimensões, helper components, tamanhos de referência
- Separação Slide360 vs SlideEducation por label
- Botão "Apresentação 16:9" no App.jsx documentado
- Proibições específicas 16:9 adicionadas
### v2.1.0 (2026-04-27)
- Novos bugs react-pdf documentados: `width:"100%"` em flex, paths absolutos em imagens, `borderBottom` duplicado
- Hifenização: `hyphenationCallback` no `<Document>`
- Padrão de ícones: `PDFIcons.jsx` para PDF, lucide-react para web, fallback por índice
- Proposta `pbk-autoridade-local-2026` adicionada ao registo
- Healing Log com 5 erros reais corrigidos
### v1.0.0 (2026-03-23)
- Versão inicial
---
**Versão:** 2.0.0 | **Data:** 2026-03-23
**Versão:** 2.2.0 | **Data:** 2026-04-27
---
@@ -380,7 +465,11 @@ rm -f /tmp/propostas-dist.tar.gz
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
{"date":"2026-04-27","issue":"Barras de gráfico invisíveis no PDF","fix":"width:'100%' não funciona em flex containers — substituir por alignSelf:'stretch' no container e na barra","source":"user"}
{"date":"2026-04-27","issue":"Linha dourada duplicada no topo das páginas","fix":"PDFPage tinha borderBottomWidth no header E os componentes filhos tinham borderTopWidth — remover borderBottom do header, manter apenas borderTopWidth:2","source":"user"}
{"date":"2026-04-27","issue":"Foto do gestor de conta não aparece no PDF","fix":"react-pdf não carrega paths absolutos do filesystem — copiar para public/assets/ e referenciar sem / inicial","source":"user"}
{"date":"2026-04-27","issue":"Border verde em vez de dourado no PDF","fix":"rgba() em borderColor renderiza verde — usar hex sólido (#D4A020)","source":"user"}
{"date":"2026-04-27","issue":"Hifenização indesejada no PDF","fix":"Adicionar hyphenationCallback={(word) => [word]} ao <Document>","source":"user"}
```
*Adicionar nova linha após cada erro corrigido.*