đ FinançasAI: do âfuncionaâ ao beta â preparando um app financeiro para usuĂĄrios reais
Estou desenvolvendo o **FinançasAI**, um app de organização financeira pessoal, e nas Ășltimas semanas entrei em uma etapa que considero uma das mais importantes do projeto:
**endurecer o sistema antes de colocar mais usuĂĄrios reais dentro dele.**
No começo, é fåcil pensar:
**usuĂĄrio â ação â banco â sucesso**
Na prĂĄtica, existem vĂĄrios caminhos intermediĂĄrios:
- banco confirma;
- banco retorna erro;
- banco não confirma a alteração;
- Storage falha;
- signed URL falha;
- usuårio repete a ação;
- duas operaçÔes acontecem ao mesmo tempo.
E foi justamente nesses caminhos que comecei a encontrar alguns dos problemas mais interessantes.
## đŒïž Um exemplo: avatar
Um upload de foto parece simples:
**upload â salvar URL â apagar foto antiga**
Mas o que acontece se o upload funcionar e o banco não confirmar a atualização?
Ou se o banco confirmar, mas a signed URL nĂŁo puder ser criada?
Ou se a remoção da foto antiga falhar?
A solução foi separar responsabilidades:
**persistĂȘncia â apresentação â limpeza**
Assim:
- o avatar confirmado no banco nĂŁo Ă© removido por uma falha visual;
- uma limpeza de Storage pode falhar sem quebrar o fluxo principal;
- uma atualização não confirmada não gera falso sucesso;
- falhas de signed URL podem cair para as iniciais;
- operaçÔes potencialmente destrutivas usam estratégias **fail-safe**.
## đ§Ș E os testes?
Outra mudança importante foi parar de testar apenas:
> âdeu certo?â
e começar a testar:
> âo que acontece quando dĂĄ errado?â
A suĂte jĂĄ estĂĄ prĂłxima de **500 testes**, alĂ©m de:
- TypeScript;
- lint;
- build;
- `git diff --check`;
- testes comportamentais dos fluxos crĂticos.
O objetivo nĂŁo Ă© ter um nĂșmero bonito de testes.
Ă conseguir responder:
> **âSe essa operação falhar no meio, o estado do usuĂĄrio continua seguro?â**
## đ Outra coisa que aprendi
Em algumas mutations, usar algo genérico como `Partial<Goal>` pode parecer conveniente.
Mas quando uma operação deveria aceitar somente:
`id`, `current_amount` e `completed`
Ă© melhor deixar o contrato explĂcito.
E nĂŁo confiar somente no TypeScript.
A própria mutation também deve construir explicitamente o payload que serå enviado ao banco.
Isso protege contra campos extras tanto **em compile time quanto em runtime**.
---
Agora estou chegando em outra etapa do projeto:
## đ„ Colocar o FinançasAI nas mĂŁos de pessoas que nĂŁo sĂŁo eu
Esse talvez seja o teste mais difĂcil atĂ© agora.
Eu jå conheço:
- onde clicar;
- o que cada tela deveria fazer;
- quais limitaçÔes existem;
- quais comportamentos sĂŁo intencionais.
Um usuĂĄrio novo nĂŁo conhece nada disso.
EntĂŁo o prĂłximo objetivo nĂŁo Ă© simplesmente conseguir mais cadastros.
Ă descobrir:
> **âO que acontece quando alguĂ©m usa o produto sem conhecer a cabeça de quem o construiu?â**
Estou procurando algumas pessoas para participar desse primeiro beta e dar feedback sincero â principalmente sobre:
- coisas confusas;
- bugs;
- funcionalidades que nĂŁo fazem sentido;
- dificuldades durante o primeiro uso;
- pontos que poderiam ser mais simples.
NĂŁo estou procurando apenas elogios.
Na verdade, prefiro descobrir agora aquilo que pode incomodar um usuĂĄrio real.
## đ Quer testar o FinançasAI?
O beta estĂĄ disponĂvel:
đ **https://chat-financas-ease.vercel.app**
Se vocĂȘ testar, quero muito saber:
- o que ficou confuso;
- o que vocĂȘ melhoraria;
- se encontrou algum bug;
- se o aplicativo realmente ajuda no controle financeiro;
- e se vocĂȘ voltaria a utilizĂĄ-lo.
Feedback sincero Ă© muito bem-vindo. đ
Se vocĂȘ tambĂ©m estĂĄ construindo um projeto e jĂĄ passou pela fase de transformar **âfuncionaâ em âestĂĄ pronto para usuĂĄrios reaisâ**, compartilha sua experiĂȘncia.
#DIO #Desenvolvimento #React #TypeScript #Supabase #Testes #SoftwareEngineering #FinançasAI #OpenToWork



