feat(cases): mídia no topo, títulos de busca curtos e CreativeWork

Case com mídia ao lado do título e play acessível; problema de cada cliente reescrito com base nos dados; serviços relacionados em 2 cards; FAQ antes do próximo passo e bloco 'Onde já apliquei isso'; Apolo citada em IoT e arquitetura. metaTitle até 43 caracteres e descrições até 155 com teste; JSON-LD CreativeWork; imagens de compartilhamento abaixo de 100 KB; 404 e robots corrigidos; server-only nos módulos com node:.
This commit is contained in:
Evandro Fonseca Junior committed 2026-10-14 14:15:25 -03:00
1 parent c9a0b80656
commit e80f73d075
52 files changed
+2593 -439

No files matched your search

+12 -8
View File
@@ -51,11 +51,11 @@ export async function generateMetadata({
const url = `${siteUrl}/servicos/${service.slug}`;
return {
title: service.seoTitle,
title: service.metaTitle,
description: service.metaDescription,
...buildPageSocialMetadata({
url,
title: service.seoTitle,
title: service.metaTitle,
description: service.metaDescription,
type: "article",
}),
@@ -129,7 +129,7 @@ export default async function ServicePage({ params }: ServicePageProps) {
</a>
) : null}
</div>
<p className="mt-sp-4 text-sm leading-6 text-white/70">
<p className="mt-sp-4 text-[15px] md:text-sm leading-6 text-white/70">
Fale diretamente com Evandro. Abre uma conversa, sem precisar
preencher um formulário. Atendimento remoto a partir de Garuva,
SC.
@@ -139,7 +139,11 @@ export default async function ServicePage({ params }: ServicePageProps) {
</div>
</section>
<ServiceRelatedCases cases={relatedCases} />
<ServiceRelatedCases
cases={relatedCases}
relevance={service.caseRelevance}
experienceNote={service.experienceNote}
/>
<section className="ds-section">
<div className="ds-section-shell">
@@ -171,7 +175,7 @@ export default async function ServicePage({ params }: ServicePageProps) {
<article className="min-w-0">
<div className="ds-kicker">Da conversa à entrega</div>
<h2 className="ds-card-title">Como trabalhamos</h2>
<ol className="mt-sp-5 list-decimal space-y-sp-4 pl-sp-5 text-sm leading-8 text-[var(--ink-80)]">
<ol className="mt-sp-5 list-decimal space-y-sp-4 pl-sp-5 text-[15px] md:text-sm leading-8 text-[var(--ink-80)]">
{service.process.map((step) => (
<li key={step} className="pl-sp-2">
{step}
@@ -224,7 +228,9 @@ export default async function ServicePage({ params }: ServicePageProps) {
<ServiceOffer service={service} />
<section className="ds-section ds-section-dark pb-sp-6">
<ServiceFaq faq={service.faq} />
<section className="ds-section ds-section-dark">
<div className="ds-section-shell">
<div className="ds-card border-white/10 bg-[rgba(255,255,255,0.03)]">
<div className="ds-kicker">Próximo passo</div>
@@ -252,8 +258,6 @@ export default async function ServicePage({ params }: ServicePageProps) {
</div>
</div>
</section>
<ServiceFaq faq={service.faq} />
</main>
);
}