pop

POPMe

Aplicativo Flutter de rede social com detecção de emoções desenvolvido pela Wortya.

Sobre o Projeto

POPMe é uma aplicação móvel de rede social que permite aos usuários compartilhar vídeos e interagir através de comentários, reações e funcionalidades avançadas de detecção de emoções usando inteligência artificial.

Principais Funcionalidades

Arquitetura

Este projeto segue os princípios da Clean Architecture com uma estrutura modular:

Estrutura Modular

pop_me/
├── commons/           # 17 módulos de infraestrutura compartilhada
│   ├── analytics          - Firebase Analytics
│   ├── core               - Abstrações base, utilitários, exceções
│   ├── crash_report       - Crashlytics e relatórios de erro
│   ├── emotion_detection  - Detecção de emoções com TFLite
│   ├── emotion_utils      - Verificação de capacidade de dispositivo
│   ├── face_detection     - Detecção facial em frames de câmera
│   ├── navigation         - Roteamento e navegação
│   ├── network            - Clientes HTTP (Dio), interceptors
│   ├── notifications      - FCM, push notifications, badge service
│   ├── recording          - Gravação, compressão e upload de vídeo
│   ├── remote_config      - Firebase Remote Config
│   ├── security           - OAuth, tokens, armazenamento seguro
│   ├── tutorial_check     - Experiência do primeiro uso
│   ├── user               - Modelos e serviços de usuário
│   ├── validator           - Validação de entrada
│   ├── video              - Utilitários de reprodução de vídeo
│   └── video_composition  - Composição e mesclagem de vídeo
│
├── design_system/     # Componentes de UI
│   ├── core               - Tema, cores, tipografia, design tokens
│   ├── components         - Widgets reutilizáveis, sistema de câmera
│   └── sample             - Showcase de componentes
│
├── features/          # 19 módulos de funcionalidades
│   ├── authentication     - Login e autenticação
│   ├── challenge          - Desafios e prompts
│   ├── configuration      - Configurações do app
│   ├── custom_lists       - Listas de conteúdo personalizadas
│   ├── emotion_evaluation - Análise pós-gravação de emoções
│   ├── eye_shooter        - Gamificação de rastreamento ocular
│   ├── feed               - Feed principal de vídeos
│   ├── flows              - Fluxos multi-etapas
│   ├── home               - Navegação principal, gravação, deep linking
│   ├── interactions       - Comentários, reações, funcionalidades sociais
│   ├── landing            - Onboarding e telas iniciais
│   ├── notifications      - Lista e gerenciamento de notificações
│   ├── pop_recording      - Gravação dual sequencial de câmera
│   ├── profile            - Perfil de usuário, rascunhos, configurações
│   ├── register           - Registro multi-etapas
│   ├── relationship       - Follow/unfollow, conexões entre usuários
│   ├── repop_recording    - Regravação de câmera única
│   ├── screencast_recording - Gravação de tela
│   └── splash             - Inicialização e carregamento
│
└── lib/               # Aplicação core, DI setup, roteamento

Cada módulo segue Clean Architecture com:

Stack Tecnológica

Testes & Qualidade

O projeto segue convenções unificadas descritas em docs/04-guias/testes.md. Resumo rápido:

Antes de abrir PRs:

flutter analyze
./tool/run_all_tests.sh --report

Setup do Projeto

Para guia detalhado, veja docs/00-inicio-rapido/.

Pré-requisitos

Instalação

# Clone o repositório
git clone <repository-url>
cd pop

# Instale as dependências do Flutter
flutter pub get

# Gere os arquivos de injeção de dependência
flutter packages pub run build_runner build

# Setup do iOS (apenas macOS)
cd ios && pod install && cd ..

# Verifique se tudo está configurado
flutter doctor

Para instalação detalhada do Flutter SDK, veja docs/00-inicio-rapido/pre-requisitos.md.

Executando a Aplicação

# Ambiente de desenvolvimento
flutter run --dart-define=ENVIRONMENT=dev

# Ambiente de staging
flutter run --dart-define=ENVIRONMENT=staging

# Ambiente de produção
flutter run --dart-define=ENVIRONMENT=prod

# Modo release com produção
flutter run --release --dart-define=ENVIRONMENT=prod

# Executar em dispositivo específico
flutter run -d <device-id> --dart-define=ENVIRONMENT=prod

# Listar dispositivos disponíveis
flutter devices

# Executar app de exemplo do Design System
cd design_system/sample && flutter run && cd ../..

Testes

# Executar todos os testes (todos os pacotes)
./tool/run_all_tests.sh

# Executar com coverage e relatório HTML
./tool/run_all_tests.sh --report

# Executar testes de um módulo específico
flutter test features/feed/test/
flutter test commons/core/test/

# Executar arquivo de teste específico
flutter test test/path/to/test_file.dart

Build e Deploy

# Build APK (desenvolvimento)
flutter build apk --dart-define=ENVIRONMENT=dev

# Build APK (produção)
flutter build apk --dart-define=ENVIRONMENT=prod

# Build App Bundle (Play Store)
flutter build appbundle --dart-define=ENVIRONMENT=prod

# Build iOS (desenvolvimento)
flutter build ios --dart-define=ENVIRONMENT=dev

# Build iOS (produção)
flutter build ios --dart-define=ENVIRONMENT=prod

Workflow de Desenvolvimento

# Limpar e reconstruir arquivos gerados
flutter packages pub run build_runner clean
flutter packages pub run build_runner build --delete-conflicting-outputs

# Limpar build cache
flutter clean

# Analisar código
flutter analyze

# Formatar código
dart format .

Configuração de Ambientes

Use --dart-define=ENVIRONMENT=<env> para especificar o ambiente.

Documentação

Navegue a documentação completa em docs/README.md:

Contribuindo

  1. Faça um fork do projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

Convenções

Solução de Problemas

Erro de dependências:

flutter clean && flutter pub get
flutter packages pub run build_runner build --delete-conflicting-outputs

Problemas com iOS:

cd ios && pod deintegrate && pod install && cd ..

Problemas com injeção de dependência:

flutter packages pub run build_runner clean
flutter packages pub run build_runner build

Erro de build do Android:

cd android && ./gradlew clean && cd ..
flutter clean && flutter build apk

Licença

Este projeto está licenciado sob a MIT License.


Desenvolvido com Flutter e Clean Architecture