sass-imobiliaria/.specify/features/014-properties-grid-ux/spec.md

49 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Feature Specification: Grid de Imóveis — 4 Colunas, Altura Uniforme e UX/UI
**Feature Branch**: `014-properties-grid-ux`
**Created**: 2026-04-14
**Status**: In Progress
## Contexto
A página `/imoveis` atualmente exibe um grid de 3 colunas (`xl:grid-cols-3`) com cards de altura variável conforme o comprimento do título. Os separadores visuais entre cards ficam descalinhados, a paginação usa `per_page=12` (múltiplo de 3) e o `max-w` do layout é 1200px. Esta feature reestrutura o grid para 4 colunas, garante altura uniforme nos cards alinhando o rodapé (stats e botão comparar) ao fundo, aumenta o `max-w` para acomodar 4 colunas ao lado do filtro, e aplica melhorias de UX/UI: localização no card (cidade/bairro), ícone de estacionamento, skeleton atualizado, e ajuste de `per_page` para 16.
### Estado atual
- `CatalogPage` (ou equivalente): `xl:grid-cols-3`, `max-w-[1200px]`, `per_page=12`
- `PropertyCard.tsx`: altura variável conforme título; sem exibição de cidade/bairro; sem ícone de vagas
- `PropertyCardSkeleton.tsx`: reflete estrutura de 3 colunas com 12 itens no loading
- `FilterSidebar.tsx` desktop: `w-64`
## User Stories
### US1 — 4 colunas no grid (P1)
**Given** usuário na página `/imoveis` em tela >= 1280px, **When** grid de imóveis é renderizado, **Then** exibe 4 cards por linha. Em telas menores: 1 coluna (< 640px), 2 colunas (6401023px), 3 colunas (10241279px).
### US2 — Altura uniforme nos cards (P1)
**Given** grid com cards de títulos longos e curtos na mesma linha, **When** renderizado, **Then** todos os cards de uma mesma linha têm exatamente a mesma altura, com o rodapé (stats + botão comparar) sempre alinhado na parte inferior.
### US3 — Localização no card (P2)
**Given** card de um imóvel com cidade e/ou bairro informados, **When** exibido no grid, **Then** mostra cidade e bairro abaixo do título em texto menor e discreto.
### US4 — Ícone de vagas no card (P2)
**Given** imóvel com `parking_spots > 0`, **When** exibido no grid, **Then** exibe ícone de carro + número de vagas na seção de stats.
### US5 — Paginação compatível (P1)
**Given** grid de 4 colunas, **When** nova página carrega, **Then** `per_page=16` (múltiplo de 4) e skeleton também exibe 16 itens.
### US6 — Responsividade revisada (P1)
**Given** usuário em qualquer dispositivo, **When** página carrega, **Then** layout adapta corretamente: filtro como overlay no mobile, grid responsivo sem overflow horizontal.
## Acceptance Criteria
- Grid alterado para `grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4`
- `max-w` do layout aumentado para `max-w-[1400px]`
- `FilterSidebar` desktop reduzida de `w-64` para `w-56`
- `per_page` default alterado de `12` para `16`
- `PropertyCard.tsx`: elemento raiz do link usa `flex flex-col h-full`; rodapé (stats + botão comparar) usa `mt-auto`
- `PropertyCard.tsx`: exibe cidade e bairro abaixo do título quando disponíveis
- `PropertyCard.tsx`: exibe ícone de carro + `parking_spots` quando `parking_spots > 0`
- `PropertyCardSkeleton.tsx`: atualizado para refletir nova estrutura (placeholder de localização + parking)
- Skeleton renderiza 16 itens durante o estado de loading
- Nenhuma dependência externa nova