Files
ESPDocs/CHANGELOG.md
T
Lucas RayanandAntigravity c1bd2c7e11
CI / Lint e auditorias (push) Successful in 1m51s
CI / Trivy (dependências e segredos) (push) Successful in 15s
CI / Imagem Docker (linux/arm64) (push) Successful in 2m41s
feat(i18n): English localization (phase 3)
- Translate content to English across messages/en.json, data/en, lib/data/en, and public/exemplos/en
- Implement localized routing, slugs, and language negotiation with fallback to en
- Build dedicated search index for English with strict book exclusion
- Update components and pages to dynamically render localized strings and datasets
- Verify full structural parity and exact 1:1 match on Portuguese pages via comparator

Co-Authored-By: Antigravity <noreply@google.com>
2026-11-01 14:17:13 -03:00

8.2 KiB

Registro de mudanças

Tudo o que muda de relevante no ESPDocs está aqui. O formato segue o Keep a Changelog e o projeto segue o Versionamento Semântico.

Não lançado

Adicionado

  • Internacionalização completa para o idioma inglês (en) (Fase 3):
    • Ativação do inglês em ENABLED_LOCALES = ["pt", "en"] com reexibição do seletor de idiomas no cabeçalho.
    • Tradução técnica integral e paridade estrutural em messages/en.json (15 namespaces) e arquivos de dados em data/en/ (series.json, frameworks.json, conexoes/*.json) e lib/data/en/ (glossario.js, diagnostico.js, componentes.js, topicos.js).
    • 14 exemplos práticos de código com comentários em inglês em public/exemplos/en/.
    • Roteamento com slugs canônicos em inglês (/en/catalog, /en/compare, /en/components, /en/diagnostics, /en/frameworks, /en/glossary, /en/selector, /en/about).
    • Índice de busca dedicado por idioma em /api/busca/[locale], com links direcionando aos slugs do idioma correspondente e caixa de busca localizada.
    • Exclusão total e estrita de referências ao livro no idioma inglês (menu, rodapé, busca, sitemap e metadados), mantendo /en/livro respondendo HTTP 404.
    • Tabela de catálogo com cabeçalhos traduzidos e mapeamento de valores na interface inglesa.
    • Negociação de idioma na raiz com fallback padrão para en para navegadores com idiomas inativos ou genéricos, e redirecionamento 307 de prefixos inativos (es, fr, de, zh-CN) para /en preservando o mapeamento de slugs.
    • Metadados de SEO, Open Graph e Twitter Cards localizados, com hreflang cruzado entre pt-BR, en e x-default.

1.2.0 - 2026-11-01

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

  • Todas as páginas passam a viver sob /pt/ (por exemplo /pt/series). As URLs antigas, sem prefixo, redirecionam com 308 para o endereço novo, e a raiz / redireciona para o idioma negociado. O conteúdo do site em português não mudou.
  • 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 <head>, 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 <head> do HTML inicial, para qualquer cliente, como já era antes do i18n.
  • A raiz / redireciona direto para /<idioma>, 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.