Arquitetura
- Stack: React Native + Expo Router v4 (file-based), NativeWind v4, TanStack Query, Zustand, expo-secure-store. Monorepo via pnpm (
node-linker=hoisted). - Auth: Supabase com AsyncStorage; o app envia Bearer JWT para uma superficie dedicada
/api/mobile/*(~47 endpoints) que retorna shapes simplificados e planos. - White-label: um ThemeProvider dinamico le o tema do tenant em
/api/mobile/meapos o login; o branding pre-login vem do endpoint publico/api/mobile/tenant-branding. - OTA updates:
expo-updatescomruntimeVersionfixado na versao do SDK; umAppVersionGatepode forcar atualizacao quando o build instalado esta abaixo de um minimo configurado.
O que tem no app
| Area | Telas |
|---|---|
| Aprendizado | dashboard, cursos (lista + catalogo + detalhe), viewer de aula, progresso |
| Avaliacao | quiz player nativo, envio de assignment |
| Tutor | chat do tutor IA (SSE), avatar falante (WebView), avisos de quarentena/safety |
| Social | mensagens diretas, foruns (forum → thread → reply), anuncios, materiais do curso |
| Gamificacao | XP/nivel/streak, badges, leaderboard, contests, rewards shop |
| Registros | notas, certificados, notificacoes (lista + mark read) |
| Ao vivo | aulas ao vivo (WebView), calendario |
SSO no mobile
A rota /api/auth/sso/[tenantSlug] aceita um deep link redirect=studeia://...; o callback emite um 302 para studeia://auth/callback#access_token=...&refresh_token=.... Um listener Linking no auth provider chama supabase.auth.setSession(), e a tela de SSO usa uma sessao de browser in-app para o foco retornar ao app.
Modelo de seguranca
Os endpoints mobile reutilizam os mesmos guards de autorizacao da web: guards de acesso a forum/thread, acesso a aula (publicacao + prerequisito + matricula), anexos de assignment em bucket privado com prefixo validado, e sanitizacao de HTML server-side antes de qualquer render em WebView (WebViews rodam com origin whitelist estrita e JS desabilitado quando possivel).
Avatar no mobile
O avatar falante roda numa WebView que carrega a mesma pagina /avatar-embed usada na web (sem modulos WebRTC nativos no Expo); uma bridge React Native encaminha as mensagens de controle.
Roadmap
iOS ainda nao foi publicado — requer conta Apple Developer e um build EAS dedicado.