import { paginaMeta, jsonLd } from "@/lib/seo";
import Link from "next/link";
import Header from "@/components/Header";
import Footer from "@/components/Footer";
import PageHero from "@/components/PageHero";
import { notFound } from "next/navigation";
import CodeExample from "@/components/CodeExample";
import frameworksDataPt from "@/public/frameworks.json";
import frameworksDataEn from "@/data/en/frameworks.json";
import { getLocalizedHref } from "@/i18n/links";
import { ArrowRight, ArrowUpRight, BookOpen, Box, Check, Code, Layers } from "lucide-react";
export default async function FrameworkDetail({ params }) {
const { locale, key } = await params;
const isEn = locale === "en";
const currentLocale = isEn ? "en" : "pt";
const frameworksData = isEn ? frameworksDataEn : frameworksDataPt;
const framework = frameworksData[key];
if (!framework) {
notFound();
}
const features = framework.caracteristicas || [];
const useCases = framework.casos_uso || [];
const isEspIdf = key === "ESP-IDF";
return (
{/* Ficha técnica do framework e trilha de navegação para o Google */}
{framework.documentacao && (
{isEn ? "Official documentation" : "Documentação oficial"}
)}
{framework.repositorio && (
{isEn ? "GitHub repository" : "Repositório no GitHub"}
)}
{isEn ? "Language" : "Linguagem"}
{framework.linguagem}
{framework.nome_completo}
{isEn ? "Category" : "Categoria"}
{framework.tipo}
{isEn ? "Main purpose" : "Objetivo principal"}
{framework.funcao_principal}
{isEn ? "Key features" : "Recursos de destaque"}
{features.map((feature) => (
{feature}
))}
{isEn ? "When to use" : "Quando usar"}
{useCases.map((useCase) => (
{useCase}
))}
{isEspIdf && (
{isEn ? "ESP-IDF 4.4 or higher" : "ESP-IDF 4.4 ou superior"}
{isEn ? "Modules with the ESP Component Registry" : "Módulos com o ESP Component Registry"}
{isEn ? (
<>
In ESP-IDF v4.4+ and v5.x projects, libraries no longer need to be added as Git submodules. Use{" "}
idf_component.yml and the command{" "}
idf.py add-dependency to download display drivers (LVGL), industrial stacks (Modbus), RainMaker, and more.
>
) : (
<>
Nos projetos ESP-IDF v4.4+ e v5.x, as bibliotecas não precisam mais entrar como submódulos Git. Use o{" "}
idf_component.yml e o comando{" "}
idf.py add-dependency para baixar drivers de display (LVGL), pilhas industriais (Modbus), RainMaker e mais.
>
)}
{isEn ? "Explore components" : "Explorar componentes"}
)}
{framework.exemplo && (
)}
{isEn ? "View all frameworks" : "Ver todos os frameworks"}
);
}
export async function generateMetadata({ params }) {
const { locale, key } = await params;
const isEn = locale === "en";
const currentLocale = isEn ? "en" : "pt";
const frameworksData = isEn ? frameworksDataEn : frameworksDataPt;
const framework = frameworksData[key];
if (!framework) {
return { title: isEn ? "Framework not found" : "Framework não encontrado", robots: { index: false, follow: false } };
}
return {
...paginaMeta({
titulo: isEn ? `${framework.nome} for ESP32 · Technical Guide` : `${framework.nome} para ESP32 · Guia Técnico`,
descricao: isEn
? `${framework.nome_completo}: ${framework.descricao} Guide with practical code examples and use cases.`
: `${framework.nome_completo}: ${framework.descricao} Guia com exemplos práticos de código e casos de uso.`,
caminho: `/frameworks/${encodeURIComponent(key)}`,
tipo: "article",
locale: currentLocale,
keywords: isEn
? [
framework.nome, framework.nome_completo,
`${framework.nome} ESP32`, `program ESP32 with ${framework.nome}`,
"ESP32", "ESP32 framework",
]
: [
framework.nome, framework.nome_completo,
`${framework.nome} ESP32`, `programar ESP32 com ${framework.nome}`,
"ESP32", "framework ESP32",
],
}),
other: { "article:section": "Frameworks" },
};
}
export async function generateStaticParams() {
return Object.keys(frameworksDataPt).map((key) => ({
key: key,
}));
}