feat(home): ofertas que vendem o título, WhatsApp no hero e menu do celular acessível

Três ofertas (site que traz pedidos pelo WhatsApp, sistema para tirar a operação da planilha, revisão de sistema existente) com miniatura e formulário com o tipo escolhido; botão principal do hero abre o WhatsApp; moldura da SEV no hero do celular; menu fecha ao navegar, Esc, foco preso incluindo a barra de cookies e espaço para ela; CinematicHome como componente de servidor com ilha cliente; /ia com H1 de oferta e cartão do que você recebe; botão flutuante em aside com transform; AVIF antes de WebP; copy sem repetir contato direto.
This commit is contained in:
Evandro Fonseca Junior committed 2026-10-14 17:01:36 -03:00
1 parent de6af74a0c
commit f8545cd442
44 files changed
+2286 -571

No files matched your search

+36 -2
View File
@@ -1,6 +1,11 @@
import {
AI_REVIEW_SUBJECT,
CASES_SUBJECT,
HOME_SUBJECT,
headerOpensWhatsApp,
isServiceOrCasePath,
RESUME_SUBJECT,
SERVICES_SUBJECT,
type WhatsAppContexts,
whatsAppSubjectForPath,
} from "./whatsapp";
@@ -43,14 +48,27 @@ describe("whatsAppSubjectForPath", () => {
it.each([
"",
"/servicos/",
"/cases/",
"/ia/extra",
"/IA",
"/cases/sev-modaintima/extra",
"/curriculo/extra",
"/servicos/a/b",
])("path: %j -> no subject", (pathname) => {
expect(whatsAppSubjectForPath(pathname, contexts)).toBeUndefined();
});
it.each([
["/servicos/", SERVICES_SUBJECT],
["/cases/", CASES_SUBJECT],
["/curriculo/", RESUME_SUBJECT],
["/", HOME_SUBJECT],
])(
"path: the index page %j (with or without the slash) -> its own subject",
(pathname, subject) => {
expect(whatsAppSubjectForPath(pathname, contexts)).toBe(subject);
expect(whatsAppSubjectForPath(pathname)).toBe(subject);
},
);
});
describe("isServiceOrCasePath", () => {
@@ -61,3 +79,19 @@ describe("isServiceOrCasePath", () => {
},
);
});
describe("headerOpensWhatsApp", () => {
it.each(["", "/servicos/a/b", "/cases/a/b", "/IA", "/curriculo/extra"])(
"path: %j -> false (the header button goes to the home form)",
(pathname) => {
expect(headerOpensWhatsApp(pathname)).toBe(false);
},
);
it.each(["/ia/", "/cases/", "/servicos/", "/curriculo/"])(
"path: the index page %j with the trailing slash -> true",
(pathname) => {
expect(headerOpensWhatsApp(pathname)).toBe(true);
},
);
});