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

+22
View File
@@ -106,6 +106,19 @@ describe("what the layout mounts", () => {
expect(serviceHubLinks.length).toBeGreaterThan(0);
});
it("gives the footer wrapper and the content the ids the mobile menu makes inert", () => {
const html = markup();
expect(html).toMatch(
/<div id="main-content"[^>]*>(?:(?!<\/div>).)*conteúdo/,
);
expect(html).toMatch(
/<div id="site-footer" class="relative z-10"><footer data-testid="footer"/,
);
// o botão flutuante fica fora dos dois: ele tem a própria região (<aside>)
expect(html.match(/id="site-footer"/g)).toHaveLength(1);
});
it("gives the header and the button the service and case names, and only names", () => {
markup();
@@ -131,6 +144,15 @@ describe("what the layout mounts", () => {
});
describe("fonts", () => {
it("does not preload Geist Mono (only small labels use it), while the display font keeps its preload", () => {
const source = readFileSync(join(__dirname, "layout.tsx"), "utf8");
const mono = source.match(/Geist_Mono\(\{[^}]*\}\)/)?.[0] ?? "";
expect(mono).toMatch(/preload:\s*false/);
const display = source.match(/Space_Grotesk\(\{[^}]*\}\)/)?.[0] ?? "";
expect(display).not.toMatch(/preload:\s*false/);
});
it("no longer loads the unused Monument Extended font", () => {
const source = readFileSync(join(__dirname, "layout.tsx"), "utf8");