estudo de caso  /  mobile + api

RepublicApp

A república organizada num painel só.

Quem divide casa costuma organizar tarefas, compras e despesas em grupos de mensagem e planilhas. O RepublicApp junta tudo: residência com código de convite, tarefas com recorrência e responsável, lista de compras e um resumo de quem deve o quê.

contexto
Engenharia de Software 3, UNIVASF
equipe
4 a 5 pessoas, Scrum + Jira
período
2026
status
Demo no ar
01

Demo ao vivo

É o mesmo app do celular, exportado para a web com o Expo e ligado a uma API própria neste servidor. Já existe uma residência de exemplo com moradores e tarefas recorrentes. Entre com a conta abaixo ou crie a sua.

e-mail
demo@republica.dev
senha
demo123

Para testar o convite, crie uma conta nova e entre na residência pelo código REP-BTJ6.

02

Minha parte

O projeto foi feito em equipe. As partes que fiz:

  • Esqueleto da API: a estrutura em módulos do Fastify com TypeScript e MongoDB que o resto do time seguiu.
  • Integração do app com a API real: autenticação com renovação automática de token, residências e tarefas.
  • Telas do app: membros, próximas ocorrências, divisão de despesa por participante, lista de compras compartilhada, histórico com filtros e o plano premium simulado.
  • Lembretes premium: o endpoint e a tela de tarefas recorrentes atrasadas ou perto do vencimento.
  • Deploy: blueprint do Render no começo e, agora, Docker nesta VM atrás de um proxy com HTTPS.
03

Arquitetura da API

  1. routesRegistro por prefixo e hooks de autenticação JWT.
  2. middlewaresrequireMembership isola os dados por residência. requirePremium bloqueia recursos do plano.
  3. schemaValidação de entrada com Zod.
  4. serviceRegras de negócio: recorrência, permissões de admin, cálculo de vencimento.
  5. modelSchemas Mongoose no MongoDB.

Cada módulo (auth, residences, tasks, expenses, shopping, history, reports) segue o mesmo caminho model → schema → service → controller → routes. Os testes de integração rodam com mongodb-memory-server, sem depender de um banco externo.

04

Decisões técnicas

Isolamento por residência no middleware

Em vez de cada rota checar se o usuário é morador, um middleware faz isso antes de qualquer handler. Esquecer a verificação numa rota nova fica bem mais difícil.

Recorrência calculada no servidor

Tarefas diárias, semanais e mensais têm o próximo vencimento calculado na API, e um job agendado reabre as recorrentes todo dia.

Um código, três plataformas

O mesmo app em React Native roda no Android, no iOS e, nesta demo, no navegador via react-native-web.

Regras de negócio que protegem o grupo

Só o admin remove moradores, o admin não pode se remover e o último morador não pode sair. Assim, nenhuma residência fica sem dono.

05

Limitações e próximos passos

  • O plano premium é simulado, sem integração de pagamento.
  • Notificações push para os lembretes de tarefa.