feat(servicos): ofertas no topo de /servicos, capa por assunto e diagramas

/servicos abre com as 3 ofertas e depois outros serviços; H1 de criação de sites e de engenharia com o nome da oferta; capa de cada serviço pelo assunto (SEV fora do próprio case cai de ~11 para 2 imagens); diagrama de fluxo em SVG nos serviços sem case; cases com o que o cliente passou a poder fazer e contato logo depois de Como ficou; FAQ num componente só; lastmod por rota; ProfessionalService com areaServed.
This commit is contained in:
Evandro Fonseca Junior committed 2026-10-14 19:14:46 -03:00
1 parent e63f3c2ebd
commit fc44a69fb3
41 files changed
+2486 -550

No files matched your search

+38
View File
@@ -3,6 +3,7 @@ import {
type CaseStudyContent,
isClientCase,
type ServicePageContent,
serviceOffers,
siteName,
siteUrl,
} from "./site-content";
@@ -13,6 +14,7 @@ export const SEO_IDS = {
website: `${siteUrl}/#website`,
person: `${siteUrl}/#person`,
profilePage: `${siteUrl}/curriculo#profile-page`,
professionalService: `${siteUrl}/#professional-service`,
} as const;
export function buildWebSiteJsonLd() {
@@ -64,6 +66,42 @@ export function buildProfilePageJsonLd() {
} as const;
}
/**
* O negócio como `ProfessionalService`: onde atende (Garuva, Joinville, Santa Catarina e o Brasil, de forma remota) e as três ofertas
* da home como catálogo. Sem endereço de rua, preço, prazo, telefone ou e-mail: o que não está publicado no site não entra nos
* dados estruturados. Só o construtor: quem o coloca na página é a home.
*/
export function buildProfessionalServiceJsonLd() {
return {
"@type": "ProfessionalService",
"@id": SEO_IDS.professionalService,
name: siteName,
url: siteUrl,
description:
"Sites, sistemas web e aplicativos sob medida, e revisão de sistemas que já existem, inclusive feitos com IA. Garuva e Joinville (SC), remoto em todo o Brasil.",
founder: { "@id": SEO_IDS.person },
areaServed: [
{ "@type": "City", name: "Garuva" },
{ "@type": "City", name: "Joinville" },
{ "@type": "AdministrativeArea", name: "Santa Catarina" },
{ "@type": "Country", name: "Brasil" },
],
hasOfferCatalog: {
"@type": "OfferCatalog",
name: "Serviços de desenvolvimento de software",
itemListElement: serviceOffers.map((offer) => ({
"@type": "Offer",
itemOffered: {
"@type": "Service",
name: offer.name,
description: offer.summary,
url: `${siteUrl}${offer.href}`,
},
})),
},
} as const;
}
export function buildServiceJsonLd(service: ServicePageContent) {
const pageUrl = `${siteUrl}/servicos/${service.slug}`;