Aplicativo não-oficial do Aluno Online (UERJ) para Android/iOS, escrito em TypeScript + React Native. Ele traz para o celular várias funcionalidades do portal oficial, além de recursos exclusivos como Gerador de Grade e Mural de Mensagens.
Não-oficial • Depende do site do Aluno Online • Scraping controlado
- ℹ️ Sobre o projeto
- ✨ Funcionalidades
- 🧠 Como funciona (alto nível)
- 🔧 Requisitos
▶️ Como rodar (dev)- 🏗️ Arquitetura do código
- 🔐 Privacidade e dados do usuário
⚠️ Limitações conhecidas- 🧰 Troubleshooting / FAQ
- 🔗 Links úteis
- Plataforma: React Native 0.81 + React 19, TypeScript
- Navegação:
@react-navigation
- Estado: Redux Toolkit +
redux-persist
- Dados/async:
react-query
- UI:
styled-components
- Parsing:
cheerio
para HTML scraping do Aluno Online.
Publicação: disponível na Google Play como “AO UERJ” — veja em: play.google.com/store/apps/details?id=com.aouerjmobile
Funcionalidades espelhadas do AO (via scraping):
- Início (Home):
- RID Parcial (provisório)
- Quadro de Notas (disciplinas em curso)
- Quadro de Horários (disciplinas em curso)
- Mensagens de estado (bloqueio do AO, período ainda não iniciado, dicas de recuperação de erro)
- Disciplinas Realizadas (histórico com período, créditos, carga horária, status)
- Disciplinas do Currículo (com filtros por tipo, cursadas/não cursadas, busca)
- Disciplinas Universais (com filtro por departamento/unidade)
- Pesquisa de Disciplina (detalhes, turmas, horários, professores, vagas)
Funcionalidades exclusivas do app (servidores próprios):
- Gerador de Grade (beta):
- Recebe preferências do usuário (quantidade de disciplinas, horários ocupados, prioridades etc.)
- Busca e processa dados do AO
- Gera opções de grade sem salvar os dados do usuário no servidor
- Mural de Mensagens:
- Canal de comunicação entre alunos da mesma turma
- Mensagens trafegam por um servidor privado, não relacionadas ao AO oficial
- Relatório de Erros:
- Reúne dados brutos de scraping para diagnóstico
- Remove identificadores pessoais (nome, matrícula, etc.) antes do envio
- Login/sessão: o app autentica no Aluno Online e mantém cookies/sessão.
- Coleta de dados: chamadas ao Aluno Online usam
UerjApi
com parâmetros específicos. O HTML retornado é parseado e transformado em estruturas tipadas. - Camadas privadas: recursos de Mural de Mensagens, Gerador de Grade e Relatório de Erros utilizam
PrivateApi
apontando para um backend próprio. - Resiliência: quando o Aluno Online muda o HTML, o app exibe mensagens de erro, sugere ações (atualizar, relogar, reinstalar) e disponibiliza reporte para ajuste rápido dos parsers.
- Node.js LTS recente (>= 18 recomendado)
- pnpm
- Ambiente React Native:
- Android: JDK 17 (ou compatível RN 0.81.4), Android SDK, emulador/dispositivo, Gradle (wrapper incluso)
Instalar dependências
# na raiz do projeto
pnpm install
Android (emulador ou device)
pnpm android
Observação: se houver erros relacionados a SDK/NDK/Gradle/Java, ajuste localmente as versões para o ambiente RN 0.81.4.
src/pages/*
: telas de navegação (Home, Login, SubjectsTaken, CurriculumSubjects, UniversalSubjects, SubjectDetails, MessageBoard, ScheduleSimulator, About, etc.)src/features/*
: módulos com lógica/coleta/parsing e UI específica (ex.: ClassGrades, PartialRID, AttendedClassesSchedule, SubjectsTaken, SubjectsToTake, CurriculumSubjects, UniversalSubjects, SubjectInfo, SubjectClassesSchedule, MessageBoard, ScheduleSimulator)src/services/*
:UerjApi
: integração com AO (axios), utilitários de requisição (getRequisitionID
,retry
) e cookiesPrivateApi
: integração com o backend próprio
src/reducers/*
: Redux Toolkit slices (apiConfig, userInfo, etc.)src/themes/*
: tema e coressrc/utils/*
: normalização, horários, helpersdocs/*
: documentações sobre o projeto
Fluxo típico:
- Tela dispara uma chamada HTTP por uma função
fetch*
da feature relacionada fetch*
chamaUerjApi
e recebe o HTML do Aluno Online- Parser transforma HTML em JSON estruturado e salva localmente ou retorna ao componente
- UI atualiza com tratamento de erro e mensagens de estado
- Não há compartilhamento com terceiros.
- O app depende de scraping do Aluno Online e guarda somente o mínimo necessário em cache local.
- Mural de Mensagens, Gerador de Grade e Relatório de Erros utilizam servidores próprios do projeto.
- Relatório de Erros: remove dados identificáveis (ex.: matrícula, nome) antes de enviar para diagnóstico.
- Gerador de Grade: não persiste dados submetidos pelo usuário.
Consulte também a seção “Segurança dos dados” na página da Play Store do aplicativo.
- Dependência total do HTML/fluxo do Aluno Online: alterações no site podem quebrar parsers.
- Durante bloqueios/manutenções do Aluno Online, o app pode ficar parcialmente indisponível.
- Parsers são atualizados continuamente; use o recurso de “Reportar erro” quando notar inconsistências.
- O app diz que o Aluno Online está indisponível. E agora?
- Isso ocorre quando o site oficial muda o HTML ou está fora do ar. Aguarde e tente mais tarde. Se persistir, use “Reportar erro” na tela de "Sobre" do app.
- O Gerador de Grade envia meus dados para algum lugar?
- Não. Os dados vão apenas para processamento temporário e não são salvos no servidor.
- App na Google Play: play.google.com/store/apps/details?id=com.aouerjmobile
- Site do Aluno Online (UERJ): www.alunoonline.uerj.br
- Documentação React Native: reactnative.dev
- Documentação React: react.dev
- TypeScript: typescriptlang.org
Dúvidas e suporte: abra uma issue ou utilize o recurso de relatório de erro pelo app. Sugestões são muito bem-vindas.