# Registro de mudanças Tudo o que muda de relevante no ESPDocs está aqui. O formato segue o [Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.0/) e o projeto segue o [Versionamento Semântico](https://semver.org/lang/pt-BR/). ## [Não lançado] ### Adicionado - Infraestrutura de internacionalização com `next-intl` (Fase 1): - Roteamento com prefixo de idioma sob `app/[locale]/`, com 6 locales declarados (`pt`, `en`, `es`, `fr`, `de`, `zh-CN`). - `middleware.js` com negociação de idioma na raiz por cookie `NEXT_LOCALE` e cabeçalho `Accept-Language` (com pesos `q`), redirecionamento 308 de URLs antigas sem prefixo para `/pt/`, e retorno 404 para `/livro` fora do português. - Seletor de idiomas acessível no cabeçalho com atalho para os 6 idiomas, persistência via cookie `NEXT_LOCALE` e mapeamento de rota correspondente. - Regras de tipografia de sistema CJK para `zh-CN` e hifenização/quebra de palavras para `de` e `fr`. - Extração de strings e dados canônicos (Fase 2): - Catálogo de mensagens canônico `messages/pt.json` cobrindo 15 namespaces de páginas e componentes sem alteração de conteúdo. - Conjunto de dados canônicos em `data/pt/` (`series.json`, `frameworks.json`, `conexoes/*.json`) e módulos em `lib/data/pt/` (`glossario.js`, `diagnostico.js`, `componentes.js`, `topicos.js`) com carregadores por locale em `lib/data/index.js`. - Script automatizado de validação `check:i18n` integrado ao `npm run check`, verificando paridade de chaves, ausência de valores vazios e garantia estrita de ausência de referências ao livro fora do português. - Controle de idiomas ativos e proteção contra conteúdo não traduzido: - Configuração centralizada em `i18n/links.js` (`ENABLED_LOCALES`), atualmente restrita a `["pt"]`. - Redirecionamento 307 de qualquer prefixo de idioma inativo para `/pt` preservando o caminho ou mapeamento equivalente. - Negociação de idioma na raiz selecionando unicamente entre os idiomas ativos (com fallback em `pt`). - Seletor de idiomas no cabeçalho oculto enquanto apenas um idioma estiver ativo. - Sitemap, hreflang/alternates e build SSG restritos aos idiomas ativos. ### Alterado - O teste de subida da imagem na CI virou `scripts/smoke-imagem.sh`: confere as rotas de cada idioma, a negociação de `Accept-Language`, os redirects 308 das URLs antigas, o 404 do livro fora do português e a metadata no ``, e falha se o servidor registrar erro de render. O `curl` só na raiz deixou passar uma home quebrada. - A metadata (título, `canonical`, Open Graph) sempre sai no `` do HTML inicial, para qualquer cliente, como já era antes do i18n. - A raiz `/` redireciona direto para `/`, em um salto só. ## [1.1.0] - 2026-11-01 ### Adicionado - Busca no site, aberta pelo botão do cabeçalho ou por Ctrl/⌘+K. O índice (séries, frameworks, glossário, erros de diagnóstico, componentes e conexões) é gerado no build, em `/api/busca`. ### Alterado - Os links do repositório do projeto (rodapé, "Sobre", dados estruturados) apontam para o Gitea, e o ícone do GitHub virou o do Gitea. Os links dos frameworks da Espressif continuam no GitHub, porque os repositórios são deles. - O site passou a rodar na Oracle, a partir da imagem Docker do registro do Gitea, em `espdocs.cienciaembarcada.com.br` e `espdocs.lucasrguerra.dev.br`. - CI: a imagem é construída, escaneada e testada uma vez, em arm64, no push da branch, e o release só aplica as tags; o gatilho `pull_request` (que repetia o push) e o segundo `next build` do job de lint saíram, e os caches do npm e da compilação do Next ficam entre as execuções. ## [1.0.0] - 2026-10-30 A primeira versão com tag. O trabalho anterior nunca foi tagueado, então esta entrada resume tudo desde o primeiro commit, em 2025-10-21, até a imagem Docker. ### Conteúdo - Documentação não oficial do ecossistema ESP32 em português: uma página por série de chips, com especificações, conexões e consumo, e a página de comparação lado a lado. - Diagramas interativos de conexões e componentes, com o esquema de dados de conexões padronizado. - Frameworks documentados: ESP-IDF, Arduino, MicroPython, ESP-RainMaker e ESP-Matter. - Glossário técnico, página "Sobre" e chamadas para o catálogo. - Catálogo de placas de desenvolvimento a partir de uma planilha do Google (`/api/placas`), com filtros e cache de 10 minutos. - Ferramenta de seleção: perguntas sobre o projeto (Ethernet, tela e outras) e recomendação da série mais adequada. - Novos modelos, incluindo o ESP32-H4, e a contagem de componentes e de drivers (interface, conectividade e áudio) ampliada. ### Interface e acessibilidade - Tema escuro e redesenho das páginas internas no novo sistema de design, com contraste AAA e auditoria automática de temas e de páginas (`npm run check`). - Identidade nova: logo, ícones, `manifest` e imagens Open Graph. - SEO: mapa do site, dados estruturados, trilhas de navegação e favicons. - Exportação do conteúdo em PDF CMYK e dos slides de treinamento em PDF 16:9, gerados com Puppeteer (scripts locais). ### Dados corrigidos - Revisão dos dados das séries contra os datasheets oficiais da Espressif: consumo, temperatura, ADC, PSRAM, memória LP, CAN FD, frequências e versões de Secure Boot do ESP32, S2, S3, C2, C3, C5, C6, C61, H2, H4, P4 e S31. ### Implantação - Imagem Docker (`node:22-alpine`, build `standalone`, usuário sem privilégio, `HEALTHCHECK`), pronta para o servidor Oracle, publicada para `linux/arm64` em `git.lucasrguerra.dev.br/lucasrguerra/espdocs`. A variável `NEXT_OUTPUT=standalone` liga o empacotamento só dentro da imagem; fora dela o build continua o mesmo para o `pm2` (`start.config.js`, porta 3001). - O código passou para o Gitea, com CI em `.gitea/workflows`: lint, auditorias, Trivy no repositório e na imagem, e teste de que a imagem sobe e responde. O Release reaproveita a imagem quando nada do que a compõe mudou. ### Segurança - `next` 15.5.28, que corrige a execução remota de código sem autenticação na otimização de imagens (GHSA-2464-fhr4-w9xw), e `postcss` fixado acima da cópia embutida no `next`. [Não lançado]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/compare/v1.1.0...HEAD [1.1.0]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/compare/v1.0.0...v1.1.0 [1.0.0]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/releases/tag/v1.0.0