Financas Inovai Labs — MVP financeiro com IA e mentoria
Situation
Financas Inovai Labs nasceu de uma dor real: controlar financas pessoais sem depender de planilhas manuais, mensagens soltas ou prints de extratos. O problema era ainda mais forte no contexto de mentoria financeira. A mentora precisava acompanhar evolucao, padroes de gasto e progresso das alunas sem invadir privacidade, sem receber dados desestruturados por WhatsApp e sem montar uma rotina operacional impossivel de escalar.
O produto ja tinha passado por iteracoes anteriores, mas a base de dominio ainda nao sustentava o que realmente importava: fluxo de caixa confiavel. Lancamentos unicos, parcelados, recorrentes e transferencias precisavam ser representados de forma explicita para que dashboards, metas, importacao inteligente e acompanhamento da mentora fossem confiaveis.
A decisao foi reiniciar a versao v3 sem descartar o que ja funcionava. Backend, autenticacao, parsers, deploy e parte da infraestrutura foram preservados. A ordem de construcao mudou: primeiro dominio financeiro correto, depois visualizacao, importacao, IA, mentoria e metas.
Task
Atuei como founder, arquiteto full-stack e tech lead do restart v3. Minha responsabilidade foi transformar uma ideia validada em uso pessoal e de mentoria em um produto web responsivo, com backend modular, modelo financeiro consistente, importacao de extratos, classificacao automatica por IA e experiencia adequada para uso real por mentor e aluna.
O sucesso esperado nao era apenas "ter telas". O objetivo era chegar a um MVP operavel em producao, com isolamento de dados por workspace, testes automatizados, revisoes de qualidade e uma base pronta para piloto com usuarios reais. Tambem coordenei o processo via AIOX: PRD, arquitetura, design system, stories, implementacao, QA gates e deploy.
Action
Architecture
A arquitetura manteve um monorepo com backend e frontend. No backend, usei NestJS modular com Prisma e Supabase PostgreSQL, separando responsabilidades por dominio: autenticacao, workspaces, contas, transacoes, categorias, dashboard, importacao, IA, regras de classificacao, mentoria, orcamentos, metas e notificacoes.
No frontend, usei React 19, Vite, TailwindCSS, Shadcn/ui, React Query e Recharts para construir uma interface mobile-first com dashboard pessoal, fluxo de caixa, categorias, importacao de extratos, revisao pos-importacao, regras de classificacao, onboarding da aluna e telas de mentoria.
flowchart LR
User["Aluno / Mentor"] --> Web["React 19 + Vite"]
Web --> API["NestJS API"]
API --> Auth["Supabase Auth"]
API --> DB["Supabase PostgreSQL via Prisma"]
API --> Import["OFX / CSV / PDF import pipeline"]
API --> Rules["User classification rules"]
Rules --> AI["OpenRouter fallback"]
API --> Redis["Redis async support"]
Deploy["GitHub Actions"] --> Runtime["Docker Compose production runtime"]
Runtime --> APITechnical decisions
A primeira decisao foi preservar a infraestrutura existente e reconstruir a prioridade do produto, em vez de reescrever tudo. Isso reduziu risco e manteve deploy, auth, parsers e CRUDs como base reaproveitavel. O trade-off foi carregar algumas decisoes antigas por mais tempo, mas a alternativa teria atrasado a validacao do dominio financeiro.
A segunda decisao foi corrigir o dominio financeiro antes das telas. Entidades como TransactionNature, TransactionType, InstallmentGroup, RecurrenceRule e TransferLink foram tratadas como fundacao do MVP. Parcelas precisam aparecer no fluxo de caixa futuro e serem conciliaveis com extrato; recorrencias indefinidas nao deveriam poluir o banco com anos de linhas.
type TransactionType = 'single' | 'installment' | 'recurring' | 'transfer'
interface PlannedTransaction {
workspaceId: string
accountId: string
type: TransactionType
amountCents: number
dueDate: string
installmentGroupId?: string
recurrenceRuleId?: string
transferLinkId?: string
}A terceira decisao foi usar regras manuais por usuario antes de IA. A IA via OpenRouter entra como fallback ou sugestao, evitando custo e latencia desnecessarios quando uma regra local resolve a classificacao. Isso tambem melhora a explicabilidade do sistema: quando a usuaria corrige uma categoria, a correcao vira comportamento reutilizavel.
A quarta decisao foi manter isolamento por workspaceId no backend NestJS, com guards e queries filtradas. Como Prisma usa credenciais de service role em varios fluxos, eu nao quis depender exclusivamente de RLS no Supabase. O controle no dominio da API deixou a regra de privacidade mais auditavel para mentoria, especialmente porque a mentora acessa dados agregados, nao detalhes individuais de transacoes.
Trade-offs
O MVP priorizou importacao manual de OFX/CSV/PDF em vez de Open Finance. Isso simplificou compliance, reduziu custo inicial e permitiu validar o fluxo de produto antes de integrar provedores externos.
Algumas metricas de negocio ainda dependem do piloto real com alunas. Por isso, as metricas publicaveis nesta versao focam em entrega, qualidade e prontidao tecnica. O bot Telegram e OCR de cupom tambem ficaram como pos-MVP; a base modular existe, mas o case se concentra na aplicacao web e no fluxo financeiro principal.
Result
Metrics
O principal resultado foi transformar um app financeiro que ainda dependia de uma base incompleta em um produto com dominio financeiro consistente. A partir do v3, fluxo de caixa, importacao e mentoria passaram a depender de modelos explicitos para parcelas, recorrencias, transferencias, regras de classificacao e privacidade.
O processo AIOX criou rastreabilidade forte: cada mudanca relevante passou por PRD, arquitetura, story, implementacao, checklist e QA gate. Isso torna o case relevante para portfolio porque mostra nao apenas a interface final, mas tambem capacidade de liderar produto, arquitetura, engenharia e qualidade em um sistema real.
Learning
A decisao mais importante foi nao acelerar UI e automacao enquanto o dominio central ainda estava errado. O restart v3 priorizou modelagem correta de transacoes, parcelas, recorrencias, transferencias e privacidade antes de expandir a experiencia visual. Para entrevistas, o melhor angulo e apresentar o projeto como a transformacao de um prototipo funcional em MVP operavel.