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

3.2 KiB
Raw Blame History

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