import { paginaMeta } from "@/lib/seo"; import Link from "next/link"; import Header from "@/components/Header"; import Footer from "@/components/Footer"; import { notFound } from "next/navigation"; import CodeExample from "@/components/CodeExample"; import frameworksData from "@/public/frameworks.json"; import { ArrowLeft, BookOpen, Code, Layers, Zap, Compass, CheckCircle, Terminal, FileText, Sliders, Award, Target } from "lucide-react"; export default async function FrameworkDetail({ params }) { const { key } = await params; const framework = frameworksData[key]; if (!framework) { notFound(); } const features = framework.caracteristicas || []; const useCases = framework.casos_uso || []; return (
{/* Back navigation link */}
Voltar para Frameworks {/* Top Info Banner Panel */}
{framework.icone}

{framework.nome}

{framework.nome_completo}

{framework.tipo}
{/* Call to Actions CTA Grid */}
{framework.documentacao && ( Documentação Oficial )} {framework.repositorio && ( Repositório no GitHub )}

{framework.descricao}

{/* Framework Core Specifications Grid */}

LINGUAGEM DE DESENVOLVIMENTO

{framework.linguagem}

Sintaxe principal do ecossistema

CATEGORIA DO FRAMEWORK

{framework.tipo}

Classificação de arquitetura

OBJETIVO PRINCIPAL

{framework.funcao_principal}

{/* side-by-side details block */}
{/* Left specs card */}

Características de Destaque

    {features.map((feature, i) => (
  • {feature}
  • ))}

Casos de Uso Recomendados

{useCases.map((useCase, i) => (
{useCase}
))}
{/* Right summary metadata card */}

Resumo Técnico

Nome Oficial {framework.nome}
Linguagem {framework.linguagem}
Tipo / Suite {framework.tipo}
Cor Temática
{framework.cor}
{/* Coding examples container (renders only if framework has examples defined) */} {framework.exemplos && (
)} {/* Technical documentation double CTAs */}
{framework.documentacao && ( Documentação do Desenvolvedor )} {framework.repositorio && ( Código Fonte no GitHub )}
); } export async function generateMetadata({ params }) { const { key } = await params; const framework = frameworksData[key]; if (!framework) { return { title: "Framework não encontrado", robots: { index: false, follow: false } }; } return { ...paginaMeta({ titulo: `${framework.nome} para ESP32`, descricao: `${framework.nome_completo}: ${framework.descricao} Guia em português com exemplo de código e quando usar.`, caminho: `/frameworks/${encodeURIComponent(key)}`, tipo: "article", keywords: [ 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(frameworksData).map((key) => ({ key: key, })); }