Skip to content

Commit e9c5700

Browse files
Thales-Chagasclaude
andcommitted
Lancamento por IA no app: audio + foto de comprovante
- Edge Functions (Supabase): "processar" (Whisper+Claude para o app) e "whatsapp" (robo via Meta Cloud API, em espera ate verificacao da empresa) - Schema inicial do banco com RLS em todas as tabelas + bucket privado de comprovantes (supabase/migrations) - App: botoes de Audio (MediaRecorder) e Comprovante (camera) na tela de lancamentos; a IA le e preenche o formulario para conferencia/salvar; comprovante guardado e visualizavel na lista - Cliente Supabase com chave publica (sem segredos no front) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent e7ba131 commit e9c5700

10 files changed

Lines changed: 1279 additions & 12 deletions

File tree

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,8 @@ dev-dist
55
# Dados financeiros reais — nunca publicar
66
src/dadosPlanilha.json
77

8-
# Configuração local do Claude Code
8+
# Arquivos temporários do Supabase CLI (estado local)
9+
supabase/.temp/
10+
11+
# Configura��o local do Claude Code
912
.claude/

ESTUDO-IA-Comprovantes.md

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
# Estudo — Lançamento por áudio (IA) + Guarda de comprovantes no Thayfinance
2+
3+
> Documento de planejamento. **Nenhum código foi alterado no app.** Serve para você decidir com calma.
4+
> Data: 25/06/2026
5+
6+
---
7+
8+
## 1. Visão geral — como tudo vai funcionar
9+
10+
Hoje o Thayfinance é um app **100% no aparelho**: React rodando no GitHub Pages, com os dados salvos no `localStorage` do navegador. Não existe servidor nenhum.
11+
12+
Para ter **áudio com IA** e **comprovantes**, o app precisa de uma peça nova: um **backend** (um "cérebro" na nuvem) que guarde os segredos e faça o trabalho pesado. O motivo é segurança (detalhado na seção 7), mas a regra é simples:
13+
14+
> **Chave de IA nunca pode ficar no código do site.** O GitHub Pages é público; qualquer pessoa abre o "inspecionar" do navegador e veria a chave. Então a IA é chamada por um servidor, não pelo navegador.
15+
16+
A peça que escolhemos pra ser esse backend é o **Supabase** (a mesma base que você já usou no Premium Beef).
17+
18+
### Desenho geral
19+
20+
```
21+
Seu celular/PC Nuvem (Supabase) IA
22+
┌───────────────┐ token ┌──────────────────┐ chave ┌──────────┐
23+
│ Thayfinance │ ───────────► │ Edge Function │ ──────►│ Whisper │ (áudio→texto)
24+
│ (GitHub Pages)│ │ (mini-servidor) │ │ + Claude │ (texto→lançamento)
25+
│ │ ◄─────────── │ │ ◄──────│ │
26+
└───────────────┘ resposta │ Banco (Postgres) │ └──────────┘
27+
│ Storage (arquivos)│
28+
│ Login (Auth) │
29+
└──────────────────┘
30+
```
31+
32+
### Fluxo A — Lançar por áudio
33+
1. Você aperta o microfone no app e fala: *"gastei 87 e 40 no mercado ontem no cartão"*.
34+
2. O navegador grava o áudio (recurso nativo, `MediaRecorder` — não instala nada).
35+
3. O áudio sobe pro Supabase (autenticado pelo **seu** login).
36+
4. A Edge Function manda o áudio pro **Whisper** → vira texto.
37+
5. O texto vai pro **Claude** com a ordem: "transforme isso num lançamento em JSON".
38+
- Resultado: `{ valor: 87,40, categoria: "Mercado", tipo: "despesa", data: "ontem", metodo: "cartão" }`
39+
6. O app recebe o JSON, **mostra pra você revisar** e, ao confirmar, grava o lançamento — na mesma estrutura que hoje você preenche no formulário.
40+
41+
> A revisão antes de gravar é de propósito: a IA acerta quase sempre, mas você sempre dá o "ok" final. Nada entra sem você ver.
42+
43+
### Fluxo B — Mandar foto do comprovante (a IA lê e lança sozinha) ⭐
44+
Esta é uma **função principal** do projeto (decidida em 27/06/2026): você manda a **foto do comprovante** pro robô no WhatsApp e ele faz o resto.
45+
1. Você tira a foto do comprovante (cupom, nota, recibo, Pix) e manda pro robô no WhatsApp — ou anexa no app.
46+
2. A imagem sobe pro **Storage privado** do Supabase (não fica pública na internet) e fica **guardada** pra você consultar quando quiser.
47+
3. O **Claude (visão/OCR)** lê o comprovante e extrai sozinho: **valor, data, estabelecimento e categoria sugerida**.
48+
4. O robô responde com o lançamento já montado pra você **conferir e confirmar** ("✅ R$ 87,40 — Mercado — 26/06 — confirma?"). Ao confirmar, grava o lançamento **já vinculado ao comprovante**.
49+
5. Depois, o comprovante fica acessível dentro do lançamento por um **link temporário** (expira em minutos) — ninguém de fora acessa.
50+
51+
> Ou seja: uma foto só → a IA lê, lança e arquiva o comprovante. A pessoa só dá o "ok".
52+
53+
---
54+
55+
## 2. Vou precisar de domínio novo? — **NÃO**
56+
57+
- Seu app continua no mesmo endereço: **`thales-chagas.github.io/thayfinance/`**. Nada muda.
58+
- O Supabase te dá **automaticamente e de graça** um endereço de backend (algo como `xyzabc.supabase.co`). Isso **não é um domínio que se compra** — é gerado sozinho quando você cria o projeto. O usuário nunca vê esse endereço; é só o app que conversa com ele.
59+
- **Domínio próprio** (ex: `thayfinance.com.br`) é totalmente **opcional** e só pra estética. Se um dia você quiser, custa ~R$40/ano no registro.br. Não tem nada a ver com fazer a IA ou os comprovantes funcionarem.
60+
61+
**Resumo:** zero domínio novo necessário.
62+
63+
---
64+
65+
## 3. As contas já criadas localmente vão se perder? — **NÃO, com um plano de migração**
66+
67+
Essa é a pergunta mais importante e a resposta exige cuidado. Vou ser transparente sobre o que acontece:
68+
69+
### O que existe hoje
70+
- Cada aparelho guarda **localmente**: o login (nome + PIN com hash) na chave `financas_app_login`, e os dados financeiros na chave `financas_app_data`.
71+
- Isso **não some** quando publicamos uma versão nova. Atualizar o site **não apaga o `localStorage`** do navegador. Os dados continuam lá.
72+
73+
### O risco real
74+
- O login local de hoje (PIN) **não é a mesma coisa** que o login de nuvem (Auth do Supabase, com e-mail/senha). Ao migrar, a pessoa cria uma conta de verdade na nuvem.
75+
- Sem um plano, alguém poderia criar a conta nova e achar o app "vazio", porque os dados antigos estão no `localStorage` e os novos no banco da nuvem.
76+
77+
### O plano que elimina o risco (migração automática, uma única vez)
78+
Quando a pessoa abrir a versão nova e fizer login na nuvem pela primeira vez, o app:
79+
1. Verifica se existe `localStorage` antigo no aparelho.
80+
2. Se existir e a conta na nuvem estiver vazia, **pergunta:** *"Encontramos dados neste aparelho. Deseja enviá-los para sua conta?"*
81+
3. Com o "sim", ele **sobe tudo** pro banco da nuvem.
82+
4. A partir daí os dados ficam na nuvem (e ainda continuam no aparelho como cópia, até você decidir limpar).
83+
84+
**Conclusão:** ninguém perde nada. O `localStorage` é preservado e vira a ponte da migração. E há ainda a rede de segurança da seção 4.
85+
86+
---
87+
88+
## 4. Dá pra exportar e reimportar os dados? — **JÁ EXISTE e vai continuar**
89+
90+
Boa notícia: o seu app **já faz isso hoje**.
91+
- **Exportar:** o botão de backup gera um arquivo `thayfinance-AAAA-MM-DD.json` com **tudo** dentro.
92+
- **Importar:** o app lê esse arquivo de volta e restaura os dados (com uma confirmação antes de substituir).
93+
94+
No projeto novo isso **continua funcionando** e ganha um papel extra:
95+
- Vira a sua **rede de segurança** antes da migração: você exporta o backup, e só então faz a atualização. Se qualquer coisa der errado, é só reimportar.
96+
- O formato é o mesmo, então **backups antigos continuam válidos**.
97+
98+
**Recomendação:** antes de migrar, em cada aparelho, clique em "Exportar backup" e guarde o arquivo (você já guarda o `meus-dados-thayfinance.json` na Área de Trabalho). Migração com backup na mão = risco praticamente zero.
99+
100+
---
101+
102+
## 5. Quais tecnologias vamos usar e o que cada uma faz
103+
104+
| Tecnologia | Papel | O que faz, em português |
105+
|---|---|---|
106+
| **React + Vite** (já tem) | Interface | É o seu app atual, a tela que a pessoa usa. Continua igual. |
107+
| **GitHub Pages** (já tem) | Hospedagem do site | Onde o app fica publicado, de graça. Não muda. |
108+
| **Supabase** | Backend (guarda-chuva) | A "nuvem" do app. Reúne as 4 peças abaixo num só lugar. |
109+
|**Supabase Auth** | Login de verdade | Cada pessoa entra com e-mail/senha. É o que permite "eu + outras pessoas" com segurança. |
110+
|**Supabase Postgres** | Banco de dados | Onde os lançamentos passam a morar (no lugar do `localStorage`). |
111+
|**Supabase Storage** | Cofre de arquivos | Onde os comprovantes (foto/PDF) ficam guardados, de forma privada. |
112+
|**Edge Functions** | Mini-servidor seguro | Pequenos programas que rodam na nuvem e seguram as chaves de IA. O navegador nunca toca nelas. |
113+
| **RLS (Row Level Security)** | Tranca do banco | Regra do Postgres que garante: cada pessoa só lê/escreve os **próprios** dados. **Obrigatório** no seu caso. |
114+
| **Whisper** (OpenAI) | Áudio → texto | Transcreve o que você falou. É o padrão do mercado, barato e preciso. |
115+
| **Claude (Haiku 4.5)** | Texto/imagem → lançamento | Entende a frase e monta o lançamento; e lê comprovantes (visão) pra pré-preencher valor/data. |
116+
117+
> **Por que Whisper + Claude e não um só?** Whisper é imbatível e baratíssimo pra transcrever áudio; Claude é excelente pra "entender" e pra ler imagem de comprovante. Dá pra consolidar num provedor só depois, se você quiser simplificar as chaves — anoto como ponto aberto.
118+
119+
---
120+
121+
## 6. Vou ter custo? — **Provavelmente R$ 0 no começo; centavos com uso real**
122+
123+
Vou separar honestamente o que é grátis e o que pode custar.
124+
125+
### Supabase
126+
- **Plano Free:** 500 MB de banco, 1 GB de comprovantes, 50.000 logins/mês, 500 mil execuções de função/mês. **Para o seu uso, isso é muito mais do que o suficiente.****R$ 0**
127+
- **Pegadinha do Free:** se o projeto ficar **7 dias sem nenhum acesso**, ele "dorme" e você precisa religar com um clique. Chato, mas de graça.
128+
- **Plano Pro: US$ 25/mês** (~R$ 135) — só vale a pena quando tiver bastante gente usando, ou se quiser que nunca "durma". **Você não precisa disso agora.**
129+
130+
### IA (paga por uso, o que você consome)
131+
São valores minúsculos por lançamento:
132+
- **Transcrição (Whisper):** ~US$ 0,006 por minuto de áudio. Um áudio de 10 segundos custa ~**US$ 0,001** (um décimo de centavo).
133+
- **Entender o texto (Claude Haiku):** cada lançamento usa pouquíssimo. Custa **frações de centavo**.
134+
- **Ler comprovante (Claude visão):** também centavos por imagem.
135+
136+
**Estimativa realista:** se você lançar **100 áudios + 50 comprovantes por mês**, o custo de IA fica em torno de **US$ 0,30 a US$ 1,00/mês** (~R$ 2 a R$ 6). É preciso colocar um cartão nos painéis da OpenAI e da Anthropic, mas dá pra **definir um limite mensal** (ex: "não passe de US$ 5") pra você nunca tomar susto.
137+
138+
### Domínio
139+
- Nenhum custo (seção 2). Só se você **quiser** um domínio bonito: ~R$ 40/ano. Opcional.
140+
141+
### Resumo de custos
142+
| Item | Custo |
143+
|---|---|
144+
| Supabase (Free) | R$ 0 |
145+
| IA por uso (uso pessoal) | ~R$ 2 a R$ 6/mês |
146+
| Domínio | R$ 0 (opcional ~R$ 40/ano) |
147+
| **Total realista** | **alguns reais por mês, ou zero se usar pouco** |
148+
149+
---
150+
151+
## 7. Segurança — o que vamos blindar desde o dia 1
152+
153+
Como vai ter **mais de uma pessoa** usando, segurança não é opcional. Pontos que serão tratados desde o começo:
154+
155+
1. **RLS ligado desde o primeiro dia.** No banco, toda linha carimba o dono (`user_id`) e a regra é: você só vê o que é seu. (Foi exatamente um RLS faltando que causou o 401 do Premium Beef — aqui já nasce certo.)
156+
2. **Chaves de IA só no servidor.** Ficam guardadas como "segredo" na Edge Function, nunca no app.
157+
3. **Comprovantes privados.** O cofre (Storage) é fechado; acesso só por **link temporário que expira**. Comprovante tem valor, CPF, estabelecimento — é dado sensível (LGPD).
158+
4. **Validação do que a IA devolve.** Antes de gravar, o servidor confere se o JSON faz sentido (a IA às vezes inventa campo). Lixo não entra no banco.
159+
5. **Limite de abuso (rate limiting).** Trava pra ninguém disparar mil chamadas e estourar sua conta de IA.
160+
6. **Limite de upload.** Só foto/PDF, com tamanho máximo, pra não subirem arquivo malicioso.
161+
162+
---
163+
164+
## 8. O que fica para depois (evolução futura)
165+
- **Open Finance** (conectar bancos automaticamente, como o Meu Assessor): exige ser regulado pelo Banco Central **ou** contratar um intermediário (Pluggy, Belvo, Klavi) — tem custo mensal e exige CNPJ/contrato. **Adiado.**
166+
- **Agenda, projetos, reuniões** (outras funções do Meu Assessor): fora do foco do Thayfinance por enquanto.
167+
168+
---
169+
170+
## 9. Pontos em aberto pra você decidir quando voltar
171+
1. **Provedor de IA:** mantém Whisper (OpenAI) + Claude, ou consolida num provedor só pra ter uma chave só?
172+
2. **Login:** e-mail/senha basta, ou quer também "entrar com Google"?
173+
3. **Migração:** quer que o app migre o `localStorage` automático no primeiro login, ou prefere migrar via importação do backup JSON (mais manual, mais controlado)?
174+
175+
---
176+
177+
## 10. Resumo de uma linha
178+
É **totalmente possível**, **não precisa de domínio novo**, **ninguém perde dados** (export/import já existe e vira a ponte), as tecnologias são **Supabase + Whisper + Claude**, e o **custo é praticamente zero no começo** (alguns reais/mês com uso real). Quando você quiser, eu entrego o schema, as funções e o passo a passo no PowerShell.

package-lock.json

Lines changed: 95 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"preview": "vite preview"
1010
},
1111
"dependencies": {
12+
"@supabase/supabase-js": "^2.108.2",
1213
"lucide-react": "^0.469.0",
1314
"react": "^18.3.1",
1415
"react-dom": "^18.3.1",

0 commit comments

Comments
 (0)