Aplicativo mobile do Animus, uma plataforma de analise de precedentes juridicos a partir de peticoes iniciais. Este cliente foi desenvolvido em Flutter, com foco em separacao por camadas, evolucao incremental dos dominios e integracao com servicos de autenticacao, analise juridica com IA, historico de analises e notificacoes.
O Animus Mobile atende os principais fluxos do produto:
- Auth: cadastro, login, perfil e sessao do usuario.
- Intake: envio de petição inicial para analise de precedentes com IA.
- Storage: historico, organizacao e exportacao de analises realizadas.
- Notification: notificacoes assincronas sobre eventos importantes, como conclusao de analises.
O produto e voltado para advogados e juizes, atuando como ferramenta de apoio para identificacao de precedentes juridicos relevantes. A decisao final sobre o uso dos precedentes continua sendo do usuario.
O repositorio mobile utiliza atualmente:
- Framework: Flutter
- Linguagem: Dart 3.10+
- Navegacao: go_router
- Linting: flutter_lints
- Testes: flutter_test
No contexto do produto Animus, a aplicacao tambem se integra com uma stack mais ampla formada por backend em FastAPI, IA generativa, autenticacao, storage e notificacoes push.
O projeto segue uma arquitetura em camadas para reduzir acoplamento, facilitar testes e permitir a evolucao dos dominios de negocio.
- UI (
lib/ui/): telas, widgets e fluxo de navegacao. - Core (
lib/core/): contratos, DTOs e regras de dominio. - REST (
lib/rest/): clientes HTTP, services e mapeadores. - Drivers (
lib/drivers/): infraestrutura e adaptadores externos.
O repositorio esta em fase de bootstrap e ja contem:
- ponto de entrada da aplicacao (
lib/main.dart) - configuracao da app e tema (
lib/app.dart,lib/theme.dart) - rotas iniciais (
lib/router.dart,lib/constants/routes.dart) - primeira tela de autenticacao (
lib/ui/auth/widgets/pages/sign_up_screen/index.dart)
As camadas core, rest e drivers ja fazem parte da estrutura-base e serao expandidas conforme os proximos modulos do produto forem implementados.
Para detalhes tecnicos, consulte a Documentacao de Arquitetura.
lib/
├── app.dart
├── main.dart
├── router.dart
├── theme.dart
├── constants/
├── core/
├── drivers/
├── rest/
└── ui/- Flutter SDK compativel com o projeto
- Dart SDK 3.10+
- Android Studio e/ou Xcode, conforme a plataforma alvo
-
Clone o repositorio:
git clone <url-do-repositorio> cd animus-mobile
-
Instale as dependencias:
flutter pub get
-
Configure o ambiente local via
.env:Copy-Item .env.example .env
Depois, preencha as variaveis abaixo no arquivo
.env:-
ANIMUS_SERVER_APP_URL- O que e: URL base do backend Animus consumido pelo app.
- Como obter (dev local Android Emulator): use
http://10.0.2.2:8080se o backend estiver rodando na sua maquina na porta8080. - Como obter (dispositivo fisico): use o IP da maquina na rede local (ex.:
http://192.168.0.10:8080).
-
GOOGLE_IOS_CLIENT_ID- O que e: OAuth Client ID do tipo iOS para o app nativo.
- Como obter:
- Acesse o Google Cloud Console.
- Selecione o projeto usado pelo Animus.
- Va em APIs & Services > Credentials.
- Crie (ou copie) um OAuth client ID do tipo iOS.
- Use o valor de Client ID nesta variavel.
- Importante iOS: mantenha o
reversed client idalinhado comCFBundleURLSchemesnoInfo.plist.
-
GOOGLE_SERVER_CLIENT_ID- O que e: OAuth Client ID do tipo Web/Server, usado para emissao/validacao de token no backend.
- Como obter:
- No mesmo projeto do Google Cloud, abra APIs & Services > Credentials.
- Crie (ou copie) um OAuth client ID do tipo Web application.
- Use o valor de Client ID nesta variavel.
-
GCS_URL- O que e: endpoint base do servico de storage usado pelo app.
- Como obter (dev local): se estiver usando emulacao/local storage gateway, use
http://10.0.2.2:4443no Android Emulator.
Exemplo de
.envpara ambiente local:ANIMUS_SERVER_APP_URL=http://10.0.2.2:8080 GOOGLE_IOS_CLIENT_ID=seu-client-id-ios.apps.googleusercontent.com GOOGLE_SERVER_CLIENT_ID=seu-client-id-web.apps.googleusercontent.com GCS_URL=http://10.0.2.2:4443
-
-
Execute o app em desenvolvimento:
make dev
Ou, se preferir, execute diretamente com Flutter:
flutter run
Os principais documentos do projeto estao em documentation/:
Os dominios atuais do produto sao:
auth: autenticacao, perfil e sessaointake: envio de petição e analise de precedentesstorage: historico, organizacao e exportacao de analisesnotification: notificacoes assincronas
Execute os comandos abaixo para validar o projeto:
flutter analyze
flutter test
dart format .Atalhos disponiveis no Makefile:
make dev
make test
make buildO repositório possui um workflow de CD em .github/workflows/android-cd.yml que roda a cada push nas branches main e production.
main: gera um APK assinado do ambientemaine publica uma nova GitHub Release com o assetanimus-main-<sha>.apkproduction: gera um APK assinado do ambienteproductione publica uma nova GitHub Release com o assetanimus-production-<sha>.apk
Crie dois environments no GitHub:
mainproduction
Cada environment deve conter os secrets abaixo com os valores do respectivo ambiente:
ANIMUS_SERVER_APP_URLGOOGLE_IOS_CLIENT_IDGOOGLE_SERVER_CLIENT_IDGCS_URLPANGEA_URLANDROID_KEYSTORE_BASE64ANDROID_KEYSTORE_PASSWORDANDROID_KEY_ALIASANDROID_KEY_PASSWORD
ANDROID_KEYSTORE_BASE64deve conter o arquivo.jksoficial codificado em Base64- o workflow reconstrói a keystore no runner, gera
android/key.propertiesdinamicamente e assina oflutter build apk --release android/key.propertiese arquivos.jksficam ignorados no Git e não devem ser versionados
Os APKs de main e production são separados para distribuição, mas usam o mesmo applicationId. Por isso, instalar um deles sobre o outro substituirá o app já instalado no dispositivo.
Este projeto esta licenciado sob a licenca MIT.