sass-imobiliaria/specs/020-politica-de-privacidade/research.md

4.8 KiB

Research: Página de Política de Privacidade

Feature: 020-politica-de-privacidade
Phase: 0 — Outline & Research
Status: Complete — sem NEEDS CLARIFICATION


1. Padrão de página estática no projeto

Decision: Usar o mesmo padrão de AgentsPage.tsx<Navbar /> + <main className="min-h-screen bg-canvas"> + <Footer />.

Rationale: Todas as páginas públicas do projeto seguem este padrão. AgentsPage.tsx é o exemplo mais recente e pode ser usado como referência direta.

Alternatives considered: Criar um componente PublicLayout com Navbar/Footer embutidos. Rejeitado por violar Principle VI (YAGNI — só 1 page nova, sem reutilização real).


2. Roteamento client-side

Decision: Adicionar <Route path="/politica-de-privacidade" element={<PrivacyPolicyPage />} /> direto no arquivo frontend/src/App.tsx, na mesma camada das rotas públicas (/, /imoveis, /corretores).

Rationale: Padrão já usado por todas as rotas públicas. Sem guards de autenticação necessários.

Alternatives considered: Rota aninhada num layout público. Rejeitado — nenhuma outra rota pública usa layout aninhado; seria over-engineering.


Decision: Usar <Link to="/politica-de-privacidade"> do react-router-dom para o novo link no Footer. Os links existentes (#sobre, #contato) permanecem como <a> (são âncoras intra-página, não rotas SPA). O link /imoveis existente também fica como <a> para não alterar comportamento legado fora do escopo.

Rationale: FR-006 exige navegação sem recarregamento. O <Link> do React Router garante transição client-side sem window.location reload. O Footer está dentro do <BrowserRouter> (App.tsx), então <Link> funciona sem nenhuma mudança estrutural.

Alternatives considered:

  1. Converter todos os links do footer para <Link> — fora de escopo, Principle VI proíbe mudanças além do especificado.
  2. Usar <a href="/politica-de-privacidade"> — causaria reload completo da página, violando FR-006 e SC-003.

4. Design tokens a utilizar

Decision: Seguir exatamente as classes Tailwind mapeadas para os tokens do DESIGN.md:

Elemento Classe Tailwind
Fundo da página bg-canvas
Fundo de seção alternada (opcional) N/A — fundo único para simplicidade
Texto principal (título, corpo) text-text-primary
Texto secundário text-text-secondary
Texto terciário (metadata) text-text-tertiary
Separador entre seções border-white/[0.06]
Largura máxima do conteúdo max-w-[800px] mx-auto px-6
Títulos de seção font-semibold text-text-primary + fontFeatureSettings: '"cv01","ss03"'
Label de categoria text-[#5e6ad2] text-sm font-medium tracking-widest uppercase

Rationale: Alinhamento com Principle I (Design-First). Tokens já existentes no tailwind.config.ts; sem novos tokens necessários.


5. Estrutura das 8 seções LGPD

Decision: Conteúdo estático inline no componente. Sem fonte de dados externa, sem CMS, sem JSON separado.

Rationale: Principle VI — a solução mais simples. A política muda raramente; extrair para arquivo JSON seria over-abstraction sem benefício concreto.

Seções obrigatórias (FR-003):

# Título Conteúdo-chave
1 Instituição Responsável Nome, CNPJ, endereço (placeholders)
2 Coleta e Uso de Dados Pessoais Quais dados, finalidade de uso
3 Transferência de Dados Pessoais Compartilhamento com terceiros (parceiros, financeiras)
4 Uso de Cookies Tipos de cookies, finalidade
5 Direitos do Usuário Acesso, correção, exclusão, portabilidade, revogação de consentimento
6 Segurança dos Dados Medidas técnicas adotadas
7 Alterações nesta Política Versionamento e data de última atualização
8 Contato / DPO E-mail do encarregado (placeholder [EMAIL DO DPO])

6. Responsividade

Decision: max-w-[800px] mx-auto px-6 para o container do conteúdo. Em mobile, o padding px-6 garante margens laterais. Sem media queries adicionais — Tailwind + text-base resolve legibilidade.

Rationale: SC-004 exige legibilidade a partir de 320px sem overflow horizontal. O container com px-6 e max-w-[800px] atende naturalmente por ser menor que qualquer viewport padrão >375px.


7. Dependências novas

Decision: Nenhuma dependência nova.

Rationale: react-router-dom já está instalado. Tailwind já configurado. Principle VI — sem pacotes novos sem justificativa.


Resolução de NEEDS CLARIFICATION

Não havia ambiguidades de natureza técnica que exigissem pesquisa externa. Todos os pontos foram resolvidos com base no código existente no projeto.