Files
portifolio-evandrodevbr/app/layout.tsx
T
Evandro Fonseca Junior b791b7de9e feat: control room hero, SEO/AEO optimization and design system fixes
Hero: replace particle field with cobe globe (Capricorn view, multi-axis drag, reduced-motion safe), telemetry HUD with pointer parallax, particle text build effect, Space Grotesk display font. SEO: short titles with template, PT-BR accents, twitter cards on dynamic cases, escaped JSON-LD via lib/jsonld.ts, CSP report-only, 25 service FAQs answer-first. Design: fix TW4 layered reset killing spacing utilities, literal @theme tokens, mobile hero overflow, header overlap, empty case cards. Remove framer-motion (unified on motion/react), header version badge, phone number from hero CTA. Production build verified (24 static pages).
2026-08-27 10:55:21 -03:00

329 lines
9.8 KiB
TypeScript

import type { Metadata, Viewport } from "next";
import { Geist_Mono, Space_Grotesk } from "next/font/google";
import localFont from "next/font/local";
import type { ReactNode } from "react";
import { safeJsonLd } from "@/lib/jsonld";
import { regionCities, siteUrl } from "@/lib/site-content";
import { getWhatsAppNumber } from "@/lib/whatsapp";
import CinematicOverlays from "./components/cinematic/CinematicOverlays";
import GoogleAnalytics from "./components/GoogleAnalytics";
import { Header } from "./components/Header";
import { RouteTransition } from "./components/RouteTransition";
import { AnimationProvider } from "./providers/AnimationProvider";
import { SmoothScrollProvider } from "./providers/SmoothScrollProvider";
import "./globals.css";
const defaultTitle = "Evandro Fonseca Junior — Engenharia de Software";
const seoDescription =
"Evandro Fonseca Junior é engenheiro da computação, desenvolvedor de software e criação de sites para empresas em Garuva, Joinville, São Francisco do Sul, Itapoá, Jaraguá do Sul, Norte de Santa Catarina e Curitiba. Atua com Next.js, TypeScript, Rust, IoT, integração de sistemas e produtos críticos.";
const spaceGrotesk = Space_Grotesk({
subsets: ["latin"],
weight: ["400", "500", "600", "700"],
display: "swap",
variable: "--font-space-grotesk",
});
const geistMono = Geist_Mono({
subsets: ["latin"],
weight: ["400", "500", "600"],
display: "swap",
variable: "--font-geist-mono",
});
const monumentExtended = localFont({
src: [
{
path: "../public/fonts/MonumentExtended-Regular.otf",
weight: "400",
style: "normal",
},
{
path: "../public/fonts/MonumentExtended-Ultrabold.otf",
weight: "800",
style: "normal",
},
],
display: "swap",
variable: "--font-monument-extended",
});
export const metadata: Metadata = {
title: {
default: defaultTitle,
template: "%s | Evandro Fonseca Junior",
},
description: seoDescription,
keywords: [
"desenvolvedor de software em Garuva",
"engenheiro da computação em Garuva",
"desenvolvedor de sites em Garuva",
"desenvolvedor de software em Joinville",
"engenheiro da computação em Joinville",
"desenvolvedor de sites em Joinville",
"criação de sites em Joinville",
"programador em Joinville",
"desenvolvedor de software em Curitiba",
"engenheiro da computação em Curitiba",
"criação de sites em Curitiba",
"desenvolvedor de sites em Curitiba",
"programador em Curitiba",
"desenvolvedor de software em São Francisco do Sul",
"desenvolvedor de software em Itapoá",
"desenvolvedor de software em Jaraguá do Sul",
"desenvolvedor full stack Santa Catarina",
"engenharia de software Norte de Santa Catarina",
"criação de sites Norte de Santa Catarina",
"desenvolvimento de sistemas web Santa Catarina",
"Next.js",
"TypeScript",
"Rust",
"IoT",
"arquitetura de software",
],
authors: [{ name: "Evandro Fonseca Junior" }],
creator: "Evandro Fonseca Junior",
publisher: "Evandro Fonseca Junior",
applicationName: "Evandro.dev.br",
category: "Technology",
metadataBase: new URL(siteUrl),
alternates: {
canonical: "/",
},
formatDetection: {
email: false,
address: false,
telephone: false,
},
openGraph: {
title: defaultTitle,
description: seoDescription,
url: siteUrl,
siteName: "Evandro.dev.br",
locale: "pt_BR",
type: "website",
images: [
{
url: "/opengraph-image",
width: 1200,
height: 630,
alt: "Evandro Fonseca Junior | Engenharia de Software, Next.js, Tauri e Rust",
},
],
},
twitter: {
card: "summary_large_image",
title: defaultTitle,
description: seoDescription,
creator: "@evandrodevbr",
images: ["/opengraph-image"],
},
robots: {
index: true,
follow: true,
googleBot: {
index: true,
follow: true,
"max-video-preview": -1,
"max-image-preview": "large",
"max-snippet": -1,
},
},
};
export const viewport: Viewport = {
themeColor: "#000000",
width: "device-width",
initialScale: 1,
maximumScale: 5,
};
interface RootLayoutProps {
children: ReactNode;
}
export default function RootLayout({ children }: Readonly<RootLayoutProps>) {
const jsonLd = {
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": `${siteUrl}/#website`,
url: siteUrl,
name: "Evandro.dev.br",
inLanguage: "pt-BR",
description: seoDescription,
},
{
"@type": "ProfilePage",
"@id": `${siteUrl}/curriculo#profile`,
url: `${siteUrl}/curriculo`,
inLanguage: "pt-BR",
mainEntity: { "@id": `${siteUrl}/#person` },
},
{
"@type": "Person",
"@id": `${siteUrl}/#person`,
name: "Evandro Fonseca Junior",
alternateName: ["Evandro.dev", "evandrodevbr"],
jobTitle:
"Engenheiro da Computação e Desenvolvedor de Software Full-Stack",
description: seoDescription,
url: siteUrl,
image: `${siteUrl}/opengraph-image`,
telephone: `+${getWhatsAppNumber()}`,
sameAs: [
"https://github.com/evandrodevbr",
"https://www.linkedin.com/in/evandro-fonseca-junior-0969aa1b0/",
"https://www.instagram.com/evandrodevbr/",
],
address: {
"@type": "PostalAddress",
addressLocality: "Garuva",
addressRegion: "SC",
addressCountry: "BR",
},
homeLocation: {
"@type": "Place",
name: "Garuva, Santa Catarina, Brasil",
geo: {
"@type": "GeoCoordinates",
latitude: -26.0281,
longitude: -48.8467,
},
},
hasOccupation: {
"@type": "Occupation",
name: "Engenheiro da Computação e Desenvolvedor de Software",
occupationalCategory: "15-1252.00 Software Developers",
},
knowsAbout: [
"Engenharia de Software",
"Next.js",
"Tauri",
"Rust",
"Arquitetura de Software",
"Sistemas Críticos",
"Integração hardware e software",
"IoT",
"TypeScript",
"Cloud Computing",
],
},
{
"@type": "ProfessionalService",
"@id": `${siteUrl}/#services`,
name: "Evandro Fonseca Junior | Engenharia de Software, Criação de Sites e Consultoria Técnica",
url: siteUrl,
image: `${siteUrl}/opengraph-image`,
telephone: `+${getWhatsAppNumber()}`,
priceRange: "$$",
address: {
"@type": "PostalAddress",
addressLocality: "Garuva",
addressRegion: "SC",
addressCountry: "BR",
},
geo: {
"@type": "GeoCoordinates",
latitude: -26.0281,
longitude: -48.8467,
},
description:
"Serviço de engenharia de software, criação de sites, arquitetura de software, integrações críticas e consultoria técnica para Next.js, Tauri, Rust, IoT e produtos conectados.",
areaServed: [
...regionCities.map((name) => ({ "@type": "City", name })),
{ "@type": "AdministrativeArea", name: "Norte de Santa Catarina" },
{ "@type": "AdministrativeArea", name: "Paraná" },
{
"@type": "GeoCircle",
geoMidpoint: {
"@type": "GeoCoordinates",
latitude: -26.0281,
longitude: -48.8467,
},
geoRadius: "150000",
},
{ "@type": "Country", name: "Brasil" },
{ "@type": "Place", name: "Atuação remota" },
],
provider: {
"@id": `${siteUrl}/#person`,
},
serviceType: [
"Engenharia de Software",
"Criação de Sites",
"Consultoria Técnica",
"Arquitetura de Software",
"Integração hardware + software",
"Desenvolvimento Next.js",
"Desenvolvimento Tauri",
"Desenvolvimento Rust",
"IoT",
"Sistemas Críticos",
],
hasOfferCatalog: {
"@type": "OfferCatalog",
name: "Modelos de contratação",
itemListElement: [
{
"@type": "Offer",
itemOffered: {
"@type": "Service",
name: "Criação de sites institucionais e sistemas web",
},
},
{
"@type": "Offer",
itemOffered: {
"@type": "Service",
name: "Auditoria e diagnóstico técnico",
},
},
{
"@type": "Offer",
itemOffered: {
"@type": "Service",
name: "Ciclos de engenharia",
},
},
{
"@type": "Offer",
itemOffered: {
"@type": "Service",
name: "Fractional Tech Lead",
},
},
],
},
},
],
};
return (
<html
lang="pt-BR"
className={`${spaceGrotesk.variable} ${geistMono.variable} ${monumentExtended.variable}`}
>
<body>
<SmoothScrollProvider>
<AnimationProvider>
<script type="application/ld+json">{safeJsonLd(jsonLd)}</script>
<a className="skip-link" href="#main-content">
Pular para o conteúdo
</a>
<Header />
<CinematicOverlays />
<RouteTransition>
<div id="main-content" tabIndex={-1}>
{children}
</div>
</RouteTransition>
<GoogleAnalytics />
</AnimationProvider>
</SmoothScrollProvider>
</body>
</html>
);
}