Sistema inteligente de recomendação personalizada desenvolvido com tecnologias modernas. Este projeto demonstra a integração entre um app mobile React Native/Expo, backend Python FastAPI e APIs de IA (Claude, GPT, Gemini) para fornecer sugestões personalizadas aos usuários.
- Sobre o Projeto
- Tecnologias
- Estrutura do Projeto
- Começando
- Instalação
- Uso
- Funcionalidades
- Contribuindo
- Licença
- Contato
O Assistente de Recomendação é uma aplicação mobile full-stack que utiliza APIs de inteligência artificial para fornecer recomendações personalizadas. O sistema permite que usuários digitem suas preferências e recebam sugestões detalhadas geradas por modelos de IA de ponta.
- App mobile nativo para iOS e Android
- Suporte para 3 APIs de IA diferentes (Claude, GPT, Gemini)
- Interface intuitiva e moderna
- API RESTful robusta com FastAPI
- Processamento em tempo real
- Feedback visual durante carregamento
Este projeto foi desenvolvido com as seguintes tecnologias:
- React Native - Framework para apps mobile
- Expo - Plataforma de desenvolvimento React Native
- TypeScript - Superset tipado do JavaScript
- NativeWind (TailwindCSS) - Estilização utilitária para React Native
- Python 3.8+ - Linguagem de programação
- FastAPI - Framework web moderno e rápido
- Uvicorn - Servidor ASGI de alta performance
- Pydantic - Validação de dados
- OpenAI API - Integração com GPT
- Anthropic API - Integração com Claude
- Google Gemini API - Integração com Gemini
- Git & GitHub - Controle de versão
- GitHub Actions - CI/CD
- ESLint & Prettier - Qualidade de código
- Jest - Testes unitários
assistente-recomendacao/
├── .github/ # Configurações do GitHub (workflows, CI/CD)
├── backend/ # API Python com FastAPI
│ ├── venv/ # Ambiente virtual Python
│ ├── main.py # Aplicação principal FastAPI
│ ├── requirements.txt # Dependências Python
│ ├── setup.sh # Script de instalação
│ └── .env # Variáveis de ambiente (não commitado)
├── frontend/ # App mobile React Native + Expo
│ ├── app/ # Rotas e telas do app
│ ├── components/ # Componentes reutilizáveis
│ │ ├── styles.tsx
│ │ ├── preferences.tsx
│ │ └── recommendations.tsx
│ ├── services/ # Serviços e APIs
│ │ └── api.tsx
│ ├── tsconfig.json # Configuração TypeScript
│ ├── tailwind.config.js
│ └── package.json # Dependências do frontend
├── docs/ # Documentação do projeto
├── .gitignore # Arquivos ignorados pelo Git
├── .env # Variáveis de ambiente globais
├── .releaserc.json # Configuração de releases
├── package.json # Configurações do monorepo
├── LICENCE # Licença MIT
└── README.md # Este arquivoEstas instruções fornecerão uma cópia do projeto em execução na sua máquina local para fins de desenvolvimento e teste.
Certifique-se de ter instalado em sua máquina:
- Python 3.8 ou superior
- pip (gerenciador de pacotes Python)
- Node.js (versão 18 ou superior)
- npm ou yarn
- Git
- Expo Go (app no celular) - para testar o app mobile
Verifique as versões instaladas:
python3 --version
pip --version
node --version
npm --version
git --versiongit clone https://github.com/Apprendendo/assistente-recomendacao.git
cd assistente-recomendacaoCertifique-se de que o .gitignore na raiz do projeto contenha:
.venv/
venv/
node_modules/
__pycache__/
.env
.expo/cd backendchmod +x setup.sh
./setup.sh# Criar ambiente virtual
python3 -m venv venv
# Ativar ambiente virtual
# No Linux/Mac:
source venv/bin/activate
# No Windows:
# venv\Scripts\activate
# Instalar dependências
pip install --upgrade pip
pip install -r requirements.txtCrie um arquivo .env na raiz do projeto (não no backend):
# Escolha qual API usar: "anthropic", "openai" ou "gemini"
API_CHOICE=anthropic
# Tokens das APIs (obtenha em suas respectivas plataformas)
ANTHROPIC_TOKEN=sua_chave_anthropic_aqui
OPENAI_TOKEN=sua_chave_openai_aqui
GEMINI_TOKEN=sua_chave_gemini_aquiOnde obter os tokens:
- Anthropic (Claude): https://console.anthropic.com/
- OpenAI (GPT): https://platform.openai.com/api-keys
- Google (Gemini): https://ai.google.dev/
cd ../frontend
npm install
# ou
yarn installArquivos importantes já configurados:
tsconfig.json- Configuração TypeScript com pathstailwind.config.js- Configuração do NativeWindcomponents/styles.tsx- Estilos e cores globaiscomponents/preferences.tsx- Input de preferênciascomponents/recommendations.tsx- Exibição de resultadosservices/api.tsx- Comunicação com backend
cd backend
# Ative o ambiente virtual primeiro
source venv/bin/activate # Linux/Mac
# ou
venv\Scripts\activate # Windows
# Inicie o servidor
uvicorn main:app --reloadO backend estará rodando em http://localhost:8000
cd frontend
npx expo startOpções para testar o app:
- Pressione
wpara abrir no navegador web - Pressione
apara abrir no emulador Android - Pressione
ipara abrir no simulador iOS (Mac) - Escaneie o QR Code com o app Expo Go no seu celular:
Após iniciar ambos os servidores:
- Backend: Certifique-se de que
http://localhost:8000está rodando - Frontend: Abra o app no Expo Go (celular) ou navegador
- Digite suas preferências (ex: "filmes de ação e aventura")
- Clique em "Gerar Recomendações"
- Aguarde enquanto a IA processa seu pedido
- Visualize suas recomendações personalizadas!
No celular físico (Recomendado):
- Baixe o app Expo Go
- Escaneie o QR Code gerado por
npx expo start - O app será carregado automaticamente
No navegador web:
- Execute
npx expo start - Pressione
wpara abrir versão web
Em emuladores:
- Android: Pressione
a(requer Android Studio) - iOS: Pressione
i(requer Xcode - apenas Mac)
O backend FastAPI oferece os seguintes endpoints:
curl http://localhost:8000/Resposta:
{
"message": "API funcionando!",
"api_em_uso": "anthropic",
"token_loaded": true,
"endpoints": ["/", "/recommend (GET)", "/recommend (POST)"]
}curl -X POST http://localhost:8000/recommend \
-H "Content-Type: application/json" \
-d '{"preferences": "filmes de ação e aventura"}'Resposta:
{
"recommendations": "1. Mad Max: Fury Road - ...\n2. Indiana Jones - ...",
"api_used": "anthropic"
}curl http://localhost:8000/recommendO projeto suporta três APIs de IA. Configure a variável API_CHOICE no .env:
- Anthropic Claude -
API_CHOICE=anthropic(modelo: claude-sonnet-4) - OpenAI GPT -
API_CHOICE=openai(modelo: gpt-3.5-turbo) - Google Gemini -
API_CHOICE=gemini(modelo: gemini-2.5-flash)
- App mobile multiplataforma (iOS e Android)
- Sistema de recomendações com IA
- Suporte para múltiplas APIs (Claude, GPT, Gemini)
- Interface nativa moderna e responsiva
- API FastAPI rápida e assíncrona
- Configuração simplificada com variáveis de ambiente
- CORS configurado para desenvolvimento
- Feedback visual durante carregamento
- Tratamento de erros amigável
- Sistema de autenticação
- Histórico de recomendações
- Modo offline
- Compartilhamento de recomendações
cd backend
source venv/bin/activate # Ativar ambiente virtual
# Testar endpoints manualmente
curl http://localhost:8000/
curl -X POST http://localhost:8000/recommend \
-H "Content-Type: application/json" \
-d '{"preferences": "filmes de ficção científica"}'O Expo permite testes em tempo real:
cd frontend
npx expo start
# Opções de teste:
# - Pressione 'r' para reload
# - Pressione 'd' para abrir developer menu
# - Pressione 'j' para abrir debuggerfrontend/
├── app/
│ ├── _layout.tsx # Layout principal e navegação
│ └── index.tsx # Tela principal do app
├── components/
│ ├── styles.tsx # Estilos e cores globais
│ ├── preferences.tsx # Input de preferências
│ └── recommendations.tsx # Exibição de resultados
└── services/
└── api.tsx # Chamadas à API backendO FastAPI já está pronto para produção. Para deploy:
cd backend
source venv/bin/activate
# Opção 1: Com Uvicorn
uvicorn main:app --host 0.0.0.0 --port 8000
# Opção 2: Com Gunicorn + Uvicorn Workers
gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000Para build de produção do app Expo:
cd frontend
# Build para Android
eas build --platform android
# Build para iOS
eas build --platform ios
# Build para ambos
eas build --platform allPara mais informações sobre deploy, consulte a documentação do Expo EAS.
Contribuições são sempre bem-vindas! Se você quer contribuir com o projeto, siga estes passos:
- Faça um Fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
Leia CONTRIBUTING.md para detalhes sobre nosso código de conduta e processo de submissão de pull requests.
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
- Camila Oliveira - Desenvolvedora Web, Mobile e Professora - @clcmo
Veja também a lista de contribuidores que participaram deste projeto.
- Website: dev.camilaloliveira.me
- Blog: apprendendo.blog
- Ko-fi: ko-fi.com/clcmo
- Inspiração para o projeto
- Bibliotecas e frameworks utilizados
- Comunidade open source
⭐️ Se este projeto foi útil para você, considere dar uma estrela no repositório!