FitVibes é um aplicativo social e gamificado para incentivar grupos de pessoas a manterem uma rotina de exercícios físicos através de pressão social positiva, desafios e recompensas simbólicas.
- Grupos de Exercício: Crie e participe de grupos com amigos, família ou colegas
- Sistema de Postagens: Registre suas atividades ou desculpas diariamente
- Votação Social: Membros votam na validade das atividades uns dos outros
- Sistema de Saldos: Controle simbólico de penalidades por "migués"
- Conquistas e Streaks: Sistema de gamificação com streaks globais e por grupo
- Notificações: Sistema completo de notificações para conquistas e saldos
- Perfil Detalhado: Estatísticas pessoais e histórico de atividades
- Framework: React Native com Expo SDK 53
- Navegação: Expo Router com file-based routing
- Estado: Zustand para gerenciamento de estado
- UI: Componentes customizados com MaterialCommunityIcons
- Tipagem: TypeScript completo
- Database: PostgreSQL com Supabase
- Autenticação: Supabase Auth com provedores sociais
- Tempo Real: Supabase real-time subscriptions
- Storage: Supabase Storage para mídia
- Funções: PostgreSQL functions para operações complexas
O sistema de notificações está totalmente funcional e inclui:
- ✅ Notificações automáticas para achievements (streaks, variedade, social)
- ✅ Notificações de saldo (criação, pagamentos)
- ✅ Interface dedicada para visualização
- ✅ Marcação como lida e navegação contextual
- ✅ Políticas RLS corretas para segurança
Documentação completa: docs/Notifications-System.md
- Node.js 18+
- Expo CLI
- Conta Supabase
# Clone o repositório
git clone <repository-url>
cd FitVibes
# Instale as dependências
npm install
# Configure as variáveis de ambiente
cp .env.example .env
# Edite .env com suas credenciais do Supabase
# Execute as migrações do banco
npx supabase db push
# Inicie o app
npx expo start# Desenvolvimento local
npx expo start
# Build para produção
npx eas build
# Deploy
npx eas deployIn your project's top-level build.gradle file, ensure that Google's Maven repository is included:
allprojects {
repositories {
google()
// If you're using a version of Gradle lower than 4.1, you must instead use:
// maven {
// url 'https://maven.google.com'
// }
}
}
Then, in your app-level build.gradle file, declare Google Play services as a dependency:
apply plugin: 'com.android.application'
...
dependencies {
implementation 'com.google.android.gms:play-services-auth:21.3.0'
}
ref: https://developer.android.com/identity/legacy/gsi
Put also the line with client id in android/app/src/main/res/values/strings.xml
<string name="server_client_id">844805817982-92ja2fuknng36v134rfekt0b81qsojf9.apps.googleusercontent.com</string>
Add also a web client.
fitvibes/
├── app/ # App entry point e configuração
│ ├── (tabs)/ # Navegação por abas
│ ├── groups/ # Telas relacionadas a grupos
│ ├── services/ # API e serviços externos
│ │ └── supabase.ts # Cliente Supabase (único)
│ └── notifications.tsx # Tela de notificações
├── supabase/ # Database e backend
│ ├── migrations/ # Migrações do banco
│ └── functions/ # Edge functions
├── docs/ # Documentação
└── types/ # Definições TypeScript
- ✅ Duplicação de Supabase Client: Unificado uso de uma única instância
- ✅ Políticas RLS: Corrigidas para role
authenticated - ✅ Triggers de Notificação: Implementados para achievements automáticos
- ✅ Autenticação Consistente: Garantido contexto de autenticação correto
- Fase 1-8: ✅ Completas (MVP funcional)
- Fase 9: 🔄 Em progresso (Testes e otimização)
- Fase 10-11: 📋 Planejadas (Deploy e lançamento)
- Contexto e Arquitetura
- Plano de Desenvolvimento
- Sistema de Notificações
- Design e UX
- Brief Detalhado para Design
- Brief Executivo para Design
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Desenvolvido com ❤️ para motivar pessoas a se exercitarem juntas!
This project follows the folder structure and conventions described in docs/Context.MD and docs/DevelopmentPlan.md, using src/ as the main source directory for all application code, features, and components.
State management is handled with Zustand, not Redux. The store.ts and store/ folder are for Zustand stores.
Use expo-router to build native navigation using files in the app/ directory.
npx create-expo-app -e with-routerDeploy on all platforms with Expo Application Services (EAS).
- Deploy the website:
npx eas-cli deploy— Learn more - Deploy on iOS and Android using:
npx eas-cli build— Learn more
- Ciclos de pagamento: Cada grupo define se o ciclo é semanal (fecha toda segunda) ou mensal (fecha todo dia 1).
- Penalidades: Ao perder uma votação (atividade inválida ou desculpa rejeitada), o usuário "deve" um valor simbólico, dividido entre os demais membros ativos do grupo.
- Consolidação de saldos: O backend consolida automaticamente os saldos por ciclo e por par de usuários, sem intervenção do frontend.
- Histórico detalhado: Cada penalidade é registrada com grupo, data, devedor, credor, motivo e valor.
- Pagamento simbólico: Não há transação real; o app permite marcar como pago manualmente.
- Notificações: Push ao fechar ciclo, informando os saldos.
| Campo | Tipo | Descrição |
|---|---|---|
| id | UUID | Identificador único |
| group_id | UUID | Grupo onde ocorreu |
| post_id | UUID | Post/atividade relacionada |
| from_user_id | UUID | Devedor |
| to_user_id | UUID | Credor |
| reason | TEXT | Motivo da penalidade |
| amount | NUMERIC | Valor atribuído |
| created_at | TIMESTAMP | Data/hora da penalidade |
| Campo | Tipo | Descrição |
|---|---|---|
| id | UUID | Identificador único |
| group_id | UUID | Grupo |
| from_user_id | UUID | Devedor |
| to_user_id | UUID | Credor |
| amount | NUMERIC | Valor total do ciclo |
| cycle_start | DATE | Início do ciclo |
| cycle_end | DATE | Fim do ciclo |
| status | TEXT | 'pending' ou 'paid' |
| created_at | TIMESTAMP | Data/hora de criação |
- Header com intervalo do ciclo atual (ex: "Ciclo: 1–7 de julho")
- Lista de dívidas por par (quem deve para quem, valor)
- Botão "Marcar como pago" para cada relação
- Status visual: 💰 (devedor), ⏳ (aguardando), ✔️ (pago)
- Saldos quitados recentemente aparecem em seção separada
- Lista detalhada de penalidades (data, grupo, devedor, credor, motivo, valor)
- Filtro por grupo ou ciclo
- Contador de valor total acumulado em penalidades
- Permissões RLS garantem que apenas usuários autenticados consultem seus próprios saldos e histórico.
- Toda consolidação de saldo é feita exclusivamente pelo backend.
- Push ao fechar ciclo, informando os saldos e incentivando a regularização.
Para detalhes técnicos completos, consulte docs/Context.MD e docs/DevelopmentPlan.md.













