* feat: recreate public frontend with Heritage Editorial identity Replace placeholder visual system with EB Garamond/olive tokens, brand assets, editorial home narrative, São Paulo settings, real testimonials, and regenerated visual baselines. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: archive recreate-public-frontend and sync Heritage Editorial specs Merge delta requirements into main OpenSpec capabilities and move the completed change into the dated archive. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
9.9 KiB
Context
O site público da Fase 1 já entrega rotas, CMS, SEO, mídia responsiva, regressão visual e acessibilidade. A identidade visual, porém, ainda é o placeholder da fundação: Instrument Sans, acento ouro, raios arredondados e cartões com sombra. DESIGN.md (“Heritage Editorial”), o mockup amare-home-editorial.html, o logo fornecido (coração facetado) e depoimentos.md (cinco casais reais) definem a marca a materializar.
Restrições que condicionam o desenho:
- Arquitetura multipágina Laravel/Blade/CMS já aprovada; o mockup HTML é single-page com âncoras — adaptar, não portar literalmente.
- Contato permanece placeholder (WEB-05 fora de escopo); CTAs levam a
/contatosem criar leads. - Fontes self-hosted via Vite (determinismo visual); sem Google Fonts CDN.
- Imagens públicas via disco configurado + variantes; Unsplash do mockup não entra no app.
PRODUCT.md: São Paulo capital; seeders atuais ainda usam Fortaleza e depoimentos fictícios.- Change paralela
complete-foundation-paritynão bloqueia nem é bloqueada por esta.
Goals / Non-Goals
Goals:
- Materializar Heritage Editorial em todas as rotas públicas (home, serviços, portfólio, caso, sobre, contato, privacidade, 404, 500).
- Home como capa do “Dossiê Editorial do Evento”: hero, manifesto, serviços, portfólio, método (4 passos), depoimentos reais, perfil Amare, CTA final.
- Tokens centralizados alinhados a
DESIGN.md; EB Garamond única família; radius 0; elevação por campos tonais. - Logo oficial otimizado (selo + lockup) em fundos claros/escuros, geometria preservada.
- Cinco depoimentos de
depoimentos.mdno CMS/seed, multipárrafo, com nota de autorização. - Manter publicação dinâmica, paginação, eager loading, SEO, axe, teclado, contraste AA e baselines determinísticas.
Non-Goals:
- Briefing funcional / lead (WEB-05), WhatsApp automatizado, inventar provas corporativas.
- Redesign do Filament, page builder, single-page navigation como modelo primário.
- Fotografia proprietária real (permanece ilustrativa e marcada até acervo autorizado).
- Staging/deploy/auth parity (
complete-foundation-parity).
Decisions
D1 — Multipágina editorial, não single-page literal
Preservar rotas do SPEC §5.1. Home concentra a narrativa do mockup; páginas internas herdam a mesma gramática (eyebrow, títulos, linhas 1px, spreads assimétricos no desktop, sequência linear no mobile). Header usa links de rota (não #âncoras como navegação primária), com CTA “Solicitar proposta” → contact.
Alternativas: home quase idêntica com âncoras (rejeitada: conflita com SEO/CMS/rotas já testadas); portar HTML estático (rejeitada: perde CMS e determinismo).
D2 — Tokens Heritage Editorial como única fonte visual
Reescrever resources/css/tokens.css e o mapeamento @theme em app.css:
| Papel | Token | Valor |
|---|---|---|
| Fundo | --amare-color-bg |
#FBF9F4 (Papel Marfim) |
| Fundo profundo | --amare-color-bg-deep |
#F0EEE9 |
| Arquivo | --amare-color-bg-archive |
#E4E2DD |
| Oliva | --amare-color-accent |
#556B2F |
| Oliva profunda | --amare-color-accent-deep |
#3E5219 |
| Sálvia | --amare-color-sage |
#8B9D77 |
| Tinta | --amare-color-text |
#1B1C19 |
| Tinta suave | --amare-color-muted |
#5D6155 |
| Linha | --amare-color-border |
#C5C8B8 |
| Radius | --amare-radius-* |
0 |
| Container | --amare-container-max |
1120px |
| Sombra | removida / não usada em conteúdo | — |
Tipografia: EB Garamond (400/500/600) self-hosted via Vite; escala display/headline/title/body/label conforme DESIGN.md. Componentes públicos deixam de usar rounded-* e shadows de cartão.
Alternativa: CSS inline do mockup (rejeitada: foge de design-tokens e quebra Tailwind/@theme).
D3 — Composição da home e omissão de seções vazias
Ordem canônica:
- Hero (settings + imagem OG/hero se houver)
- Manifesto (copy de settings)
- Serviços em destaque (lista editorial, não grid de cartões)
- Portfólio em destaque (bloco escuro oliva; funde proof+cases atuais)
- Método (4 passos: Escuta, Direção, Produção, Execução)
- Depoimentos publicados
- Perfil / posicionamento Amare (about + princípios)
- CTA final →
/contato
Seções alimentadas por collections (serviços, casos, depoimentos) omitidas quando vazias. Manifesto, método, perfil e CTA final permanecem (copy de settings / defaults editoriais). Um único h1 no hero; demais seções usam h2/h3.
D4 — Contato continua presentation-only
/contato e o CTA da home mostram canais de site_settings (e-mail, telefone, cidade, sociais). Nenhum <form> funcional, nenhum lead. O mockup de formulário serve só como referência visual futura para WEB-05; nesta change o bloco de contato da home é CTA editorial + link para a página de contato, não formulário embutido.
D5 — Extensão mínima tipada de site_settings
Novos campos tipados (não key/value genérico):
logo_path/logo_alt(opcional; fallback para lockup estático empublic/)hero_secondary_cta_label(opcional)hero_note(texto curto sob CTAs)manifesto_title,manifesto_lead,manifesto_bodymethod_intro(opcional; passos estruturados em JSON tipado ou colunasmethod_step_{1..4}_{title,body}— preferir JSONBmethod_stepsvalidado no Filament)principles(JSONB lista de até 4 strings) ou quatro colunasprinciple_1..4- Manter
about_summary, hero atual, contato, SEO, analytics
Filament ManageSiteSettings ganha seções editoriais em pt-BR. Defaults no seeder alinhados ao mockup + São Paulo.
Alternativa: hardcode de manifesto/método nas Blade (rejeitada parcialmente: método/princípios podem ter default no view, mas copy institucional deve ser editável como o hero).
D6 — Logo: ativo estático + campo CMS opcional
- Converter/otimizar o PNG fornecido para WebP/SVG derivados em
public/brand/(selo coração + lockup completo), com versões para fundo claro (oliva) e fundo escuro (papel/branco). - Componente
<x-brand.logo>escolhe variante por contexto (on-dark/on-light) e expõealtacessível. - Se
logo_pathem settings estiver preenchido, usa o upload; senão, o estático versionado.
Não redesenhar o coração facetado; não inventar polígonos decorativos genéricos.
D7 — Depoimentos reais multipárrafo
- Seedar os 5 casais de
depoimentos.mdemquote(texto completo com quebras\n\n),author_name,context(ex.:Casamento · 06/12/2025),sort_order,is_featured,published_atconforme ambiente. - Blade renderiza parágrafos a partir de quebras de linha; tipografia editorial (aspas, offset).
- Nota discreta no markup/admin: autorização final dos casais antes de publicação em produção.
- Remover depoimentos fictícios dos seeders de demo/visual ou substituí-los pelos reais (visual seeder usa subset determinístico, tipicamente 2 featured).
D8 — Navegação responsiva com JS mínimo
resources/js/app.js ganha toggle de menu mobile (aria-expanded, menu-open, fechar ao navegar), espelhando o mockup. Sem framework novo. prefers-reduced-motion continua a anular transições não essenciais. Hover de imagem (scale leve) só quando motion permitido.
D9 — Páginas internas como capítulos
| Rota | Tratamento |
|---|---|
/servicos |
Lista editorial (número + nome + resumo), não cartões |
/portfolio |
Grade assimétrica / stack com captions; fundo pode usar papel profundo |
/portfolio/{slug} |
Caderno de caso: metadados, desafio/solução/resultado, galeria |
/sobre |
Perfil editorial + princípios |
/contato |
Canais + CTA textual (sem form) |
/privacidade |
Tipografia editorial sobre papel |
| 404/500 | Mesma linguagem; 500 sem internals |
D10 — Testes e baselines
- Atualizar feature tests de home (ordem de seções, omissão, CTA → contact,
data-testid="home-primary-cta"). - Browser: axe nas rotas cobertas; Tab até CTA; console limpo.
composer visual:updateapós aprovação visual local; timezone permaneceAmerica/Fortaleza(SPEC); copy de cidade pública passa a São Paulo.- Fotos fixture locais continuam; filtro CSS de saturação contida via classe utilitária, não via URL externa.
Risks / Trade-offs
- Regeneração de 8+ snapshots → risco de ruído no PR; mitigar com seeder visual estável e revisão humana do diff.
- EB Garamond em forms/UI → legibilidade de labels uppercase; mitigar com letter-spacing e peso 600 conforme DESIGN.md; validar contraste AA.
- Depoimentos longos → layout quebra em mobile; mitigar com tipografia responsiva e subset featured na home.
- Autorização de depoimentos → risco legal/reputacional; mitigar com nota explícita e
published_atnull até autorização. - Campos novos em site_settings → migração + Filament; mitigar com defaults e nullable.
- Paridade com mockup single-page → expectativa visual vs rotas; documentar adaptação multipágina na proposta e no surface brief.
Migration Plan
- Migrar tokens/fontes/logo estático (sem breaking de rotas).
- Migrar
site_settings(colunas novas nullable + backfill de defaults). - Atualizar seeders (SP + depoimentos reais).
- Trocar layout e páginas; manter contratos de testes passando incrementalmente.
- Regenerar baselines com
composer visual:update. - Rollback: reverter deploy/commit; migração down remove colunas novas; assets estáticos são aditivos.
Open Questions
- Formato exato de
method_steps/principles(JSONB vs colunas) — default recomendado: JSONB validado no Filament. - WhatsApp/e-mail/Instagram oficiais ainda ausentes — settings continuam placeholder até o dono informar.
- Subconjunto de depoimentos na home (2 vs 5) — default: featured first, até 2 na home estilo mockup; listagem completa só se houver página dedicada (não há); home mostra todos published featured ou os N primeiros por
sort_order(cap 2–3 para ritmo editorial).