App mobile de tarefas e recompensas para famílias. React Native + Expo + Supabase.
- React Native 0.83 / Expo SDK 55 / Expo Router
- TypeScript strict
- Supabase (auth, Postgres, storage, edge functions, realtime)
- Resend (e-mails transacionais via SMTP)
- React Query v5
- Sentry (error tracking)
- SonarCloud (code quality)
npm install
cp .env.example .env.local # preencha com suas credenciais
npm run db:push # aplica migrations no Supabase
npm run db:types # regenera tipos do banconpm start # dev server (Metro)
npm run android # primeira build nativa + Metro
npm run tunnel # tunnel para dispositivo físiconpm run lint # ESLint
npm run typecheck # TypeScript
npm test # Vitest (unit + route tests)
npm run test:coverage # Vitest com relatório de coberturanpm run build # EAS Build (preview, Android)npm run db:push # aplica migrations pendentes no Supabase remoto
npm run db:types # regenera src/types/database.types.ts
npm run db:diff # mostra diff entre local e remoto
npm run db:seed # executa seed de dados de testeRequer emulador Android com o app no modo dev-client e Metro rodando.
Credenciais de teste em .env.local (veja .env.example).
export $(grep -v '^#' .env.local | xargs)
npm run test:e2e # login + logout + validações
npm run test:e2e:login # só login
npm run test:e2e:logout # logout (com login automático)
npm run test:e2e:create-account # cadastro + criação de família
npm run test:e2e:login-wrong-password
npm run test:e2e:login-empty-fieldsVeja .maestro/README.md para documentação completa dos flows.
app/ → Expo Router screens/layouts (sem lógica de negócio)
lib/ → Lógica de negócio, acesso a dados, SDKs (sem React hooks)
src/components → UI reutilizável
src/constants → Design tokens (cores, espaçamento, tipografia)
src/hooks → React Query hooks (queries/mutations)
src/context → Providers (tema, impersonação, query client)
src/types → Tipos TypeScript (database.types.ts gerado, env.d.ts)
supabase/ → Migrations, edge functions, seed
test/ → Helpers e route tests
- Testes rodam com timezone
America/Sao_Paulo(vervitest.config.ts). - SonarCloud config consolidada em
.sonarcloud.properties. - Resend configurado como SMTP do Supabase Auth (confirmação de e-mail, recuperação de senha, notificações de senha alterada). Domínio customizado pendente — atualmente envia via
onboarding@resend.dev. - React Compiler habilitado experimentalmente em
app.json.