Files
carvalho-finances/PROJETO.md
T
2026-05-26 22:02:33 -03:00

5.6 KiB
Raw Blame History

Financeiro Carvalho

O que é

Aplicação web de controle financeiro pessoal, construída como produto de uso diário por Manoel — engenheiro de software, diabético tipo 1, velejador amador e entusiasta de jogos de tabuleiro. O objetivo central é simples: saber exatamente quanto dinheiro entra, quanto sai e confirmar que pelo menos 40% da renda está sendo poupada todo mês.

Proposta de valor

Manoel não queria um app genérico de finanças cheio de funcionalidades que nunca vai usar. Queria algo seu, que reflita sua vida real — com categorias para insulina, para o veleiro e para jogos de tabuleiro — e que tornasse o hábito de registrar gastos prazeroso, não tedioso.

A solução mistura controle financeiro sério com gamificação RPG: cada ação financeira (importar extrato, categorizar transações, atingir a meta de 40%) rende XP e faz o personagem pixel art evoluir. Quests diárias, semanais e mensais traduzem bons hábitos financeiros em objetivos concretos de jogo.

Funcionalidades

Controle financeiro

  • Import de extratos — upload de OFX (formato bancário brasileiro) ou CSV, com prévia antes de confirmar e deduplicação automática na reimportação
  • Transações manuais — registro de gastos e receitas avulsos com data, valor, descrição e categoria
  • Recorrências fixas — cadastro de custos mensais fixos (plano de saúde, streaming, etc.) com alerta quando não aparecem no mês
  • Contas bancárias — CRUD de contas (corrente, poupança, investimento, cartão) com saldo calculado automaticamente pelas transações vinculadas
  • Categorias personalizadas — pré-populadas com perfil do Manoel; editáveis e extensíveis

Dashboard

  • Widget de % poupado no mês — verde se ≥ 40%, vermelho se abaixo
  • Gastos por categoria — barras horizontais com cores por categoria
  • Evolução mensal — gráfico de barras dos últimos 6 meses (receitas vs. gastos)
  • Transações recentes — últimas 10 movimentações
  • Patrimônio total — soma dos saldos de todas as contas cadastradas
  • Widget do personagem — prévia do personagem com barra de XP, link para /personagem
  • Navegação entre meses
  • Alerta de recorrências sem cobertura

Gamificação RPG

  • Personagem pixel art — humanoid SVG com animação idle/celebrate, cores controladas pelos cosméticos equipados
  • Sistema XP — cada ação financeira rende pontos (categorizar transação = +10 XP, importar extrato = +50 XP, atingir meta 40% = +200 XP)
  • Levels com limiar crescente: level × level × 100 XP (nível 1 → 100 XP, nível 2 → 400, nível 3 → 900...)
  • Quests diárias, semanais e mensais com objetivos financeiros reais e recompensa XP
  • Achievements — 11 conquistas por milestones (primeira transação, primeiro import, 3 meses acima de 40%, "Veleirista Econômico" com gastos de veleiro abaixo de R$500...)
  • Cosméticos desbloqueados automaticamente por nível — cabelo, camisa, calças, sapatos
  • Tela /personagem com painel completo: personagem, barra XP, quests ativas, todas as conquistas, cosméticos disponíveis

Stack técnica

Camada Tecnologia
Backend Go 1.23, chi router, pgx/v5
Frontend Vue 3, Vite, TypeScript, Pinia, Vue Router
Banco PostgreSQL 16
Deploy Docker multi-stage, binário único ~25 MB com assets Vue embarcados
Infraestrutura Dokploy (self-hosted)

Estrutura do projeto

financeiro-carvalho/
├── apps/
│   ├── api/            # Backend Go
│   │   ├── cmd/server/ # Entrypoint
│   │   ├── internal/
│   │   │   ├── handler/     # HTTP handlers
│   │   │   ├── service/     # Regras de negócio + testes
│   │   │   ├── repository/  # Queries SQL
│   │   │   ├── model/       # Structs compartilhadas
│   │   │   └── migration/   # 8 migrations SQL idempotentes
│   │   └── static/     # Vue dist embarcado via //go:embed
│   └── web/            # Frontend Vue 3
│       └── src/
│           ├── views/       # Páginas (Home, Transações, Contas, Personagem...)
│           ├── stores/      # Pinia (dashboard, game, accounts, transactions...)
│           └── components/  # CharacterWidget, XPBar
├── Dockerfile          # Multi-stage: Node (Vue build) → Go (binary) → Alpine
└── docker-compose.yml  # app + postgres

Telas

Rota Descrição
/ Dashboard mensal com todos os widgets
/transacoes Lista e CRUD de transações manuais
/importar Upload e revisão de extratos OFX/CSV
/categorias Gerenciamento de categorias
/recorrencias Custos fixos mensais
/contas Contas bancárias e patrimônio
/personagem Painel RPG completo
/configuracoes Configurações gerais

Rodar localmente

docker compose up --build
# Acesse http://localhost:8080

Variáveis de ambiente (opcionais, têm defaults para desenvolvimento):

  • POSTGRES_PASSWORD — senha do banco (default: financeiro)
  • APP_PORT — porta exposta (default: 8080)

Identidade visual e tom

O app é pessoal, não corporativo. O personagem pixel art e a gamificação traduzem a ideia de que finanças podem ser um hábito divertido, não uma obrigação ansiosa. As cores do personagem evoluem com o nível — recompensa visual por consistência financeira real.

Paleta principal: fundo claro (#f8fafc), texto escuro (#1e293b), destaque roxo gamificação (#7c3aed), verde para metas atingidas (#059669), vermelho para gastos/metas não atingidas (#dc2626).