Aplicação em React + TypeScript + Vite para exibir animais disponíveis para adoção, registrar pets e gerenciar favoritos.
- Node.js 18+ instalado
- npm 9+ instalado
git clone https://github.com/seu-usuario/argos.git
cd argos
npm install
npm run devEm seguida, abra o navegador em:
http://localhost:5173
- Frontend Framework: React 18+ com TypeScript
- Build Tool: Vite
- Estilização: Tailwind CSS
- Roteamento: React Router v6
- Estado Global: React Context API
- Autenticação & BD: Supabase
- Testes: Vitest + React Testing Library
- Linting: ESLint
- Dados: JSON locais (breeds) + API de localidades do Brasil
- Listar animais disponíveis para adoção ✅
- Persistência local de favoritos (localStorage) ✅
- Página dedicada para visualizar favoritos salvos ✅
- Indicadores visuais de favoritos na listagem ✅
- Busca de animais com filtros por raça, tamanho, gênero, temperamento, localização ✅
- Cadastro de pets com supabase (em andamento) 🚧
- Cadastro e login de usuários com Supabase Auth ✅
- Logout com redirecionamento ✅
- Sessão persistente do usuário ✅
A integração com o Supabase está em andamento e será usada para:
- autenticação de usuários
- armazenamento de dados dos pets
- cadastro e recuperação de informações no backend do projeto
Para o funcionamento local, é necessário configurar variáveis de ambiente no arquivo .env com as chaves do projeto.
useRegistrationForm- para lógica de cadastro e validação do formulário.useFilterFields- para lógica de filtros e lista filtrada da página inicial.useUserSupabase- Gerencia autenticação e sessão do usuário
useLogout- Lógica de logout com tratamento de erros
useReducerpara gerenciar o estado e ações do formulário de cadastro.useReducerem useFilterfields.ts para gerenciar os filtros de busca de pets.createContext+useContextpara compartilhar o estado de favoritos globalmente.useCallbackpara memoizar as funções isFavorite e toggleFavorite.useMemopara memoizar o valor do contexto e evitar rerenders desnecessários.useRefpara controlar o primeiro render e impedir que o localStorage seja sobrescrito antes da leitura inicial.useNavigatepara navegar entre rotas.useLocationpara identificar a rota ativa e destacar o item correto do menu.useParamspara ler o id do pet a partir da URL.
localStorage: persiste e carrega a lista de favoritos no navegador.- API de localidades: retorna os estados e cidades do Brasil.
Supabase: utilizado para armazenamento de dados.
src/
├── App.tsx # Componente raiz com gerenciamento de sessão
├── main.tsx # Ponto de entrada
├── routes.tsx # Definição das rotas
├── supabase-client.ts # Cliente Supabase configurado
│
├── assets/ # Ícones e assets SVG
│ └── ...
│
├── components/ # Componentes reutilizáveis
│ ├── layout.tsx # Layout principal
│ ├── sidebar.tsx # Navegação lateral
│ └── ...
│
├── pages/ # Páginas/rotas
│ ├── landing/ # Página inicial (landing)
│ │ ├── landing.tsx
│ │ └── ...
│ │
│ ├── home/
│ │ └── ...
│ │
│ ├── details/ # Página de detalhes do animal
│ │ └── details.tsx
│ │
│ ├── favorites/ # Página de favoritos
│ │ ├── favorites.tsx
│ │ └── ...
│ │
│ ├── registration/ # Página de cadastro de animais
│ │ ├── registration.tsx
│ │ ├── hooks/
│ │ │ └── useRegistrationForm.ts
│ │ └── formFields/
│ │ └── ...
│ │
│ ├── signup/ # Página de cadastro de usuários
│ │ ├── signup.tsx
│ │ └── formFields/
│ │ └── ...
│ │
│ ├── common/ # Componentes e lógica compartilhada
│ │ ├── constants.ts
│ │ ├── types.ts
│ │ ├── components/
│ │ │ └── ...
│ │ │
│ │ ├── context/
│ │ │ ├── favoritesProvider.tsx
│ │ │ └── ...
│ │ │
│ │ ├── hooks/
│ │ │ └── ...
│ │ ├── service/
│ │ └── ...
│ │
│ ├── context/
│ │ └── userSupabaseContext.tsx # Context global de autenticação
│ │
│ └── pets.json # Dados de exemplo de animais
│
├── context/
│ └── userSupabaseContext.tsx # Contexto global de usuário
│
├── catsBreed.json # Catálogo de raças de gatos
├── dogsBreed.json # Catálogo de raças de cães
└── index.css # Estilos globais
