3 Commits
Author SHA1 Message Date
Lucas RayanandClaude Sonnet 5.5 2595c65404 fix(sobre): rótulo sem caixa alta para passar na auditoria de design; release 1.8.0
CI / Lint e auditorias (push) Successful in 53s
CI / Trivy (dependências e segredos) (push) Successful in 14s
CI / Imagem Docker (linux/arm64) (push) Successful in 2m44s
Release / Plano (reaproveitar a imagem?) (push) Successful in 7s
Release / ci (push) Skipped
Release / Publica a imagem (linux/arm64) (push) Successful in 19s
Release / Deploy no Coolify (push) Skipped
Release / Cria a release no Gitea (push) Successful in 7s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-03 15:03:51 -03:00
Lucas RayanandClaude Sonnet 5.5 33b7f0bd66 docs(changelog): registra a remoção do link Livro e reescreve a entrada da página Sobre
Release / Plano (reaproveitar a imagem?) (push) Successful in 6s
CI / Trivy (dependências e segredos) (push) Successful in 12s
Release / ci (push) Failing after 1m8s
CI / Imagem Docker (linux/arm64) (push) Skipped
Release / Publica a imagem (linux/arm64) (push) Skipped
Release / Cria a release no Gitea (push) Skipped
Release / Deploy no Coolify (push) Skipped
CI / Lint e auditorias (push) Failing after 56s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-03 14:59:38 -03:00
Lucas RayanandClaude Sonnet 5.5 ea97a5fe61 feat(sobre): reescreve a página Sobre e remove o botão avulso do menu
CI / Lint e auditorias (push) Failing after 47s
CI / Trivy (dependências e segredos) (push) Successful in 12s
Release / ci (push) Failing after 59s
CI / Imagem Docker (linux/arm64) (push) Skipped
Release / Publica a imagem (linux/arm64) (push) Skipped
Release / Cria a release no Gitea (push) Skipped
Release / Deploy no Coolify (push) Skipped
Release / Plano (reaproveitar a imagem?) (push) Successful in 7s
Sobre fica só no menu Biblioteca (desktop), em todos os idiomas. A página
mostra as ferramentas atuais, os seis idiomas e os dados novos do autor.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-03 14:58:26 -03:00
5 changed files with 507 additions and 266 deletions

No files matched your search

