- 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)
8 KiB
8 KiB
UX/UI Audit — Área do Cliente (/area-do-cliente)
Data: 2026-04-22
Auditor: GitHub Copilot (UX/UI Review)
Escopo: Todas as páginas e componentes sob /area-do-cliente
1. Inventário de Telas Atuais
| Rota | Componente | Status |
|---|---|---|
/area-do-cliente |
ClientDashboardPage |
❌ Remover |
/area-do-cliente/favoritos |
FavoritesPage |
🔧 Melhorar |
/area-do-cliente/comparar |
ComparisonPage |
🔧 Melhorar |
/area-do-cliente/visitas |
VisitsPage |
🔧 Melhorar |
/area-do-cliente/boletos |
BoletosPage |
❌ Remover |
2. Problemas Identificados
2.1 Dashboard (Painel) — REMOVER
- Problema: 3 cards com números (favoritos, visitas, boletos). Não agrega valor real ao usuário — ele precisa clicar de qualquer forma para ver os detalhes.
- Impacto: UX: Alto. Adiciona um clique desnecessário para chegar ao conteúdo real.
- Decisão: Remover o dashboard. Redirecionar
/area-do-cliente→/area-do-cliente/favoritos.
2.2 Boletos — REMOVER
- Problema: Funcionalidade de boletos é uma feature de gestão imobiliária avançada raramente usada. A tabela existe mas os dados dependem de inserção manual pelo admin. Gera confusão para usuários sem boletos.
- Impacto: UX: Médio. Ruído visual no menu, expectativa não cumprida.
- Decisão: Remover a rota, o componente e o item do menu. Manter o backend (não excluir o model/API).
2.3 Navegação (Sidebar) — Ícones
- Problema: Ícones usam caracteres Unicode/emoji (
⊞,♡,⇄,📅,📄) que rendem de forma inconsistente entre sistemas operacionais e navegadores. Look não-profissional em temas dark/light. - Impacto: Visual: Alto. Inconsistência de rendering cross-platform.
- Decisão: Substituir por SVG inline (Heroicons 2.0 outline) para cada item de nav.
2.4 FavoritesPage — Cards sem imagem/preço
- Problema: Cards de favoritos mostram apenas título e link "Ver detalhes →". O usuário não consegue lembrar qual imóvel é qual sem clicar.
- Impacto: UX: Alto. Experiência frustrante para quem tem múltiplos favoritos.
- Decisão: Mostrar thumbnail da primeira foto, preço e cidade/bairro no card.
2.5 FavoritesPage — Layout de grid muito esparso
- Problema: Grid
1 → 2 → 3 colunascom cards muito altos (h-48 skeleton) para conteúdo mínimo. - Decisão: Cards com imagem real + info resumida, altura proporcional.
2.6 VisitsPage — Sem ação do usuário
- Problema: O usuário só visualiza visitas. Não há como cancelar, nem há indicação clara de próximos passos.
- Impacto: UX: Médio. Usuário precisa entrar em contato por outro canal para cancelar.
- Decisão: Adicionar botão "Solicitar cancelamento" para visitas com status
pending.
2.7 VisitsPage — Layout de lista plana
- Problema: Cards de visita não têm hierarquia visual clara. Data e status competem com o título.
- Decisão: Refatorar card de visita com: título em destaque, data em destaque, status badge alinhado à direita, mensagem como texto secundário colapsável.
2.8 ComparisonPage — Empty state sem call-to-action útil
- Problema: Empty state tem apenas "Nenhum imóvel selecionado" e link para
/imoveis. Usuário não sabe como adicionar imóveis à comparação. - Decisão: Empty state explicativo com instrução de como usar a feature (tooltip/hint).
2.9 ClientLayout — Sidebar sem perfil editável
- Problema: Sidebar mostra avatar + nome + email mas sem link para perfil/configurações.
- Impacto: UX: Médio. Usuário não consegue alterar dados cadastrais pela área do cliente.
- Decisão: Adicionar link "Minha conta" apontando para nova rota
/area-do-cliente/conta.
2.10 ClientLayout — Botão "Sair" sem ícone próprio
- Problema: Usa
→como ícone de logout. Semântica errada (parece "ir para"). - Decisão: Substituir por ícone ArrowRightOnRectangle (Heroicons logout).
2.11 Mobile Nav — Scroll horizontal fraco
- Problema: Em mobile, a navegação é uma barra horizontal com scroll. Após remover boletos e painel, teremos 3 itens — cabe bem. Mas ainda carece de indicador visual claro de ativo.
- Decisão: Melhorar o indicador ativo com underline/pill e alinhar os 3 itens centralizados.
2.12 Ausência de página de perfil/conta
- Problema: Não existe
/area-do-cliente/conta. Usuário não pode ver/editar nome, email ou senha. - Decisão: Criar
ProfilePagecom form de atualização de nome e alteração de senha.
3. Resumo das Decisões
❌ Remover
ClientDashboardPage(/area-do-cliente) — redirecionar para/area-do-cliente/favoritosBoletosPage(/area-do-cliente/boletos) — remover rota, nav item e componente- Item "Boletos" e item "Painel" do nav
✅ Manter (com melhorias)
FavoritesPage— melhorar cards com thumbnail + preço + localizaçãoVisitsPage— adicionar cancelamento + melhorar layout do cardComparisonPage— melhorar empty stateClientLayout— trocar ícones por SVG, adicionar link "Minha conta", melhorar logout
➕ Criar
ProfilePage(/area-do-cliente/conta) — formulário de edição de perfil
4. Nova Estrutura de Navegação
Antes (5 itens + Painel):
⊞ Painel
♡ Favoritos
⇄ Comparar
📅 Visitas
📄 Boletos
Depois (4 itens, sem Painel como item separado — é o redirect):
[heart-icon] Favoritos
[scale-icon] Comparar
[calendar-icon] Visitas
[user-icon] Minha conta
5. Fluxo UX Revisado
/area-do-cliente → redirect 302 → /area-do-cliente/favoritos
/area-do-cliente/favoritos
Cards: thumbnail | título | preço | cidade
Ação: [Remover dos favoritos] [Ver imóvel →]
/area-do-cliente/visitas
Cards: título imóvel | data | status badge
Ação: [Solicitar cancelamento] (só para status=pending)
/area-do-cliente/comparar
Tabela: até 3 imóveis lado a lado
Empty state: instrução de como adicionar imóvel à comparação
/area-do-cliente/conta
Form: Nome | Email (readonly) | Senha atual | Nova senha | Confirmar senha
Ação: [Salvar alterações]
6. Componentes Afetados
| Arquivo | Ação |
|---|---|
frontend/src/layouts/ClientLayout.tsx |
Refatorar nav (SVG icons, remover Boletos/Painel, adicionar Conta) |
frontend/src/pages/client/ClientDashboardPage.tsx |
Deletar ou converter em redirect |
frontend/src/pages/client/BoletosPage.tsx |
Deletar |
frontend/src/pages/client/FavoritesPage.tsx |
Melhorar cards |
frontend/src/pages/client/VisitsPage.tsx |
Melhorar card + adicionar cancelamento |
frontend/src/pages/client/ComparisonPage.tsx |
Melhorar empty state |
frontend/src/pages/client/ProfilePage.tsx |
Criar (novo) |
frontend/src/services/clientArea.ts |
Adicionar updateProfile, changePassword, cancelVisit |
frontend/src/App.tsx |
Atualizar rotas (remover boletos, adicionar conta, redirect) |
backend/app/routes/client.py |
Adicionar PATCH /me/profile, PATCH /me/password, PATCH /me/visits/:id/cancel |
backend/app/schemas/client.py |
Adicionar schemas de update |
7. Critérios de Aceite
/area-do-clienteredireciona para/area-do-cliente/favoritos- "Boletos" não aparece no menu e a rota 404
- "Painel" não aparece no menu
- Ícones do menu são SVG Heroicons consistentes em dark e light
- Card de favorito mostra: imagem (ou placeholder), título, preço, cidade
- Card de visita mostra: título, data agendada (ou solicitada), status badge
- Visita com
status=pendingexibe botão "Cancelar" que muda paracancelled - Empty state do comparar explica como usar a feature
/area-do-cliente/contaexibe form com nome e troca de senha- Form de conta valida: nome obrigatório, senhas com mínimo 8 chars, confirmação igual
- Mobile nav centraliza os 4 itens sem scroll (ou scroll suave se necessário)
- Botão "Sair" usa ícone de logout correto