watcha — contexto
Watcha
O que faz
Watcha é um aplicativo de monitoramento de preços. O usuário cola URLs de produtos de qualquer loja online e o app verifica os preços a cada hora através de scraping, enviando notificações push quando há queda de preço.
Stack principal
- Mobile: Expo SDK 54, React Native 0.81.5, expo-router v6, NativeWind v4
- Backend/Database: Convex (banco de dados documento, tempo real, queries, mutations, actions, crons)
- Scraping: Cloudflare Worker com Browser Rendering (Puppeteer) + fallback AI
- Notificações: Expo Push Notification Service
- Autenticação: Convex Auth (Google, Apple, email)
- Gerenciamento: pnpm 9 + Turborepo
Estrutura relevante
watcha/
├── convex/ # Backend (schema, auth, crons, http, módulos: products, lists, social, scraping, notifications)
├── apps/mobile/ # Expo app com rotas (auth) e (app), componentes GestureNavigator, RadialMenu, MascotCharacter
├── apps/admin/ # Dashboard Astro
└── packages/scraper/ # Cloudflare Worker de scraping
A navegação no mobile é baseada em gestos (swipe), sem abas tradicionais. O mascote animado exibe um menu radial ao ser tocado.
Comandos comuns
pnpm dev-- inicia Convex + mobile (turbo)pnpm dev:convex-- servidor Convex apenaspnpm dev:scraper-- worker de scraping (wrangler dev)pnpm dev:mobile-- mobile apenas (expo start --tunnel)
Agents/Skills notáveis
- GestureNavigator: navegação por swipe em 4 direções usando gesture-handler + reanimated
- MascotCharacter: mascote animado com estados emocionais, integrado ao menu radial
- Scraper Worker: dedicado ao scraping com Browser Rendering, executa como worker independente do backend principal
- Convex Auth: autenticação integrada com Google, Apple e email, sem necessidade de API externa