+14 -1
View File
@@ -6,6 +6,8 @@ Tudo o que muda de relevante no ESPDocs está aqui. O formato segue o
## [Não lançado]
## [1.8.0] - 2026-11-03
### Adicionado
- Faixa discreta de placas sugeridas nas páginas de série, na comparação e nos resultados do
@@ -31,11 +33,21 @@ Tudo o que muda de relevante no ESPDocs está aqui. O formato segue o
### Alterado
- Página Sobre reescrita nos seis idiomas. Lista o que o ESPDocs tem hoje (séries, comparador,
seletor, catálogo, diagnóstico, componentes, frameworks, glossário, busca, os seis idiomas e,
só em português, o livro), com um cartão com link para cada ferramenta. Os dados do autor
foram atualizados a partir do site pessoal (cargo na RNP, formação, reconhecimentos, foto e
links), e o JSON-LD do autor ganhou cargo e empregador.
- O botão avulso "Sobre" saiu da barra do desktop em todos os idiomas, porque a página já está
no menu Biblioteca. Ela continua no menu móvel e no rodapé.
- A apostila de cada formação passou de `index.html` para `apostila.html`; o `index.html`
agora é a página de entrada.
### Corrigido
- Barra do desktop em português: com o link "Livro" a mais, os rótulos quebravam com hífen
("Hard-ware"). O link saiu da barra (o livro segue no menu móvel, no rodapé e nas chamadas
do site) e `.nav-link` ganhou `white-space: nowrap`.
- Menu no celular: o botão do menu ultrapassava a borda do cabeçalho em 360 e 375 px. Abaixo
de 390 px o botão de tema passa para dentro do menu. O menu aberto rola inteiro (cartão do
livro e links juntos), então todos os itens ficam alcançáveis em telas baixas, e o botão de
@@ -315,7 +327,8 @@ entrada resume tudo desde o primeiro commit, em 2025-10-21, até a imagem Docker
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.7.0...HEAD
[Não lançado]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/compare/v1.8.0...HEAD
[1.8.0]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/compare/v1.7.0...v1.8.0
[1.7.0]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/compare/v1.6.1...v1.7.0
[1.6.1]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/compare/v1.6.0...v1.6.1
[1.6.0]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/compare/v1.5.0...v1.6.0
+491 -261
View File
@@ -1,55 +1,416 @@
import Link from "next/link";
import { paginaMeta, jsonLd, SITE } from "@/lib/seo";
import { getLocalizedHref } from "@/i18n/links";
import Header from "@/components/Header";
import Footer from "@/components/Footer";
import PageHero from "@/components/PageHero";
import Image from "next/image";
import GiteaMark from "@/components/GiteaMark";
import { ArrowUpRight, Code, Globe, GitCompare, Info, Languages } from "lucide-react";
import {
AlertTriangle,
ArrowUpRight,
BookA,
BookMarked,
BookOpen,
Box,
Cpu,
Info,
Scale,
Search,
SlidersHorizontal,
Sparkles,
} from "lucide-react";
const REPOSITORIO = SITE.repositorio;
const LANGS = ["pt", "en", "es", "fr", "de", "zh-CN"];
/** Ferramentas e conteúdos do site: ícone e rota fixos, texto por idioma (ordem = ordem de FERRAMENTAS). */
const FERRAMENTAS = [
{ icon: Cpu, href: "/series" },
{ icon: Scale, href: "/comparacao" },
{ icon: SlidersHorizontal, href: "/seletor" },
{ icon: Box, href: "/catalogo" },
{ icon: AlertTriangle, href: "/diagnostico" },
{ icon: Search, href: "/componentes" },
{ icon: BookOpen, href: "/frameworks" },
{ icon: BookA, href: "/glossario" },
{ icon: Sparkles, href: null },
{ icon: BookMarked, href: "/livro", soPt: true },
];
const T = {
pt: {
metaTitulo: "Sobre o projeto",
metaDesc:
"O ESPDocs é uma plataforma independente, em seis idiomas, que reúne a documentação do ecossistema ESP32, com séries, comparador, seletor de chip, catálogo de placas, diagnóstico e glossário. Conheça o projeto e o autor.",
keywords: ["ESPDocs", "documentação ESP32 português", "projeto open source ESP32"],
inicio: "Início",
trilha: "Sobre",
tituloHero: "Sobre o ESPDocs",
label: "Projeto independente",
lede: "Uma plataforma não oficial, em seis idiomas, que organiza as informações técnicas do ESP32, ajuda a escolher o chip certo e leva você à documentação oficial da Espressif. Feita para a comunidade de hardware livre.",
repo: "Ver o repositório",
missaoTitulo: "Missão",
missao:
"Facilitar o acesso e a compreensão do ecossistema ESP32: organizar especificações, comparar séries, ajudar na escolha do chip e das placas, explicar erros comuns e centralizar os links da documentação oficial. O objetivo é economizar o seu tempo no desenvolvimento de firmware e IoT.",
porqueTitulo: "Por que o ESPDocs existe",
porque:
"As informações sobre os ESP32 costumam estar espalhadas entre datasheets densos, manuais de referência (TRM) e repositórios secundários, quase sempre só em inglês. O ESPDocs condensa e estrutura esses dados para a triagem rápida, antes de você aprofundar na engenharia oficial.",
temTitulo: "O que você encontra aqui",
temLede: "O projeto começou como uma tabela de séries e hoje reúne:",
ferramentas: [
["12 séries ESP32", "Especificações, diagramas de pinos interativos e pinos com restrição de uso, do ESP32 clássico ao ESP32-P4."],
["Comparador", "Até quatro séries lado a lado, com as diferenças em destaque."],
["Seletor inteligente", "Diga o que o projeto precisa e veja quais chips atendem."],
["Catálogo de placas", "DevKits com pinos, filtros e links de compra para o seu país."],
["Diagnóstico", "Brownout, bootloop, watchdog e mais: sintomas, causas e um decodificador de logs."],
["Component Registry", "42 componentes e drivers do registro oficial, com o manifest idf_component.yml pronto."],
["Frameworks e SDKs", "14 frameworks, do ESP-IDF e Arduino a Rust e Matter, com exemplos de código."],
["Glossário técnico", "Os termos que aparecem nos datasheets, explicados por categoria."],
["Busca inteligente", "Pergunte “pino 32 esp32-s3” ou “qual ESP32 tem PSRAM” e receba a resposta direta, com link para a fonte."],
["O livro", "Microcontroladores ESP32: hardware e firmware em 12 partes e 78 capítulos."],
],
idiomasTitulo: "Seis idiomas",
idiomas:
"O site inteiro está em português, inglês, espanhol, francês, alemão e chinês simplificado: interface, dados, busca e exemplos de código com comentários traduzidos. O livro existe só em português.",
contribuirTitulo: "Como contribuir",
contribuir: "Correções de tradução, ajustes em tabelas e novos exemplos de código são muito bem-vindos. O projeto cresce com a comunidade.",
passos: [
"Faça o fork do repositório no Gitea.",
"Implemente as melhorias e confira as referências técnicas oficiais.",
"Abra um Pull Request descrevendo os ajustes feitos.",
],
acessTitulo: "Acessibilidade",
acess:
"O ESPDocs prioriza a legibilidade, o contraste alto (nível AAA da WCAG), o tema claro e escuro e a navegação completa por teclado. Se encontrar alguma barreira de leitura ou navegação, abra uma issue no repositório.",
asideLabel: "Autor e aviso legal",
autorCargo: "Técnico de Operações do PoP-PE na RNP",
autorBio: [
"Desenvolvedor full-stack JavaScript com especialização em resposta a incidentes e forense, entre código, circuitos e investigação digital.",
"Cursa Ciência da Computação na UFRPE e Blockchain e Criptografia Digital na FMU. Criador do Ciência Embarcada, autor de livros técnicos e de ferramentas livres de segurança.",
],
destaquesTitulo: "Reconhecimentos",
destaques: [
"Prêmio de Inovação RNP 2026",
"1º lugar no CyberGame do Hackers do Bem (CSBC 2025)",
"HackerOne, nível Signal Specialist",
"12º lugar civil na Operação Curupira 3.0",
],
siteAutor: "Site pessoal",
blog: "Visitar o Ciência Embarcada",
avisoTitulo: "Aviso legal",
aviso:
"O ESPDocs é um agregador e organizador. Os manuais e repositórios referenciados pertencem à Espressif Systems. Em projetos críticos ou comerciais, consulte sempre a documentação oficial.",
},
en: {
metaTitulo: "About the Project",
metaDesc:
"ESPDocs is an independent platform in six languages that brings together ESP32 documentation: series, comparator, chip selector, board catalog, diagnostics and glossary. Learn about the project and its author.",
keywords: ["ESPDocs", "ESP32 documentation", "open source ESP32 project"],
inicio: "Home",
trilha: "About",
tituloHero: "About ESPDocs",
label: "Independent project",
lede: "An unofficial platform in six languages that organizes technical information about the ESP32, helps you pick the right chip and links you to the official Espressif documentation. Built for the open hardware community.",
repo: "View repository",
missaoTitulo: "Mission",
missao:
"Make the ESP32 ecosystem easier to reach and understand: organize specifications, compare series, help choose the chip and the board, explain common errors and centralize links to the official documentation. The goal is to save you time in firmware and IoT development.",
porqueTitulo: "Why ESPDocs exists",
porque:
"Information about the ESP32 is often scattered across dense datasheets, Technical Reference Manuals (TRM) and secondary repositories. ESPDocs condenses and structures this data for rapid evaluation before you dive into the official engineering documentation.",
temTitulo: "What you will find here",
temLede: "The project started as a table of series and now brings together:",
ferramentas: [
["12 ESP32 series", "Specifications, interactive pinout diagrams and restricted-use pins, from the classic ESP32 to the ESP32-P4."],
["Comparator", "Up to four series side by side, with the differences highlighted."],
["Smart selector", "Say what the project needs and see which chips fit."],
["Board catalog", "DevKits with pins, filters and purchase links for your country."],
["Diagnostics", "Brownout, bootloop, watchdog and more: symptoms, causes and a log decoder."],
["Component Registry", "42 components and drivers from the official registry, with the idf_component.yml manifest ready."],
["Frameworks and SDKs", "14 frameworks, from ESP-IDF and Arduino to Rust and Matter, with code examples."],
["Technical glossary", "The terms that show up in datasheets, explained by category."],
["Smart search", "Ask “pin 32 esp32-s3” or “which ESP32 has PSRAM” and get a direct answer with a link to the source."],
],
idiomasTitulo: "Six languages",
idiomas:
"The whole site is available in Portuguese, English, Spanish, French, German and Simplified Chinese: interface, data, search and code examples with translated comments.",
contribuirTitulo: "How to contribute",
contribuir: "Translation fixes, table refinements and new code examples are welcome. The project grows with the community.",
passos: ["Fork the repository on Gitea.", "Implement improvements and verify official technical references.", "Open a Pull Request describing the changes."],
acessTitulo: "Accessibility",
acess:
"ESPDocs prioritizes readability, high contrast (WCAG AAA level), light and dark themes, and full keyboard navigation. If you encounter any accessibility or navigation hurdles, please open an issue in the repository.",
asideLabel: "Author and legal notice",
autorCargo: "Operations Technician at PoP-PE, RNP",
autorBio: [
"Full-stack JavaScript developer specialized in incident response and forensics, working between code, circuits and digital investigation.",
"Studying Computer Science at UFRPE and Blockchain and Digital Cryptography at FMU. Creator of Ciência Embarcada and author of free security tools.",
],
destaquesTitulo: "Recognition",
destaques: [
"RNP Innovation Award 2026",
"1st place at the Hackers do Bem CyberGame (CSBC 2025)",
"HackerOne, Signal Specialist level",
"12th place (civil) at Operação Curupira 3.0",
],
siteAutor: "Personal website",
blog: "Visit Ciência Embarcada",
avisoTitulo: "Legal notice",
aviso:
"ESPDocs is an aggregator and curation platform. Referenced manuals and repositories are property of Espressif Systems. In mission-critical or commercial designs, always consult official documentation.",
},
es: {
metaTitulo: "Acerca del proyecto",
metaDesc:
"ESPDocs es una plataforma independiente, en seis idiomas, que reúne la documentación del ecosistema ESP32: series, comparador, selector de chip, catálogo de placas, diagnóstico y glosario. Conozca el proyecto y a su autor.",
keywords: ["ESPDocs", "documentación ESP32", "proyecto open source ESP32", "código abierto"],
inicio: "Inicio",
trilha: "Acerca",
tituloHero: "Acerca de ESPDocs",
label: "Proyecto independiente",
lede: "Una plataforma no oficial, en seis idiomas, que organiza la información técnica del ESP32, le ayuda a elegir el chip adecuado y le conecta con la documentación oficial de Espressif. Creada para la comunidad de hardware abierto.",
repo: "Ver el repositorio",
missaoTitulo: "Misión",
missao:
"Facilitar el acceso y la comprensión del ecosistema ESP32: organizar especificaciones, comparar series, ayudar a elegir el chip y la placa, explicar errores comunes y centralizar los enlaces a la documentación oficial. El objetivo es ahorrar tiempo en el desarrollo de firmware e IoT.",
porqueTitulo: "¿Por qué existe ESPDocs?",
porque:
"La información sobre el ESP32 suele estar dispersa entre hojas de datos densas, manuales de referencia técnica (TRM) y repositorios secundarios. ESPDocs condensa y estructura estos datos para una evaluación rápida antes de profundizar en la ingeniería oficial.",
temTitulo: "Qué encontrará aquí",
temLede: "El proyecto empezó como una tabla de series y hoy reúne:",
ferramentas: [
["12 series ESP32", "Especificaciones, diagramas de pines interactivos y pines con restricciones de uso, del ESP32 clásico al ESP32-P4."],
["Comparador", "Hasta cuatro series lado a lado, con las diferencias resaltadas."],
["Selector inteligente", "Indique lo que necesita el proyecto y vea qué chips lo cumplen."],
["Catálogo de placas", "DevKits con pines, filtros y enlaces de compra para su país."],
["Diagnóstico", "Brownout, bootloop, watchdog y más: síntomas, causas y un decodificador de logs."],
["Component Registry", "42 componentes y drivers del registro oficial, con el manifest idf_component.yml listo."],
["Frameworks y SDKs", "14 frameworks, de ESP-IDF y Arduino a Rust y Matter, con ejemplos de código."],
["Glosario técnico", "Los términos que aparecen en las hojas de datos, explicados por categoría."],
["Búsqueda inteligente", "Pregunte “pin 32 esp32-s3” o “qué ESP32 tiene PSRAM” y reciba la respuesta directa, con enlace a la fuente."],
],
idiomasTitulo: "Seis idiomas",
idiomas:
"Todo el sitio está en portugués, inglés, español, francés, alemán y chino simplificado: interfaz, datos, búsqueda y ejemplos de código con comentarios traducidos.",
contribuirTitulo: "Cómo contribuir",
contribuir: "Las correcciones de traducción, ajustes en tablas y nuevos ejemplos de código son muy bienvenidos. El proyecto crece junto con la comunidad.",
passos: [
"Haga un fork del repositorio en Gitea.",
"Implemente las mejoras y verifique las referencias técnicas oficiales.",
"Abra una solicitud de extracción (Pull Request) describiendo los cambios realizados.",
],
acessTitulo: "Accesibilidad",
acess:
"ESPDocs prioriza la legibilidad, el alto contraste (nivel AAA de WCAG), los temas claro y oscuro y la navegación completa por teclado. Si encuentra alguna barrera de lectura o navegación, abra un issue en el repositorio.",
asideLabel: "Autor y aviso legal",
autorCargo: "Técnico de Operaciones del PoP-PE en la RNP",
autorBio: [
"Desarrollador full-stack JavaScript especializado en respuesta a incidentes y forense, entre código, circuitos e investigación digital.",
"Cursa Ciencias de la Computación en la UFRPE y Blockchain y Criptografía Digital en la FMU. Creador de Ciência Embarcada y autor de herramientas libres de seguridad.",
],
destaquesTitulo: "Reconocimientos",
destaques: [
"Premio de Innovación RNP 2026",
"1.er lugar en el CyberGame de Hackers do Bem (CSBC 2025)",
"HackerOne, nivel Signal Specialist",
"12.º lugar civil en la Operação Curupira 3.0",
],
siteAutor: "Sitio personal",
blog: "Visitar Ciência Embarcada",
avisoTitulo: "Aviso legal",
aviso:
"ESPDocs es un agregador y organizador. Los manuales y repositorios referenciados pertenecen a Espressif Systems. En proyectos críticos o comerciales, consulte siempre la documentación oficial.",
},
fr: {
metaTitulo: "À propos du projet",
metaDesc:
"ESPDocs est une plateforme indépendante, en six langues, qui rassemble la documentation de l'écosystème ESP32 : séries, comparateur, sélecteur de puce, catalogue de cartes, diagnostic et glossaire. Découvrez le projet et son auteur.",
keywords: ["ESPDocs", "documentation ESP32", "projet open source ESP32", "open source"],
inicio: "Accueil",
trilha: "À propos",
tituloHero: "À propos d'ESPDocs",
label: "Projet indépendant",
lede: "Une plateforme non officielle, en six langues, qui organise les informations techniques de l'ESP32, vous aide à choisir la bonne puce et vous oriente vers la documentation officielle d'Espressif. Conçue pour la communauté du matériel libre.",
repo: "Voir le dépôt",
missaoTitulo: "Mission",
missao:
"Faciliter l'accès à l'écosystème ESP32 et sa compréhension : organiser les spécifications, comparer les séries, aider à choisir la puce et la carte, expliquer les erreurs courantes et centraliser les liens vers la documentation officielle. L'objectif est de vous faire gagner du temps dans le développement de firmware et d'IoT.",
porqueTitulo: "Pourquoi ESPDocs existe",
porque:
"Les informations sur l'ESP32 sont souvent dispersées entre des fiches techniques denses, des manuels de référence technique (TRM) et des dépôts secondaires. ESPDocs condense et structure ces données pour une évaluation rapide avant d'approfondir l'ingénierie officielle.",
temTitulo: "Ce que vous trouverez ici",
temLede: "Le projet a commencé comme un tableau de séries et rassemble aujourd'hui :",
ferramentas: [
["12 séries ESP32", "Spécifications, schémas de brochage interactifs et broches à usage restreint, de l'ESP32 classique à l'ESP32-P4."],
["Comparateur", "Jusqu'à quatre séries côte à côte, avec les différences mises en évidence."],
["Sélecteur intelligent", "Dites ce dont le projet a besoin et voyez quelles puces conviennent."],
["Catalogue de cartes", "DevKits avec broches, filtres et liens d'achat pour votre pays."],
["Diagnostic", "Brownout, bootloop, watchdog et plus : symptômes, causes et décodeur de logs."],
["Component Registry", "42 composants et pilotes du registre officiel, avec le manifest idf_component.yml prêt."],
["Frameworks et SDK", "14 frameworks, d'ESP-IDF et Arduino à Rust et Matter, avec des exemples de code."],
["Glossaire technique", "Les termes des fiches techniques, expliqués par catégorie."],
["Recherche intelligente", "Demandez « broche 32 esp32-s3 » ou « quel ESP32 a de la PSRAM » et obtenez la réponse directe, avec le lien vers la source."],
],
idiomasTitulo: "Six langues",
idiomas:
"Tout le site est disponible en portugais, anglais, espagnol, français, allemand et chinois simplifié : interface, données, recherche et exemples de code avec commentaires traduits.",
contribuirTitulo: "Comment contribuer",
contribuir: "Les corrections de traduction, les ajustements de tableaux et les nouveaux exemples de code sont très appréciés. Le projet grandit avec la communauté.",
passos: [
"Forkez le dépôt sur Gitea.",
"Apportez les améliorations et vérifiez les références techniques officielles.",
"Ouvrez une Pull Request décrivant les modifications apportées.",
],
acessTitulo: "Accessibilité",
acess:
"ESPDocs privilégie la lisibilité, un contraste élevé (niveau AAA du WCAG), les thèmes clair et sombre et une navigation complète au clavier. Si vous rencontrez un obstacle de lecture ou de navigation, ouvrez un ticket dans le dépôt.",
asideLabel: "Auteur et mentions légales",
autorCargo: "Technicien d'opérations du PoP-PE au RNP",
autorBio: [
"Développeur full-stack JavaScript spécialisé en réponse aux incidents et en forensique, entre code, circuits et investigation numérique.",
"Étudie l'informatique à l'UFRPE et la blockchain et la cryptographie numérique à la FMU. Créateur de Ciência Embarcada et auteur d'outils libres de sécurité.",
],
destaquesTitulo: "Distinctions",
destaques: [
"Prix de l'innovation RNP 2026",
"1re place au CyberGame de Hackers do Bem (CSBC 2025)",
"HackerOne, niveau Signal Specialist",
"12e place civile à l'Operação Curupira 3.0",
],
siteAutor: "Site personnel",
blog: "Visiter Ciência Embarcada",
avisoTitulo: "Mentions légales",
aviso:
"ESPDocs est une plateforme d'agrégation et de synthèse. Les manuels et dépôts référencés appartiennent à Espressif Systems. Pour les projets critiques ou commerciaux, consultez systématiquement la documentation officielle.",
},
de: {
metaTitulo: "Über das Projekt",
metaDesc:
"ESPDocs ist eine unabhängige Plattform in sechs Sprachen, die die Dokumentation des ESP32-Ökosystems bündelt: Serien, Vergleich, Chip-Auswahl, Board-Katalog, Diagnose und Glossar. Lernen Sie das Projekt und den Autor kennen.",
keywords: ["ESPDocs", "ESP32 Dokumentation", "ESP32 Open-Source-Projekt", "Open Source"],
inicio: "Startseite",
trilha: "Über uns",
tituloHero: "Über ESPDocs",
label: "Unabhängiges Projekt",
lede: "Eine inoffizielle Plattform in sechs Sprachen, die technische Informationen zum ESP32 strukturiert, bei der Wahl des passenden Chips hilft und Sie mit der offiziellen Dokumentation von Espressif verbindet. Entwickelt für die Open-Hardware-Community.",
repo: "Repository ansehen",
missaoTitulo: "Mission",
missao:
"Den Zugang zum ESP32-Ökosystem und das Verständnis dafür erleichtern: Spezifikationen bündeln, Serien vergleichen, bei der Wahl von Chip und Board helfen, häufige Fehler erklären und Links zur offiziellen Dokumentation zentralisieren. Ziel ist es, Entwicklungszeit bei Firmware und IoT-Projekten zu sparen.",
porqueTitulo: "Warum es ESPDocs gibt",
porque:
"Informationen über den ESP32 sind oft über dichte Datenblätter, technische Referenzhandbücher (TRM) und sekundäre Repositories verstreut. ESPDocs verdichtet und strukturiert diese Daten für eine schnelle Vorabauswahl, bevor Sie tiefer in die offizielle Technik einsteigen.",
temTitulo: "Was Sie hier finden",
temLede: "Das Projekt begann als Tabelle von Serien und umfasst heute:",
ferramentas: [
["12 ESP32-Serien", "Spezifikationen, interaktive Pinbelegungen und Pins mit Nutzungseinschränkungen, vom klassischen ESP32 bis zum ESP32-P4."],
["Vergleich", "Bis zu vier Serien nebeneinander, Unterschiede hervorgehoben."],
["Intelligente Auswahl", "Sagen Sie, was das Projekt braucht, und sehen Sie, welche Chips passen."],
["Board-Katalog", "DevKits mit Pins, Filtern und Kauflinks für Ihr Land."],
["Diagnose", "Brownout, Bootloop, Watchdog und mehr: Symptome, Ursachen und ein Log-Decoder."],
["Component Registry", "42 Komponenten und Treiber aus der offiziellen Registry, mit fertigem idf_component.yml-Manifest."],
["Frameworks und SDKs", "14 Frameworks, von ESP-IDF und Arduino bis Rust und Matter, mit Codebeispielen."],
["Technisches Glossar", "Die Begriffe aus den Datenblättern, nach Kategorie erklärt."],
["Intelligente Suche", "Fragen Sie „Pin 32 esp32-s3“ oder „welcher ESP32 hat PSRAM“ und erhalten Sie die direkte Antwort mit Link zur Quelle."],
],
idiomasTitulo: "Sechs Sprachen",
idiomas:
"Die gesamte Website gibt es auf Portugiesisch, Englisch, Spanisch, Französisch, Deutsch und vereinfachtem Chinesisch: Oberfläche, Daten, Suche und Codebeispiele mit übersetzten Kommentaren.",
contribuirTitulo: "Wie Sie beitragen können",
contribuir: "Übersetzungskorrekturen, Tabellenanpassungen und neue Codebeispiele sind herzlich willkommen. Das Projekt wächst gemeinsam mit der Community.",
passos: [
"Erstellen Sie einen Fork des Repositories auf Gitea.",
"Implementieren Sie die Verbesserungen und prüfen Sie die offiziellen technischen Referenzen.",
"Eröffnen Sie einen Pull Request mit einer Beschreibung der vorgenommenen Änderungen.",
],
acessTitulo: "Barrierefreiheit",
acess:
"ESPDocs legt großen Wert auf Lesbarkeit, hohen Kontrast (WCAG-Stufe AAA), helles und dunkles Design und vollständige Tastaturnavigation. Wenn Sie auf Lese- oder Navigationsbarrieren stoßen, eröffnen Sie bitte ein Issue im Repository.",
asideLabel: "Autor und rechtlicher Hinweis",
autorCargo: "Betriebstechniker des PoP-PE beim RNP",
autorBio: [
"Full-Stack-JavaScript-Entwickler mit Spezialisierung auf Incident Response und Forensik, zwischen Code, Schaltungen und digitaler Ermittlung.",
"Studiert Informatik an der UFRPE sowie Blockchain und digitale Kryptographie an der FMU. Gründer von Ciência Embarcada und Autor freier Sicherheitswerkzeuge.",
],
destaquesTitulo: "Auszeichnungen",
destaques: [
"RNP-Innovationspreis 2026",
"1. Platz beim CyberGame von Hackers do Bem (CSBC 2025)",
"HackerOne, Stufe Signal Specialist",
"12. Platz (zivil) bei der Operação Curupira 3.0",
],
siteAutor: "Persönliche Website",
blog: "Ciência Embarcada besuchen",
avisoTitulo: "Rechtlicher Hinweis",
aviso:
"ESPDocs ist ein Aggregator und Kurator. Die referenzierten Handbücher und Repositories sind Eigentum von Espressif Systems. Konsultieren Sie bei geschäftskritischen oder kommerziellen Projekten stets die offizielle Dokumentation.",
},
"zh-CN": {
metaTitulo: "关于本项目",
metaDesc: "ESPDocs 是一个独立平台,提供六种语言,汇集 ESP32 生态的文档:系列、对比、芯片选择、开发板目录、诊断与术语表。了解本项目及其作者。",
keywords: ["ESPDocs", "ESP32 文档", "开源 ESP32 项目"],
inicio: "首页",
trilha: "关于",
tituloHero: "关于 ESPDocs",
label: "独立项目",
lede: "一个非官方平台,提供六种语言,整理 ESP32 的技术信息,帮助你选出合适的芯片,并直接链接到乐鑫官方文档。为开源硬件社区而做。",
repo: "查看代码仓库",
missaoTitulo: "使命",
missao: "让 ESP32 生态更易获取、更易理解:整理规格、对比系列、帮助选择芯片和开发板、解释常见错误,并集中官方文档链接。目标是节省固件与物联网项目的开发时间。",
porqueTitulo: "ESPDocs 为什么存在",
porque: "ESP32 的信息常常分散在冗长的数据手册、技术参考手册(TRM)和零散的代码仓库中。ESPDocs 把这些数据浓缩并结构化,便于在深入工程文档之前快速评估。",
temTitulo: "你能在这里找到什么",
temLede: "项目最初只是一张系列对照表,如今汇集了:",
ferramentas: [
["12 个 ESP32 系列", "规格、交互式引脚图,以及有使用限制的引脚,从经典 ESP32 到 ESP32-P4。"],
["系列对比", "最多四个系列并排对比,差异一目了然。"],
["智能选型", "说出项目的需求,看看哪些芯片合适。"],
["开发板目录", "DevKit 的引脚、筛选条件,以及适用于你所在国家的购买链接。"],
["故障诊断", "Brownout、bootloop、看门狗等:症状、原因和日志解码器。"],
["Component Registry", "来自官方注册表的 42 个组件和驱动,附现成的 idf_component.yml。"],
["框架与 SDK", "14 个框架,从 ESP-IDF、Arduino 到 Rust 和 Matter,并附代码示例。"],
["技术术语表", "数据手册里的术语,按类别解释。"],
["智能搜索", "问“esp32-s3 32号引脚”或“哪款 ESP32 有 PSRAM”,直接得到答案,并附来源链接。"],
],
idiomasTitulo: "六种语言",
idiomas: "整个网站提供葡萄牙语、英语、西班牙语、法语、德语和简体中文:界面、数据、搜索,以及注释已翻译的代码示例。",
contribuirTitulo: "如何参与贡献",
contribuir: "欢迎提交翻译修正、表格改进和新的代码示例。项目与社区一同成长。",
passos: ["在 Gitea 上 Fork 本仓库。", "实现改进,并核对官方技术资料。", "发起 Pull Request 并说明改动。"],
acessTitulo: "无障碍",
acess: "ESPDocs 重视可读性、高对比度(WCAG AAA 级)、浅色与深色主题和完整的键盘导航。如果你遇到任何无障碍或导航上的障碍,请在代码仓库中提交 issue。",
asideLabel: "作者与法律声明",
autorCargo: "RNP PoP-PE 运维技术员",
autorBio: [
"全栈 JavaScript 开发者,专注于事件响应与取证,穿梭于代码、电路与数字调查之间。",
"在 UFRPE 就读计算机科学,在 FMU 学习区块链与数字密码学。Ciência Embarcada 创始人,开源安全工具作者。",
],
destaquesTitulo: "荣誉",
destaques: ["2026 年 RNP 创新奖", "Hackers do Bem CyberGame 第 1 名(CSBC 2025)", "HackerOne Signal Specialist 等级", "Operação Curupira 3.0 平民组第 12 名"],
siteAutor: "个人网站",
blog: "访问 Ciência Embarcada",
avisoTitulo: "法律声明",
aviso: "ESPDocs 是一个聚合与整理平台。所引用的手册和代码仓库归乐鑫系统(Espressif Systems)所有。在关键任务或商业设计中,请始终查阅官方文档。",
},
};
export async function generateMetadata({ params }) {
const { locale } = await params;
const isEn = locale === "en";
const isEs = locale === "es";
const isFr = locale === "fr";
const isDe = locale === "de";
const isZh = locale === "zh-CN";
const t = T[locale] ?? T.pt;
return paginaMeta({
titulo: isZh ? "关于本项目" : isDe
? "Über das Projekt"
: isFr
? "À propos du projet"
: isEs
? "Acerca del proyecto"
: isEn
? "About the Project"
: "Sobre o projeto",
descricao: isZh ? "ESPDocs 是一个独立平台,整理 ESP32 生态的技术文档。了解本项目以及如何参与贡献。" : isDe
? "ESPDocs ist eine unabhängige Plattform, die die technische Dokumentation des ESP32-Ökosystems strukturiert. Erfahren Sie mehr über das Projekt und wie Sie beitragen können."
: isFr
? "ESPDocs est une plateforme indépendante qui organise la documentation technique de l'écosystème ESP32. Découvrez le projet et comment contribuer."
: isEs
? "ESPDocs es una plataforma independiente que organiza la documentación técnica del ecosistema ESP32. Conozca el proyecto y cómo contribuir."
: isEn
? "ESPDocs is an independent platform organizing technical documentation of the ESP32 ecosystem. Learn about the project and how to contribute."
: "O ESPDocs é uma plataforma independente que reúne a documentação do ecossistema ESP32 em português brasileiro. Saiba como o projeto nasceu e como contribuir.",
titulo: t.metaTitulo,
descricao: t.metaDesc,
caminho: "/sobre",
keywords: isZh ? ["ESPDocs", "ESP32 文档", "开源 ESP32 项目"] : isDe
? ["ESPDocs", "ESP32 Dokumentation", "ESP32 Open-Source-Projekt", "Open Source"]
: isFr
? ["ESPDocs", "documentation ESP32", "projet open source ESP32", "open source"]
: isEs
? ["ESPDocs", "documentación ESP32", "proyecto open source ESP32", "código abierto"]
: isEn
? ["ESPDocs", "ESP32 documentation", "open source ESP32 project"]
: ["ESPDocs", "documentação ESP32 português", "projeto open source ESP32"],
keywords: t.keywords,
locale,
});
}
export default async function Sobre({ params }) {
const { locale } = await params;
const t = T[locale] ?? T.pt;
const isPt = locale === "pt";
const isEn = locale === "en";
const isEs = locale === "es";
@@ -57,63 +418,26 @@ export default async function Sobre({ params }) {
const isDe = locale === "de";
const isZh = locale === "zh-CN";
const featuresPt = [
{ icon: Languages, title: "Em português", desc: "Dados técnicos organizados e apresentados em português do Brasil." },
{ icon: GitCompare, title: "Comparações visuais", desc: "Tabelas e diagramas para escolher a série certa sem abrir dez datasheets." },
{ icon: Globe, title: "Acesso centralizado", desc: "Links diretos para a documentação oficial, repositórios e exemplos." },
{ icon: Code, title: "Código aberto", desc: "Contribuições são bem-vindas no Gitea." },
];
const getLinkHref = (href) => getLocalizedHref(`/${locale}${href}`, locale);
const homePath = getLinkHref("/");
const sobrePath = getLinkHref("/sobre");
const featuresEn = [
{ icon: Languages, title: "Curated Content", desc: "Structured technical data presented clearly without datasheet noise." },
{ icon: GitCompare, title: "Visual comparisons", desc: "Tables and diagrams to select the right series without opening ten datasheets." },
{ icon: Globe, title: "Centralized access", desc: "Direct links to official documentation, repositories and examples." },
{ icon: Code, title: "Open source", desc: "Contributions are welcome on Gitea." },
];
// A lista de textos do inglês ao chinês não traz "O livro": ele só existe em pt.
const ferramentas = FERRAMENTAS.filter((f) => isPt || !f.soPt).map((f, i) => ({ ...f, titulo: t.ferramentas[i][0], desc: t.ferramentas[i][1] }));
const featuresEs = [
{ icon: Languages, title: "En español", desc: "Datos técnicos organizados y presentados de forma clara en español neutro." },
{ icon: GitCompare, title: "Comparaciones visuales", desc: "Tablas y diagramas para elegir la serie adecuada sin abrir diez hojas de datos." },
{ icon: Globe, title: "Acceso centralizado", desc: "Enlaces directos a la documentación oficial, repositorios y ejemplos." },
{ icon: Code, title: "Código abierto", desc: "Las contribuciones son bienvenidas en Gitea." },
];
const featuresFr = [
{ icon: Languages, title: "En français", desc: "Données techniques organisées et présentées clairement en français." },
{ icon: GitCompare, title: "Comparaisons visuelles", desc: "Tableaux et schémas pour choisir la bonne série sans ouvrir dix datasheets." },
{ icon: Globe, title: "Accès centralisé", desc: "Liens directs vers la documentation officielle, les dépôts et les exemples." },
{ icon: Code, title: "Open source", desc: "Les contributions sont les bienvenues sur Gitea." },
];
const featuresDe = [
{ icon: Languages, title: "Auf Deutsch", desc: "Technische Daten übersichtlich und strukturiert auf Deutsch aufbereitet." },
{ icon: GitCompare, title: "Visuelle Vergleiche", desc: "Tabellen und Diagramme zur Auswahl der richtigen Serie, ohne zehn Datenblätter zu öffnen." },
{ icon: Globe, title: "Zentraler Zugang", desc: "Direkte Links zu offizieller Dokumentation, Repositories und Beispielen." },
{ icon: Code, title: "Open Source", desc: "Beiträge sind auf Gitea herzlich willkommen." },
];
const featuresZh = [
{ icon: Languages, title: "精心整理的内容", desc: "结构化的技术数据,清晰呈现,没有数据手册的冗余。" },
{ icon: GitCompare, title: "可视化对比", desc: "用表格和图示选出合适的系列,无需翻阅十份数据手册。" },
{ icon: Globe, title: "集中入口", desc: "直达官方文档、代码仓库与示例的链接。" },
{ icon: Code, title: "开源", desc: "欢迎在 Gitea 上贡献。" },
];
const features = isZh ? featuresZh : isDe ? featuresDe : isFr ? featuresFr : isEs ? featuresEs : isEn ? featuresEn : featuresPt;
const nomesIdiomas = { pt: "Português", en: "English", es: "Español", fr: "Français", de: "Deutsch", "zh-CN": "简体中文" };
return (
<div className="site-canvas min-h-screen">
{/* Metadados E-E-A-T de autoria e organização para o Google */}
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd.paginaSobre(locale)) }}
/>
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd.paginaSobre(locale)) }} />
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify(
jsonLd.trilha([
{ nome: isZh ? "首页" : isDe ? "Startseite" : isFr ? "Accueil" : isEs ? "Inicio" : isPt ? "Início" : "Home", caminho: isZh ? "/zh-CN" : isDe ? "/de" : isFr ? "/fr" : isEn ? "/en" : isEs ? "/es" : "/" },
{ nome: isZh ? "关于本项目" : isDe ? "Über das Projekt" : isFr ? "À propos du projet" : isEs ? "Acerca del proyecto" : isPt ? "Sobre o Projeto" : "About the Project", caminho: isZh ? "/zh-CN/about" : isDe ? "/de/ueber-uns" : isFr ? "/fr/a-propos" : isEn ? "/en/about" : isEs ? "/es/acerca" : "/sobre" },
{ nome: t.inicio, caminho: homePath },
{ nome: t.metaTitulo, caminho: sobrePath },
])
),
}}
@@ -126,26 +450,17 @@ export default async function Sobre({ params }) {
isEn={isEn}
isEs={isEs}
isFr={isFr}
isDe={isDe} isZh={isZh}
trail={[{ label: isZh ? "关于" : isDe ? "Über uns" : isFr ? "À propos" : isEs ? "Acerca" : isPt ? "Sobre" : "About" }]}
isDe={isDe}
isZh={isZh}
trail={[{ label: t.trilha }]}
icon={Info}
label={isZh ? "独立项目" : isDe ? "Unabhängiges Projekt" : isFr ? "Projet indépendant" : isEs ? "Proyecto independiente" : isPt ? "Projeto independente" : "Independent project"}
title={isZh ? "关于 ESPDocs" : isDe ? "Über ESPDocs" : isFr ? "À propos d'ESPDocs" : isEs ? "Acerca de ESPDocs" : isPt ? "Sobre o ESPDocs" : "About ESPDocs"}
lede={
isZh ? "一个非官方平台,整理 ESP32 的技术信息,并直接链接到乐鑫官方文档。为开源硬件社区而做。" : isDe
? "Eine inoffizielle deutschsprachige Plattform, die technische Informationen zum ESP32 strukturiert und Sie mit der offiziellen Dokumentation von Espressif verbindet. Entwickelt für die Open-Hardware-Community."
: isFr
? "Une plateforme non officielle en français qui organise les informations techniques de l'ESP32 et vous oriente vers la documentation officielle d'Espressif. Conçue pour la communauté du matériel libre."
: isEs
? "Una plataforma no oficial, en español, que organiza la información técnica del ESP32 y le conecta con la documentación oficial de Espressif. Creada para la comunidad de hardware abierto."
: isPt
? "Uma plataforma não oficial, em português, que organiza as informações técnicas do ESP32 e leva você à documentação oficial da Espressif. Feita para a comunidade de hardware livre."
: "An unofficial platform organizing technical information about the ESP32 and linking directly to official Espressif documentation. Built for the open hardware community."
}
label={t.label}
title={t.tituloHero}
lede={t.lede}
>
<a href={REPOSITORIO} target="_blank" rel="noopener noreferrer" className="btn btn-primary">
<GiteaMark className="h-4 w-4" />
{isZh ? "查看代码仓库" : isDe ? "Repository ansehen" : isFr ? "Voir le dépôt" : isEs ? "Ver el repositorio" : isPt ? "Ver o repositório" : "View repository"}
{t.repo}
<ArrowUpRight className="h-4 w-4" aria-hidden="true" />
</a>
</PageHero>
@@ -153,92 +468,71 @@ export default async function Sobre({ params }) {
<div className="shell section grid grid-cols-1 gap-10 pt-12 sm:pt-16 lg:grid-cols-[1fr_22rem] lg:gap-14">
<div className="min-w-0 max-w-3xl space-y-12">
<section aria-labelledby="missao">
<h2 id="missao" className="section-title">{isZh ? "使命" : isDe ? "Mission" : isFr ? "Mission" : isEs ? "Misión" : isPt ? "Missão" : "Mission"}</h2>
<p className="mt-4 text-base leading-relaxed text-muted">
{isZh ? "通过一个整理规格、对比系列、介绍框架并集中官方文档链接的界面,让 ESP32 生态更易获取、更易理解。目标是节省固件与物联网项目的开发时间。" : isDe
? "Den Zugang zum und das Verständnis für das ESP32-Ökosystem durch eine deutsche Oberfläche erleichtern, die Spezifikationen bündelt, Serien vergleicht, Frameworks vorstellt und offizielle Dokumentationslinks zentralisiert. Ziel ist es, Entwicklungszeit bei Firmware und IoT-Projekten zu sparen."
: isFr
? "Faciliter l'accès et la compréhension de l'écosystème ESP32 avec une interface en français qui organise les spécifications, compare les séries, présente les frameworks et centralise les liens vers la documentation officielle. L'objectif est de vous faire gagner du temps dans le développement de firmware et d'IoT."
: isEs
? "Facilitar el acceso y la comprensión del ecosistema ESP32 con una interfaz en español que organiza especificaciones, compara series, presenta frameworks y centraliza los enlaces a la documentación oficial. El objetivo es ahorrar tiempo en el desarrollo de firmware e IoT."
: isPt
? "Facilitar o acesso e a compreensão do ecossistema ESP32 com uma interface em português que organiza especificações, compara séries, apresenta frameworks e centraliza os links da documentação oficial. O objetivo é economizar o seu tempo no desenvolvimento de firmware e IoT."
: "Facilitate access and understanding of the ESP32 ecosystem with an interface organizing specifications, comparing series, presenting frameworks and centralizing links to official documentation. The goal is to save development time in firmware and IoT projects."}
</p>
<h2 id="missao" className="section-title">{t.missaoTitulo}</h2>
<p className="mt-4 text-base leading-relaxed text-muted">{t.missao}</p>
</section>
<section aria-labelledby="porque">
<h2 id="porque" className="section-title">{isZh ? "ESPDocs 为什么存在" : isDe ? "Warum es ESPDocs gibt" : isFr ? "Pourquoi ESPDocs existe" : isEs ? "¿Por qué existe ESPDocs?" : isPt ? "Por que o ESPDocs existe" : "Why ESPDocs exists"}</h2>
<p className="mt-4 text-base leading-relaxed text-muted">
{isZh ? "ESP32 的信息常常分散在冗长的数据手册、技术参考手册(TRM)和零散的代码仓库中。ESPDocs 把这些数据浓缩并结构化,便于在深入工程文档之前快速评估。" : isDe
? "Informationen über den ESP32 sind oft über dichte Datenblätter, technische Referenzhandbücher (TRM) und sekundäre Repositories verstreut. ESPDocs verdichtet und strukturiert diese Daten für eine schnelle Vorabauswahl, bevor Sie tiefer in die offizielle Technik einsteigen."
: isFr
? "Les informations sur l'ESP32 sont souvent dispersées entre des fiches techniques denses, des manuels de référence technique (TRM) et des dépôts secondaires. ESPDocs condense et structure ces données pour une évaluation rapide avant d'approfondir l'ingénierie officielle."
: isEs
? "La información sobre el ESP32 suele estar dispersa entre hojas de datos densas, manuales de referencia técnica (TRM) y repositorios secundarios. ESPDocs condensa y estructura estos datos para una evaluación rápida antes de profundizar en la ingeniería oficial."
: isPt
? "As informações sobre os ESP32 costumam estar espalhadas entre datasheets densos, manuais de referência (TRM) e repositórios secundários, tudo em inglês. O ESPDocs condensa e estrutura esses dados para a triagem rápida, antes de você aprofundar na engenharia oficial."
: "Information regarding the ESP32 is often scattered across dense datasheets, Technical Reference Manuals (TRM), and secondary repositories. ESPDocs condenses and structures this data for rapid evaluation before diving into in-depth engineering documentation."}
</p>
<h2 id="porque" className="section-title">{t.porqueTitulo}</h2>
<p className="mt-4 text-base leading-relaxed text-muted">{t.porque}</p>
</section>
<section aria-labelledby="tem">
<h2 id="tem" className="section-title">{t.temTitulo}</h2>
<p className="mt-4 text-base leading-relaxed text-muted">{t.temLede}</p>
<ul className="mt-6 grid gap-3 sm:grid-cols-2">
{features.map(({ icon: Icon, title, desc }) => (
<li key={title} className="card flex items-start gap-4 p-5">
<span className="grid h-10 w-10 shrink-0 place-items-center rounded-full bg-accent-soft text-accent">
<Icon className="h-5 w-5" aria-hidden="true" />
</span>
<div>
<h3 className="font-semibold text-ink">{title}</h3>
<p className="mt-1 text-sm leading-relaxed text-muted">{desc}</p>
</div>
{ferramentas.map(({ icon: Icon, href, titulo, desc }) => {
const conteudo = (
<>
<span className="grid h-10 w-10 shrink-0 place-items-center rounded-full bg-accent-soft text-accent">
<Icon className="h-5 w-5" aria-hidden="true" />
</span>
<div>
<h3 className="font-semibold text-ink">{titulo}</h3>
<p className="mt-1 text-sm leading-relaxed text-muted">{desc}</p>
</div>
</>
);
return (
<li key={titulo}>
{href ? (
<Link href={getLinkHref(href)} className="card flex h-full items-start gap-4 p-5">
{conteudo}
</Link>
) : (
<div className="card flex h-full items-start gap-4 p-5">{conteudo}</div>
)}
</li>
);
})}
</ul>
</section>
<section aria-labelledby="idiomas">
<h2 id="idiomas" className="section-title">{t.idiomasTitulo}</h2>
<p className="mt-4 text-base leading-relaxed text-muted">{t.idiomas}</p>
<ul className="mt-5 flex flex-wrap gap-2">
{LANGS.map((l) => (
<li key={l}>
<Link
href={getLocalizedHref(`/${locale}/sobre`, l)}
hrefLang={l}
lang={l}
className={`btn btn-sm ${l === locale ? "btn-primary" : "btn-ghost"}`}
aria-current={l === locale ? "true" : undefined}
>
{nomesIdiomas[l]}
</Link>
</li>
))}
</ul>
</section>
<section aria-labelledby="contribuir">
<h2 id="contribuir" className="section-title">{isZh ? "如何参与贡献" : isDe ? "Wie Sie beitragen können" : isFr ? "Comment contribuer" : isEs ? "Cómo contribuir" : isPt ? "Como contribuir" : "How to contribute"}</h2>
<p className="mt-4 text-base leading-relaxed text-muted">
{isZh ? "欢迎提交翻译修正、表格改进和新的代码示例。项目与社区一同成长。" : isDe
? "Übersetzungskorrekturen, Tabellenanpassungen und neue Codebeispiele sind herzlich willkommen. Das Projekt wächst gemeinsam mit der Community."
: isFr
? "Les corrections de traduction, les ajustements de tableaux et les nouveaux exemples de code sont très appréciés. Le projet grandit avec la communauté."
: isEs
? "Las correcciones de traducción, ajustes en tablas y nuevos ejemplos de código son muy bienvenidos. El proyecto crece junto con la comunidad."
: isPt
? "Correções de tradução, ajustes em tabelas e novos exemplos de código são muito bem-vindos. O projeto cresce com a comunidade."
: "Translation fixes, table refinements and new code examples are welcome. The project grows with the community."}
</p>
<h2 id="contribuir" className="section-title">{t.contribuirTitulo}</h2>
<p className="mt-4 text-base leading-relaxed text-muted">{t.contribuir}</p>
<ol className="mt-6 space-y-3">
{(isZh ? ["在 Gitea 上 Fork 本仓库。", "实现改进,并核对官方技术资料。", "发起 Pull Request 并说明改动。"] : isDe
? [
"Erstellen Sie einen Fork des Repositories auf Gitea.",
"Implementieren Sie die Verbesserungen und prüfen Sie die offiziellen technischen Referenzen.",
"Eröffnen Sie einen Pull Request mit einer Beschreibung der vorgenommenen Änderungen.",
]
: isFr
? [
"Forkez le dépôt sur Gitea.",
"Apportez les améliorations et vérifiez les références techniques officielles.",
"Ouvrez une Pull Request décrivant les modifications apportées.",
]
: isEs
? [
"Haga un fork del repositorio en Gitea.",
"Implemente las mejoras y verifique las referencias técnicas oficiales.",
"Abra una solicitud de extracción (Pull Request) describiendo los cambios realizados.",
]
: isPt
? [
"Faça o fork do repositório no Gitea.",
"Implemente as melhorias e confira as referências técnicas oficiais.",
"Abra um Pull Request descrevendo os ajustes feitos.",
]
: [
"Fork the repository on Gitea.",
"Implement improvements and verify official technical references.",
"Open a Pull Request describing the changes.",
]
).map((passo, i) => (
{t.passos.map((passo, i) => (
<li key={passo} className="card flex items-center gap-4 px-5 py-4">
<span className="grid h-8 w-8 shrink-0 place-items-center rounded-full bg-ink text-sm font-semibold text-canvas" aria-hidden="true">
{i + 1}
@@ -250,110 +544,46 @@ export default async function Sobre({ params }) {
</section>
<section aria-labelledby="acessibilidade">
<h2 id="acessibilidade" className="section-title">{isZh ? "无障碍" : isDe ? "Barrierefreiheit" : isFr ? "Accessibilité" : isEs ? "Accesibilidad" : isPt ? "Acessibilidade" : "Accessibility"}</h2>
<p className="mt-4 text-base leading-relaxed text-muted">
{isZh ? "ESPDocs 重视可读性、高对比度(WCAG AAA 级)和完整的键盘导航。如果你遇到任何无障碍或导航上的障碍,请在代码仓库中提交 issue。" : isDe
? "ESPDocs legt großen Wert auf Lesbarkeit, hohen Kontrast (WCAG-Stufe AAA) und vollständige Tastaturnavigation. Wenn Sie auf Lese- oder Navigationsbarrieren stoßen, eröffnen Sie bitte ein Issue im Repository."
: isFr
? "ESPDocs privilégie la lisibilité, un contraste élevé (niveau AAA du WCAG) et une navigation complète au clavier. Si vous rencontrez un obstacle de lecture ou de navigation, ouvrez un ticket dans le dépôt."
: isEs
? "ESPDocs prioriza la legibilidad, el alto contraste (nivel AAA de WCAG) y la navegación completa por teclado. Si encuentra alguna barrera de lectura o navegación, abra un issue en el repositorio."
: isPt
? "O ESPDocs prioriza a legibilidade, o contraste alto (nível AAA da WCAG) e a navegação completa por teclado. Se encontrar alguma barreira de leitura ou navegação, abra uma issue no repositório."
: "ESPDocs prioritizes readability, high contrast (WCAG AAA level), and full keyboard navigation. If you encounter any accessibility or navigation hurdles, please open an issue in the repository."}
</p>
<h2 id="acessibilidade" className="section-title">{t.acessTitulo}</h2>
<p className="mt-4 text-base leading-relaxed text-muted">{t.acess}</p>
</section>
</div>
<aside className="space-y-5 lg:sticky lg:top-28 lg:self-start" aria-label={isZh ? "作者与法律声明" : isDe ? "Autor und rechtlicher Hinweis" : isFr ? "Auteur et mentions légales" : isEs ? "Autor y aviso legal" : isPt ? "Autor e aviso legal" : "Author and legal notice"}>
<aside className="space-y-5 lg:sticky lg:top-28 lg:self-start" aria-label={t.asideLabel}>
<div className="panel p-6 sm:p-7">
<div className="flex items-center gap-4">
<span className="grid h-16 w-16 shrink-0 place-items-center rounded-2xl border border-line bg-white">
<Image src="/logo.png" alt="" aria-hidden="true" width={48} height={48} className="h-12 w-12 object-contain" />
</span>
<Image src="/autor.jpg" alt="" aria-hidden="true" width={64} height={64} className="h-16 w-16 shrink-0 rounded-2xl border border-line object-cover" />
<div>
<h2 className="font-display text-lg font-semibold text-ink">Lucas Rayan Guerra</h2>
<p className="text-sm text-muted">{isZh ? "Ciência Embarcada 创始人" : isDe ? "Gründer von Ciência Embarcada" : isFr ? "Créateur de Ciência Embarcada" : isEs ? "Creador de Ciência Embarcada" : isPt ? "Criador do Ciência Embarcada" : "Creator of Ciência Embarcada"}</p>
<h2 className="font-display text-lg font-semibold text-ink">{SITE.autor}</h2>
<p className="text-sm text-muted">{t.autorCargo}</p>
</div>
</div>
<div className="mt-5 space-y-3 text-sm leading-relaxed text-muted">
{isZh ? (
<>
<p>
系统开发技术员,UFRPE 计算机科学在读,区块链与密码学研究者。
</p>
<p>
Semine AgriTech 软件总监,并在 REC&apos;n&apos;Play 等活动中作演讲,分享硬件、物联网和网络安全方面的见解。
</p>
</>
) : isDe ? (
<>
<p>
Systementwicklungstechniker, Informatikstudent an der UFRPE und Forscher im Bereich Blockchain und Kryptographie.
</p>
<p>
Software-Direktor bei Semine AgriTech und Referent bei Veranstaltungen wie REC&apos;n&apos;Play, der Inhalte zu Hardware, IoT und Cybersicherheit vermittelt.
</p>
</>
) : isFr ? (
<>
<p>
Technicien en développement de systèmes, étudiant en informatique à l'UFRPE et chercheur en blockchain et cryptographie.
</p>
<p>
Directeur logiciel chez Semine AgriTech et conférencier lors d'événements comme REC&apos;n&apos;Play, partageant des connaissances sur le matériel, l'IoT et la cybersécurité.
</p>
</>
) : isEs ? (
<>
<p>
Técnico en Desarrollo de Sistemas, estudiante de Ciencias de la Computación en la UFRPE e investigador en Blockchain y Criptografía.
</p>
<p>
Director de Software en Semine AgriTech y ponente en eventos como REC&apos;n&apos;Play, compartiendo contenido sobre hardware, IoT y ciberseguridad.
</p>
</>
) : isPt ? (
<>
<p>
Técnico em Desenvolvimento de Sistemas, estudante de Ciência da Computação na UFRPE e pesquisador de
Blockchain e Criptografia.
</p>
<p>
Diretor de Software na Semine AgriTech e palestrante em eventos como o REC&apos;n&apos;Play, compartilha
conteúdo sobre hardware, IoT e cibersegurança.
</p>
</>
) : (
<>
<p>
Systems development technician, Computer Science student at UFRPE, and researcher in Blockchain and Cryptography.
</p>
<p>
Software Director at Semine AgriTech and speaker at events like REC&apos;n&apos;Play, sharing insights on hardware, IoT, and cybersecurity.
</p>
</>
)}
{t.autorBio.map((p) => (
<p key={p}>{p}</p>
))}
</div>
<h3 className="mt-5 text-sm font-semibold text-ink">{t.destaquesTitulo}</h3>
<ul className="mt-2 list-disc space-y-1 pl-5 text-sm leading-relaxed text-muted">
{t.destaques.map((d) => (
<li key={d}>{d}</li>
))}
</ul>
<div className="mt-6 grid gap-2">
<a href={SITE.autorUrl} target="_blank" rel="noopener noreferrer" className="btn btn-primary w-full">
{t.siteAutor}
<ArrowUpRight className="h-4 w-4" aria-hidden="true" />
</a>
<a href={SITE.blog} target="_blank" rel="noopener noreferrer" className="btn btn-ghost w-full">
{t.blog}
<ArrowUpRight className="h-4 w-4" aria-hidden="true" />
</a>
</div>
<a href="https://cienciaembarcada.com.br" target="_blank" rel="noopener noreferrer" className="btn btn-ghost mt-6 w-full">
{isZh ? "访问 Ciência Embarcada" : isDe ? "Ciência Embarcada besuchen" : isFr ? "Visiter Ciência Embarcada" : isEs ? "Visitar Ciência Embarcada" : isPt ? "Visitar o Ciência Embarcada" : "Visit Ciência Embarcada"}
<ArrowUpRight className="h-4 w-4" aria-hidden="true" />
</a>
</div>
<div className="callout callout-warn">
<p className="font-semibold text-ink">{isZh ? "法律声明" : isDe ? "Rechtlicher Hinweis" : isFr ? "Mentions légales" : isEs ? "Aviso legal" : isPt ? "Aviso legal" : "Legal notice"}</p>
<p className="mt-1">
{isZh ? "ESPDocs 是一个聚合与整理平台。所引用的手册和代码仓库归乐鑫系统(Espressif Systems)所有。在关键任务或商业设计中,请始终查阅官方文档。" : isDe
? "ESPDocs ist ein Aggregator und Kurator. Die referenzierten Handbücher und Repositories sind Eigentum von Espressif Systems. Konsultieren Sie bei geschäftskritischen oder kommerziellen Projekten stets die offizielle Dokumentation."
: isFr
? "ESPDocs est une plateforme d'agrégation et de synthèse. Les manuels et dépôts référencés appartiennent à Espressif Systems. Pour les projets critiques ou commerciaux, consultez systématiquement la documentation officielle."
: isEs
? "ESPDocs es un agregador y organizador. Los manuales y repositorios referenciados pertenecen a Espressif Systems. En proyectos críticos o comerciales, consulte siempre la documentación oficial."
: isPt
? "O ESPDocs é um agregador e organizador. Os manuais e repositórios referenciados pertencem à Espressif Systems. Em projetos críticos ou comerciais, consulte sempre a documentação oficial."
: "ESPDocs is an aggregator and curation platform. Referenced manuals and repositories are property of Espressif Systems. In mission-critical or commercial designs, always consult official documentation."}
</p>
<p className="font-semibold text-ink">{t.avisoTitulo}</p>
<p className="mt-1">{t.aviso}</p>
</div>
</aside>
</div>
-4
View File
@@ -437,10 +437,6 @@ export default function Header() {
</div>
);
})}
<Link href={getLinkHref("/sobre")} className={`nav-link ${isActivePath(pathname, "/sobre", currentLocale) ? "is-active" : ""}`} aria-current={isActivePath(pathname, "/sobre", currentLocale) ? "page" : undefined}>
{isPt ? "Sobre" : isEs ? "Acerca de" : isFr ? "À propos" : isZh ? "关于" : isDe ? "Über uns" : "About"}
</Link>
</nav>
<div className="flex items-center gap-1 sm:gap-1.5">
+2
View File
@@ -482,6 +482,8 @@ export const jsonLd = {
name: SITE.autor,
url: SITE.autorUrl,
email: SITE.autorEmail,
jobTitle: "Operations Technician",
worksFor: { "@type": "Organization", name: "RNP (Rede Nacional de Ensino e Pesquisa)", url: "https://www.rnp.br" },
sameAs: [
SITE.autorLinkedin,
SITE.repositorio,
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB