- feat(025): favoritos locais com FavoritesContext, HeartButton, PublicFavoritesPage
- feat(026): central de contatos admin (leads/contatos unificados)
- feat(027): configuração da página de contato via admin
- feat(028): trabalhe conosco - candidaturas com upload e admin
- feat(029): UX área do cliente - visitas, comparação, perfil
- feat(030): navbar UX - menu mobile, ThemeToggle, useFavorites
- feat(031): hero light/dark - imagens separadas por tema, upload, preview, seed
- feat(032): performance homepage - Promise.all parallel fetches, sessionStorage cache,
preload hero image, loading=lazy nos cards, useInView hook, will-change carrossel,
keyframes em index.css, AgentsCarousel e HomeScrollScene via props
- fix: light mode HomeScrollScene - gradiente, cores de texto, scroll hint
migrations: g1h2i3j4k5l6 (source em leads), h1i2j3k4l5m6 (contact_config),
i1j2k3l4m5n6 (job_applications), j2k3l4m5n6o7 (hero theme images)
11 KiB
Feature Specification: Revisão UX/UI da Navbar do Topo
Feature Branch: 030-navbar-topo-ux
Created: 2026-04-22
Status: Draft
Objetivo
Melhorar a navbar fixa do topo para oferecer uma navegação mais clara, consistente e eficiente em desktop e mobile, com comportamento específico por perfil:
- Visitante (não autenticado)
- Usuário autenticado (cliente)
- Usuário admin
A feature deve equilibrar descoberta de funcionalidades, redução de ruído visual e eficiência de navegação para tarefas críticas.
User Scenarios & Testing (mandatory)
User Story 1 — Navegação principal clara para visitantes (Priority: P1)
Como visitante, quero entender rapidamente os caminhos principais do site para encontrar imóveis, equipe e contato sem confusão.
Why this priority: A navbar é o principal ponto de orientação global da aplicação e impacta diretamente descoberta, conversão e retenção.
Independent Test: Em páginas públicas, o visitante visualiza links principais, CTA e autenticação com hierarquia visual clara.
Acceptance Scenarios:
- Given um visitante em viewport desktop, When a navbar é exibida, Then os itens principais de navegação estão visíveis e legíveis, sem truncamento.
- Given um visitante, When clica em um item principal (ex: Comprar, Alugar, Contato), Then é redirecionado ao destino correto e o estado ativo é refletido quando aplicável.
- Given um visitante, When interage com ações de topo, Then o CTA “Anunciar imóvel” e a ação “Entrar” aparecem com destaque adequado e consistente.
- Given um visitante em mobile, When abre o menu hambúrguer, Then encontra os mesmos destinos principais em ordem lógica e com alvo de toque adequado.
User Story 2 — Menu de usuário autenticado orientado a tarefas (Priority: P1)
Como usuário autenticado, quero acessar rapidamente minhas ações pessoais pela navbar para continuar minha jornada sem fricção.
Why this priority: Usuário logado tem intenção clara; reduzir cliques e ambiguidade melhora eficiência e percepção de produto.
Independent Test: Ao autenticar como cliente, o menu do usuário é exibido com ações pessoais e fluxo de logout confiável.
Acceptance Scenarios:
- Given um cliente autenticado (não admin), When visualiza a navbar desktop, Then vê avatar/inicial, primeiro nome e um dropdown de conta.
- Given o dropdown do usuário aberto, When o cliente seleciona uma opção, Then navega para a rota correspondente e o dropdown fecha.
- Given o cliente autenticado, When escolhe “Sair”, Then a sessão é encerrada e a navbar retorna ao estado de visitante.
- Given o cliente autenticado em mobile, When abre o menu, Then encontra uma seção “Minha Conta” contendo links pessoais e logout.
User Story 3 — Menu admin com acesso rápido e controle visual (Priority: P1)
Como administrador, quero acessar módulos administrativos pela navbar sem poluir a experiência dos demais usuários.
Why this priority: Admin precisa de eficiência operacional, mas o sistema também deve preservar clareza para perfis não-admin.
Independent Test: Ao autenticar como admin, o menu Admin aparece; para outros perfis ele não aparece.
Acceptance Scenarios:
- Given um usuário com role admin, When acessa o sistema, Then o gatilho do dropdown “Admin” é exibido na navbar desktop.
- Given o dropdown “Admin” aberto, When o admin escolhe um módulo, Then navega para o destino correto e o menu fecha.
- Given um usuário não admin, When navega no sistema, Then não vê o menu Admin em nenhum breakpoint.
- Given admin em mobile, When abre o menu, Then encontra uma seção “Admin” com os mesmos módulos prioritários da navegação desktop.
User Story 4 — Navbar previsível, acessível e sem conflitos de estado (Priority: P2)
Como usuário, quero que os menus da navbar respondam de forma previsível para não perder contexto durante a navegação.
Why this priority: A navbar concentra múltiplos estados (menu mobile, dropdown usuário, dropdown admin), aumentando risco de comportamento inconsistente.
Independent Test: Abrir/fechar menus mantém estados consistentes com clique externo, teclado e mudança de rota.
Acceptance Scenarios:
- Given dropdown admin aberto, When o usuário abre dropdown do cliente, Then o dropdown admin fecha automaticamente.
- Given qualquer dropdown aberto, When ocorre clique fora, Then o dropdown fecha.
- Given menu mobile aberto, When o usuário navega para outra rota, Then o menu fecha automaticamente.
- Given navegação por teclado, When foco percorre a navbar, Then botões e links têm foco visível e acionamento por Enter/Espaço quando aplicável.
User Story 5 — Hierarquia visual e responsividade premium (Priority: P2)
Como usuário em desktop e mobile, quero uma navbar com equilíbrio visual e legibilidade para navegar com confiança em qualquer tamanho de tela.
Why this priority: Qualidade visual e consistência de comportamento influenciam diretamente confiança e percepção de profissionalismo.
Independent Test: Em breakpoints principais, navbar mantém legibilidade, contraste e espaçamento sem sobreposição de elementos.
Acceptance Scenarios:
- Given telas entre 320px e 1440px+, When a navbar é renderizada, Then não há quebra de layout ou sobreposição de elementos.
- Given conteúdo de nome longo do usuário, When exibido no gatilho da conta, Then é truncado de forma elegante sem quebrar alinhamento.
- Given tema claro/escuro, When a navbar é exibida, Then contraste de texto e estados hover/active permanecem acessíveis.
- Given navegação prolongada, When o usuário rola e interage repetidamente, Then a navbar fixa mantém performance fluida sem jank perceptível.
Edge Cases
- Sessão expira com dropdown aberto: navbar deve invalidar estado autenticado e retornar ao estado visitante sem erro visual.
- Usuário admin com nome muito longo: gatilho de conta/admin não deve deslocar links primários fora da área visível.
- Rotas com query string (ex: listagem filtrada): estado ativo da navegação deve permanecer coerente.
- Abertura simultânea de menu mobile e dropdown contextual: apenas um contexto de navegação deve permanecer aberto por vez.
- Falha ao executar logout: deve mostrar feedback de erro e manter usuário autenticado até confirmação.
Requirements (mandatory)
Functional Requirements
Arquitetura da navegação
- FR-001: A navbar DEVE manter uma área de navegação principal comum para todos os perfis (links públicos).
- FR-002: O sistema DEVE exibir estados de navbar distintos para visitante, cliente autenticado e admin autenticado.
- FR-003: O menu Admin DEVE ser exibido somente para usuários com
role=admin. - FR-004: O menu do usuário (cliente) DEVE ser exibido somente para usuários autenticados não-admin.
Menu do usuário (cliente)
- FR-005: O dropdown do cliente DEVE incluir entradas para
Favoritos,Comparar,VisitaseMinha conta. - FR-006: O dropdown do cliente DEVE incluir ação de
Sairseparada visualmente das ações de navegação. - FR-007: Em mobile, as ações do cliente DEVEM aparecer agrupadas sob uma seção
Minha Contadentro do menu principal.
Menu Admin
- FR-008: O dropdown Admin DEVE incluir atalhos para os módulos administrativos vigentes no sistema.
- FR-009: Em mobile, os atalhos admin DEVEM ser exibidos em seção dedicada
Admin. - FR-010: O menu Admin NÃO DEVE estar presente para visitantes nem clientes não-admin.
Comportamento de estados
- FR-011: Abrir um dropdown (Admin ou Cliente) DEVE fechar automaticamente o outro dropdown.
- FR-012: Clique fora DEVE fechar dropdowns abertos.
- FR-013: Mudança de rota DEVE fechar menu mobile e dropdowns abertos.
- FR-014: O botão hambúrguer DEVE expor
aria-expandedearia-controlscoerentes com o estado atual.
Acessibilidade e usabilidade
- FR-015: Todos os gatilhos interativos da navbar DEVEM possuir rótulos acessíveis e foco visível.
- FR-016: Alvos de toque em mobile DEVEM respeitar área mínima de interação (44x44 CSS px).
- FR-017: O estado ativo dos links DEVE ser visualmente distinguível em desktop e mobile.
Hierarquia visual e consistência
- FR-018: A navbar DEVE apresentar hierarquia clara entre links primários, menus contextuais (Admin/Conta) e CTAs.
- FR-019: O CTA principal DEVE manter contraste e legibilidade adequados em tema claro e escuro.
- FR-020: Nomes longos de usuário DEVEM ser truncados sem quebrar layout.
UX/UI Recommendations (Design Direction)
- UX-001: Reduzir densidade cognitiva no topo priorizando no máximo 5 links primários visíveis no desktop.
- UX-002: Reforçar separação visual entre navegação pública e navegação contextual de perfil (Admin/Conta).
- UX-003: Priorizar consistência de iconografia entre desktop e mobile para ações de conta e logout.
- UX-004: Padronizar microinterações (hover, active, open/close) com durações curtas e previsíveis.
- UX-005: Incluir indicadores sutis de contexto de perfil (ex: badge/label admin) sem competir com CTA principal.
Key Entities
- AuthSession: Estado de autenticação consumido pela navbar (
isAuthenticated,isLoading,user). - UserProfile: Dados mínimos para renderização contextual (
name,role). - NavItem: Item de navegação com destino e rótulo para links públicos, cliente e admin.
- NavUIState: Estado transitório da navbar (
menuOpen,adminOpen,clientOpen).
Success Criteria (mandatory)
Measurable Outcomes
- SC-001: 100% dos cenários de visibilidade por perfil (visitante, cliente, admin) são respeitados em desktop e mobile.
- SC-002: 100% dos links de menu contextual (cliente/admin) navegam para os destinos corretos e fecham o menu após clique.
- SC-003: 0 ocorrências de sobreposição/quebra da navbar nos breakpoints suportados (320px, 768px, 1024px, 1280px).
- SC-004: Interações básicas de acessibilidade (foco visível, rótulos ARIA essenciais, navegação por teclado) funcionam sem bloqueios.
- SC-005: Logout retorna estado visual de visitante em até 1 interação, sem necessidade de refresh manual.
Assumptions
- O fluxo de autenticação atual e o contexto de usuário (
useAuth) permanecerão como fonte única de verdade para perfil e sessão. - Os módulos administrativos já existentes continuam válidos como destinos no menu Admin.
- A navegação da Área do Cliente continuará disponível por links no menu do usuário autenticado.
- Esta feature não altera regras de autorização backend; foca em UX/UI e comportamento de navegação no frontend.
- Ajustes de conteúdo textual fino (copywriting) podem ser refinados durante implementação, sem alterar requisitos funcionais.