CI / verify (push) Failing after 5m29s
Estado do disco em 14/10/2026, sem filtrar. Inclui as copias .sync-conflict-* do Syncthing de 07/10 e os 15 arquivos que o Syncthing apagou; todo esse conteudo ja existia em outros commits. So havia fora do Git: AGENTS.md, CLAUDE.md e a alteracao em data/project-health.json.
84 lines
2.0 KiB
TypeScript
84 lines
2.0 KiB
TypeScript
import { type ServicePageContent, siteName, siteUrl } from "./site-content";
|
|
|
|
export const SEO_IDS = {
|
|
website: `${siteUrl}/#website`,
|
|
person: `${siteUrl}/#person`,
|
|
profilePage: `${siteUrl}/curriculo#profile-page`,
|
|
} as const;
|
|
|
|
export function buildWebSiteJsonLd() {
|
|
return {
|
|
"@type": "WebSite",
|
|
"@id": SEO_IDS.website,
|
|
url: siteUrl,
|
|
name: siteName,
|
|
inLanguage: "pt-BR",
|
|
publisher: { "@id": SEO_IDS.person },
|
|
} as const;
|
|
}
|
|
|
|
export function buildPersonJsonLd() {
|
|
return {
|
|
"@type": "Person",
|
|
"@id": SEO_IDS.person,
|
|
name: "Evandro Fonseca Junior",
|
|
url: siteUrl,
|
|
image: `${siteUrl}/edev.jpg`,
|
|
homeLocation: {
|
|
"@type": "Place",
|
|
name: "Garuva, Santa Catarina, Brasil",
|
|
},
|
|
sameAs: [
|
|
"https://github.com/evandrodevbr",
|
|
"https://www.linkedin.com/in/evandro-fonseca-junior-0969aa1b0/",
|
|
],
|
|
} as const;
|
|
}
|
|
|
|
export function buildProfilePageJsonLd() {
|
|
return {
|
|
"@type": "ProfilePage",
|
|
"@id": SEO_IDS.profilePage,
|
|
url: `${siteUrl}/curriculo`,
|
|
inLanguage: "pt-BR",
|
|
isPartOf: { "@id": SEO_IDS.website },
|
|
mainEntity: { "@id": SEO_IDS.person },
|
|
} as const;
|
|
}
|
|
|
|
export function buildServiceJsonLd(service: ServicePageContent) {
|
|
const pageUrl = `${siteUrl}/servicos/${service.slug}`;
|
|
|
|
return {
|
|
"@type": "Service",
|
|
"@id": `${pageUrl}#service`,
|
|
url: pageUrl,
|
|
name: service.navLabel,
|
|
description: service.metaDescription,
|
|
provider: { "@id": SEO_IDS.person },
|
|
areaServed: [
|
|
{ "@type": "City", name: "Garuva" },
|
|
{
|
|
"@type": "AdministrativeArea",
|
|
name: "Norte de Santa Catarina",
|
|
},
|
|
],
|
|
} as const;
|
|
}
|
|
|
|
export function buildBreadcrumbList(
|
|
pageUrl: string,
|
|
items: readonly (readonly [name: string, url: string])[],
|
|
) {
|
|
return {
|
|
"@type": "BreadcrumbList",
|
|
"@id": `${pageUrl}#breadcrumb`,
|
|
itemListElement: items.map(([name, item], index) => ({
|
|
"@type": "ListItem" as const,
|
|
position: index + 1,
|
|
name,
|
|
item,
|
|
})),
|
|
} as const;
|
|
}
|