README

Tesouro Espiritual - Congregação Mariana

Um app para facilitar a contagem de tesouros, permitindo ao Padre Diretor ter uma noção de como está a vida espiritual dos membros e acompanhar seus avanços e dificuldades no caminho para a eternidade.

Desafios

O App visa não ter custos com licenciamento, ou seja, publicar nas lojas Play Store e App Store sem custos adicionais. Para isso, utilizamos ferramentas de desenvolvimento no plano gratuito (Vercel e Firebase Spark). O ciclo de vida do app foi implementado de maneira a ser fácil de manter e escalável para ser acessível a outras congregações.

O sistema é estável graças ao uso do Firestore Firebase, proporcionando uma distribuição fácil e confiável, com baixa latência e conformidade com as normas do LGPD e GDPR. A escolha foi baseada na necessidade de um banco de dados NoSQL, já que o Supabase ainda não atendia a esse critério e enfrentava problemas de segurança de dados no momento da escolha.

A contagem geral dos tesouros para definir a saúde da congregação foi um desafio significativo. Lidando com um banco de dados não relacional, implementamos regras para melhor uso da filtragem geral, suportadas pelo Firebase com dados massivos.

Arquitetura do Projeto

Desenvolvi o projeto usando Flutter na versão 3.13.9. Adotei uma abordagem simplificada para todas as funcionalidades do projeto, onde cada tela representa um módulo. Para gerenciamento de estado, utilizei o BloC. Na versão 2.0 do app, implementarei injeção de dependência para facilitar a escalabilidade e a manutenção futura, além de permitir o uso de outros tipos de banco de dados.

Imagem do BloC

Para evitar dependência excessiva de pacotes externos e lidar com problemas de versão do Flutter, implementei funcionalidades como cache, repositórios e validação de campos de login na pasta package. A migração para a nova versão do Flutter Web está em segundo plano para permitir a execução em WebAssembly (WASM), melhorando a performance e o carregamento nativo.

Utilizei o DeferredWidget para lidar com o carregamento em cache, permitindo menor latência na web. Isso divide o app em partes menores, carregadas conforme necessário.

A implementação é feita da seguinte maneira:

O DeferredWidget no código é um widget Flutter projetado para carregar dinamicamente uma biblioteca (ou módulo) quando necessário e exibir um widget associado a essa biblioteca após o carregamento. Ele é útil quando você deseja dividir seu aplicativo em partes menores (bibliotecas ou módulos) que são carregadas apenas quando necessário, economizando recursos e melhorando o desempenho inicial do aplicativo.

Captura de Tela 2024-06-27 às 14 19 55

Recursos como notificações push e analytics foram implementados na parte nativa da web, explorando recursos de cache, splash em CSS, bloqueio de modo desenvolvedor, metadados, e geração de PDF para salvar documentos gerados. Cada usuário tem um UUID gerado com 528 bits, garantindo uma taxa de colisão extremamente baixa de (2^{528}).

Funcionalidades

  • Nota: O tesouro é um agrupamento de 14 itens para preenchimento mensal. O Tesouro Espiritual é um recurso usado pelas Congregações para contabilizar atos de piedade realizados ao longo do mês.

  • Login

  • Criar usuário

  • Recuperação de senha

  • Gerar PDF do tesouro mensal

  • Visualização do tesouro mensal, individual e da igreja

  • Marcação do tesouro

  • Escolher mês e dia para preenchimento do tesouro

  • Notificações diárias às 21h

  • Contagem geral dos membros por mês

  • Recurso para redirecionamento ao site principal salvemaria.com.brarrow-up-right

  • Seção sobre com informações e FAQ

  • Visualização de licenças usadas

  • Console no Firebase para publicar notificações, bloquear/desbloquear usuários, recuperação de senha e confirmação de criação de conta

Design

Desenvolvi com base no Material Design 3 e todos os tipos de animações nativas do Flutter. Inclui acessibilidade para todos os botões com suporte a TalkBack e VoiceOver, além de responsividade para qualquer plataforma.

Arquitetura

Captura de Tela 2024-06-27 às 14 34 19

Arquitetura do projeto

Captura de Tela 2024-06-27 às 14 34 51

Definição de cada feature/modulo

Melhorias Futuras

  • Implementação de injeção de dependência

  • Exploração dos conceitos de SOLID e Clean Dart

  • Migração para WebAssembly

  • Implementação de testes unitários com cobertura acima de 80%

  • Implementação de testes de widget

  • Ciclo de melhoria contínua voltado para testes

  • Desacoplamento do design system do Material Design

  • Desacoplamento do app do Firebase

  • Uso de feature flags

  • Notificações push para dias não marcados

  • Novas formas de distribuição PWA

  • Adição de recursos de analytics

  • Melhoria na integração com web

  • Esconder variáveis de ambiente na Vercel

Segurança

Por questões de segurança, apenas o domínio principal está configurado para funcionar no Firebase, impedindo o uso indevido do banco de dados e da autenticação. Essa configuração é feita via console do Firebase.

Deploy

Cada nova versão é criada a partir da branch main. Novos recursos, correções e releases são desenvolvidos em branches separadas, respeitando boas práticas de engenharia de software. As configurações do projeto estão visíveis no line command

firebase.json, definindo as regras de acesso ao banco de dados e os recursos que precisam ser carregados. Na versão 2.0, planejo ajustar as branches para evitar conflitos na main.

  • Build Command: flutter/bin/flutter build web --release

  • Output Directory: build/web

  • Development Command:

Console Firebase

Captura de Tela 2024-06-27 às 14 40 24

Firebase Consolearrow-up-right

Vercel Console

Captura de Tela 2024-06-27 às 14 41 40

Vercel Consolearrow-up-right

Push Notifications

Captura de Tela 2024-06-27 às 14 42 38

Instalação

Para instalar o APP Tesouro:

Nota: Recomendo o uso do Puro para gerenciamento de versão do Flutter. Versão do Flutter: 3.13.9

Design do app [Telas]

Screenshot 1

Screenshot 2

Screenshot 3

Screenshot 4

Screenshot 5

Screenshot 6

Screenshot 7

Screenshot 8

Screenshot 9

Screenshot 10

Screenshot 11

Screenshot 12

Screenshot 13

Screenshot 14

Captura de Tela 2024-06-27 às 15 37 44

Versão 1.0.0 do app

loginv1

homev1

homev1

homev1

homev1

homev1

Acesse o Whitepaper do projetoarrow-up-right

Last updated