eletrotupi / tcc/ README.md1b8d5d79f03d61a20e683b0da33bbd8abe43bf86
4.7 KB | 129 lines Raw
1
# Nexo
2

3
Nexo é um aplicativo de monitoramento de humor para pessoas com
4
transtorno bipolar, e também um trabalho de conclusão de curso. Ele
5
parte de uma pergunta simples e teimosa: como perceber o próprio estado
6
emocional quando ele muda depressa, e o que ajuda a explicá-lo?
7

8
Registrar "como eu estou" é só o começo. A proposta é guardar também o
9
contexto em volta do registro — o que aconteceu, como estavam o corpo e
10
a cabeça, o que veio depois. Com o tempo, esses fragmentos formam uma
11
linha do tempo que dá para reler e onde dá para enxergar padrões.
12

13
Originalmente o app seria 100% offline; por exigência do curso, porém,
14
passou a contar com um backend, então esta versão funciona com uma API
15
implantada.
16

17
> Nota histórica: o nome original do projeto era **orbit**. É normal
18
> encontrá-lo por aí em algum arquivo de código ou string esquecida.
19

20
## O que é o EMA
21

22
O Nexo se apoia no EMA — *Ecological Momentary Assessment*, ou avaliação
23
ecológica momentânea. Em vez de pedir que a pessoa reconstrua o dia
24
inteiro de memória no fim da noite, o EMA propõe capturar o estado no
25
momento em que ele acontece, no ambiente cotidiano e não no consultório.
26

27
Na prática, isso muda o que o app pergunta. Ele não quer ser um diário
28
genérico nem um placar de humor; quer registrar o instante e os seus
29
arredores. É isso que permite, mais tarde, comparar tendências, cruzar
30
sono e energia, e notar quais situações tendem a se repetir.
31

32
## Funcionalidades
33

34
- **Humor** — registro rápido ou detalhado, com energia, ansiedade e
35
  estresse (escala de 0 a 10), emoções com intensidade e anotação livre.
36
- **Gatilhos** — eventos do dia a dia por categoria, que podem ser
37
  vinculados a um humor com o impacto percebido de cada um.
38
- **Sono** — registro diário de horas e qualidade.
39
- **Ações de cuidado** — medicações, consultas e atividades, que também
40
  podem se ligar a humores e gatilhos.
41
- **Medicamentos** — regimes recorrentes com horários, uma visão do
42
  "hoje" para confirmar doses e lembretes automáticos.
43
- **Histórico** — um feed único e cronológico de tudo, com filtros por
44
  tipo.
45
- **Jornada** — tendência de humor, correlação entre sono e energia,
46
  padrões de gatilho e resumos diários, gerados periodicamente.
47
- **Relatório** — um PDF "clínico" do período (até 90 dias) para levar à
48
  consulta.
49
- **Exportação** — todos os dados em CSV, enviados por e-mail.
50

51
## Estrutura do monorepo
52

53
```sh
54
nexo/
55
├── api         # servidor Express + Prisma
56
├── frontend    # app React Native (Expo)
57
├── monografia  # a tese, em LaTeX
58
├── docs        # decisões (ADRs) e notas de trabalho
59
├── ansible     # provisionamento do servidor
60
└── docker-compose.yml
61
```
62

63
## Arquitetura
64

65
- **API** — Express, Zod e Prisma sobre PostgreSQL; BullMQ com Valkey
66
  para tarefas em segundo plano; Resend para e-mail e Expo para
67
  notificações.
68
- **Mobile** — React Native (Expo), expo-router, React Query com cache
69
  persistido em MMKV e Zustand para o estado efêmero.
70
- **Infra** — Docker Compose no dia a dia e Ansible para o servidor;
71
  GitHub Actions cuida do deploy da API e da publicação da tese.
72

73
![Arquitetura e elementos do sistema](monografia/images/arch-v2.png)
74

75
## Como rodar localmente
76

77
Pré-requisitos: Docker e o Expo CLI.
78

79
```sh
80
# sobe banco, fila e API
81
docker compose up -d db valkey api
82

83
# cria dados de exemplo
84
cd api && npm run seed
85
```
86

87
O app móvel usa um *development build* por conta de dependências nativas, então logue com a conta do expo, gere uma build e depois basta rodar o comando:
88

89
```sh
90
cd frontend
91
npm install
92
cp .env.example .env.local   # aponte a base da API para o IP da máquina
93
eas build # apenas para gerar a build de desenvolvimento
94
npx expo start # uso normal
95
```
96

97
## Testes
98

99
A API usa Vitest e roda dentro do container, porque o banco de teste
100
vive na rede do Compose:
101

102
```sh
103
docker compose exec api npm run test:setup
104
docker compose exec api npm test
105
```
106

107
No mobile há fluxos de fumaça com Maestro, que roda num aparelho Android
108
físico. Vale dizer que isso ainda é experimental: exige o Maestro e o `adb`
109
instalados, além de um device conectado.
110

111
```sh
112
cd frontend && npm run test:e2e
113
```
114

115
## Monografia
116

117
A tese que acompanha o projeto vive em `monografia/`, escrita em LaTeX.
118
A edição costuma ser feita no Vim com o **vimtex**, que cuida de
119
compilar enquanto se escreve.
120

121
## Licença
122

123
Por ser um projeto acadêmico, ele não é plenamente livre: o IFSul
124
reserva uma parcela de autoria ao orientador, ao aluno e à instituição.
125

126
Ainda assim, na medida do possível, o código está sob os termos da
127
GPL-3.0-only e o texto sob a CC BY-NC-SA 4.0. Na prática: a tese pode
128
ser lida, citada e compartilhada, mas não pode ser vendida nem usada
129
comercialmente.