YU é uma aplicação mobile de bem-estar que combina objetivos do usuário, localização, clima, tempo de tela e progresso diário para gerar sugestões personalizadas. A experiência é acompanhada por um mascote que reage ao estado atual do usuário e torna as recomendações mais leves e convidativas.
- Cadastro e consulta de objetivos de bem-estar.
- Coleta de localização do usuário, com permissão via Expo Location.
- Registro de dados de clima e consulta do último clima salvo.
- Simulação/consulta de tempo de tela para compor o contexto do usuário.
- Motor de sugestões baseado em contexto.
- Registro de sugestões concluídas no dia.
- Indicadores de progresso diário e histórico semanal.
- Mascote com estados, reações e balão de fala com sugestões.
- Cache local no app para apoiar cenários offline.
Backend
- Node.js
- Express
- TypeScript
- Prisma
- PostgreSQL
- Firebase Admin
- Jest
Frontend
- Expo
- React Native
- TypeScript
- Firebase Auth
- React Navigation
- AsyncStorage
- Expo Location
YU/
├── backend/ # API, Prisma, controllers, serviços e testes
├── front-end/ # App Expo/React Native
├── .env.example # Exemplo de variáveis de ambiente
└── README.md- Node.js compatível com o projeto.
- npm.
- PostgreSQL rodando localmente ou em ambiente remoto.
- Projeto Firebase configurado.
- Expo Go ou emulador Android/iOS para testar o app.
Clone o projeto e instale as dependências separadamente:
cd backend
npm installcd ../front-end
npm installCrie um arquivo .env na raiz do projeto com base no .env.example:
cp .env.example .envPreencha as variáveis necessárias:
DATABASE_URL="postgresql://usuario:senha@localhost:5432/nome_do_banco"
FIREBASE_PROJECT_ID=""
FIREBASE_CLIENT_EMAIL=""
FIREBASE_PRIVATE_KEY=""
EXPO_PUBLIC_API_URL="http://seu-ip:3000"
EXPO_PUBLIC_OPENWEATHER_API_KEY=""
EXPO_PUBLIC_FIREBASE_API_KEY=""
EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN=""
EXPO_PUBLIC_FIREBASE_PROJECT_ID=""No celular físico, EXPO_PUBLIC_API_URL deve apontar para o IP da máquina na rede, não para localhost. Exemplo:
EXPO_PUBLIC_API_URL="http://192.168.0.10:3000"Entre na pasta do backend:
cd backendGere o Prisma Client:
npm run prisma:generateAplique as migrations:
npm run prisma:migrateCadastre os objetivos iniciais:
npm run prisma:seedInicie a API:
npm run devA API ficará disponível em:
http://localhost:3000Para verificar se o servidor está online:
curl http://localhost:3000Entre na pasta do app:
cd front-endInicie o Expo:
npm startTambém é possível abrir diretamente em uma plataforma:
npm run android
npm run ios
npm run webAs rotas principais do backend exigem token Firebase no header:
Authorization: Bearer <token>Para gerar um token anônimo para testes manuais:
cd backend
npm run token| Método | Rota | Descrição |
|---|---|---|
GET |
/ |
Health check da API |
GET |
/users/goals |
Lista objetivos do usuário |
POST |
/users/goals |
Salva objetivos escolhidos |
GET |
/users/screen-time |
Retorna dados mockados de tempo de tela |
POST |
/users/location |
Salva localização do usuário |
GET |
/users/location |
Retorna a última localização salva |
POST |
/users/weather |
Salva dados de clima |
GET |
/users/weather |
Retorna o último clima salvo |
POST |
/users/suggestions |
Gera sugestões com base no contexto |
POST |
/users/suggestions/:suggestionId/complete |
Registra conclusão de uma sugestão |
GET |
/users/progress |
Retorna indicadores de progresso |
Os principais modelos Prisma são:
WellnessGoal: objetivos disponíveis no app.UserGoal: objetivos selecionados pelo usuário.UserLocation: histórico de localização.WeatherData: dados de clima salvos.SuggestionProgress: sugestões concluídas por usuário e data.
Para resetar o banco em ambiente local:
cd backend
npx prisma migrate resetUse esse comando com cuidado, pois ele apaga os dados locais e reaplica as migrations.
Backend:
cd backend
npm testFrontend:
cd front-end
npm test
npm run test:reactionChecagem TypeScript:
cd backend
npm run buildcd front-end
npx tsc --noEmit- Crie uma branch a partir da
dev. - Faça alterações pequenas e relacionadas à issue.
- Rode os testes e a checagem TypeScript antes do PR.
- Atualize migrations, seeds e documentação quando alterar contrato de dados.
- Abra o PR para
devdescrevendo o que foi implementado e como foi testado.
Exemplo:
git checkout dev
git pull
git checkout -b kayke#numero-da-issueO app não consegue chamar o backend no celular
Verifique se EXPO_PUBLIC_API_URL usa o IP da máquina na rede. localhost no celular aponta para o próprio celular, não para o computador.
Erro de módulo no CI por maiúsculas/minúsculas
O CI roda em Linux, onde MascotReactionTypes e mascotReactionTypes são caminhos diferentes. Use sempre o mesmo nome real do arquivo nos imports.
Expo falha com TypeError: fetch failed ao iniciar
Geralmente é falha temporária de rede ao buscar metadados do Expo. Verifique conexão, DNS, proxy/VPN e tente iniciar novamente.
Tabela não existe no PostgreSQL
Rode as migrations no backend:
cd backend
npm run prisma:migrateProjeto desenvolvido para fins acadêmicos.