Adds dynamic case study and curriculo routes, project health monitoring for live demo status, and strengthens local SEO (structured data, service-area targeting for Garuva/Joinville/Curitiba, a dedicated "criação de sites" service page) so search results better match the professional title (Engenheiro da Computação) and experience (5 anos). Co-Authored-By: Claude Sonnet 5 <[email protected]>
320 lines
9.5 KiB
TypeScript
320 lines
9.5 KiB
TypeScript
import type { Metadata, Viewport } from "next";
|
|
import { Geist_Mono, Syne } from "next/font/google";
|
|
import localFont from "next/font/local";
|
|
import type { ReactNode } from "react";
|
|
import { regionCities, siteUrl } from "@/lib/site-content";
|
|
import { getWhatsAppNumber } from "@/lib/whatsapp";
|
|
import CinematicOverlays from "./components/cinematic/CinematicOverlays";
|
|
import GoogleAnalytics from "./components/GoogleAnalytics";
|
|
import { RouteTransition } from "./components/RouteTransition";
|
|
import { AnimationProvider } from "./providers/AnimationProvider";
|
|
import { SmoothScrollProvider } from "./providers/SmoothScrollProvider";
|
|
import "./globals.css";
|
|
|
|
const seoTitle =
|
|
"Engenheiro da Computação e Desenvolvedor de Software em Garuva, Joinville e Curitiba | Evandro Fonseca Junior";
|
|
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 syne = Syne({
|
|
subsets: ["latin"],
|
|
weight: ["400", "500", "600", "700", "800"],
|
|
display: "swap",
|
|
variable: "--font-syne",
|
|
});
|
|
|
|
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: seoTitle,
|
|
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: seoTitle,
|
|
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: seoTitle,
|
|
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 Tecnica",
|
|
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:
|
|
"Servico de engenharia de software, criacao de sites, arquitetura de software, integracoes criticas e consultoria tecnica 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 Tecnica",
|
|
"Arquitetura de Software",
|
|
"Integracao hardware + software",
|
|
"Desenvolvimento Next.js",
|
|
"Desenvolvimento Tauri",
|
|
"Desenvolvimento Rust",
|
|
"IoT",
|
|
"Sistemas Criticos",
|
|
],
|
|
hasOfferCatalog: {
|
|
"@type": "OfferCatalog",
|
|
name: "Modelos de contratacao",
|
|
itemListElement: [
|
|
{
|
|
"@type": "Offer",
|
|
itemOffered: {
|
|
"@type": "Service",
|
|
name: "Criação de sites institucionais e sistemas web",
|
|
},
|
|
},
|
|
{
|
|
"@type": "Offer",
|
|
itemOffered: {
|
|
"@type": "Service",
|
|
name: "Auditoria e diagnostico tecnico",
|
|
},
|
|
},
|
|
{
|
|
"@type": "Offer",
|
|
itemOffered: {
|
|
"@type": "Service",
|
|
name: "Ciclos de engenharia",
|
|
},
|
|
},
|
|
{
|
|
"@type": "Offer",
|
|
itemOffered: {
|
|
"@type": "Service",
|
|
name: "Fractional Tech Lead",
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
],
|
|
};
|
|
|
|
return (
|
|
<html
|
|
lang="pt-BR"
|
|
className={`${syne.variable} ${geistMono.variable} ${monumentExtended.variable}`}
|
|
>
|
|
<body>
|
|
<SmoothScrollProvider>
|
|
<AnimationProvider>
|
|
<script
|
|
type="application/ld+json"
|
|
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
|
|
/>
|
|
<CinematicOverlays />
|
|
<RouteTransition>{children}</RouteTransition>
|
|
<GoogleAnalytics />
|
|
</AnimationProvider>
|
|
</SmoothScrollProvider>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|