ImgBotApp 05daac5f57 [ImgBot] Optimize images
*Total -- 806.29kb -> 592.37kb (26.53%)

/public/logos/orama.png -- 32.36kb -> 7.66kb (76.33%)
/public/logos/sofisadireto.png -- 4.95kb -> 1.61kb (67.5%)
/public/logos/vtbbank.png -- 5.12kb -> 1.85kb (63.79%)
/public/images/web-app-manifest-192x192.png -- 5.40kb -> 2.37kb (56.14%)
/public/logos/picpay.png -- 2.38kb -> 1.09kb (54.04%)
/public/logos/toroinvestimentos.png -- 3.45kb -> 1.69kb (50.99%)
/public/logos/z1.png -- 2.03kb -> 1.00kb (50.75%)
/public/images/web-app-manifest-512x512.png -- 18.92kb -> 9.34kb (50.65%)
/public/logos/monetus.png -- 18.34kb -> 9.25kb (49.57%)
/public/logos/cimbbank.png -- 6.67kb -> 3.57kb (46.51%)
/public/logos/agibank.png -- 3.07kb -> 1.65kb (46.19%)
/public/logos/nuconta.png -- 1.79kb -> 0.96kb (46.18%)
/public/logos/ifood-beneficios.png -- 4.13kb -> 2.30kb (44.33%)
/public/logos/woop.png -- 29.46kb -> 16.90kb (42.65%)
/public/logos/banese.png -- 3.29kb -> 1.98kb (40.01%)
/public/avatars/default_icon.png -- 5.41kb -> 3.31kb (38.87%)
/public/logos/tesouronacional.png -- 4.65kb -> 2.88kb (38.14%)
/public/logos/bilhete-unico.png -- 3.62kb -> 2.24kb (38.01%)
/src/app/icon1.png -- 5.41kb -> 3.37kb (37.69%)
/src/app/apple-icon.png -- 5.41kb -> 3.37kb (37.69%)
/public/logos/pluxxe.png -- 1.20kb -> 0.75kb (37.33%)
/public/logos/sodexo.png -- 5.66kb -> 3.75kb (33.8%)
/public/logos/tesourodireto.png -- 4.17kb -> 2.78kb (33.34%)
/public/logos/viacredi.png -- 7.36kb -> 5.00kb (32.11%)
/public/logos/brde.png -- 5.48kb -> 3.93kb (28.16%)
/public/logos/spuerkeess.png -- 2.63kb -> 1.92kb (26.89%)
/public/logos/mais.png -- 8.43kb -> 6.23kb (26.11%)
/public/logos/efi.bank.png -- 2.73kb -> 2.03kb (25.72%)
/public/avatars/4825062.png -- 25.78kb -> 19.30kb (25.13%)
/public/logos/banrisul.png -- 4.15kb -> 3.14kb (24.31%)
/public/avatars/4825021.png -- 21.18kb -> 16.20kb (23.51%)
/public/avatars/4825096.png -- 27.46kb -> 21.06kb (23.32%)
/public/avatars/4825057.png -- 22.96kb -> 17.63kb (23.21%)
/public/avatars/4825076.png -- 26.29kb -> 20.21kb (23.14%)
/public/avatars/4825044.png -- 21.44kb -> 16.60kb (22.59%)
/public/avatars/4825066.png -- 21.82kb -> 16.90kb (22.53%)
/public/avatars/4825038.png -- 25.82kb -> 20.00kb (22.52%)
/public/avatars/4825123.png -- 21.71kb -> 16.83kb (22.48%)
/public/avatars/4825031.png -- 25.69kb -> 19.93kb (22.4%)
/public/avatars/4825072.png -- 28.61kb -> 22.30kb (22.06%)
/public/avatars/4825082.png -- 23.32kb -> 18.21kb (21.91%)
/public/avatars/4825015.png -- 23.36kb -> 18.26kb (21.84%)
/public/avatars/4825108.png -- 20.25kb -> 15.89kb (21.56%)
/public/avatars/4825051.png -- 26.30kb -> 20.79kb (20.95%)
/public/avatars/4825027.png -- 22.74kb -> 17.98kb (20.93%)
/public/avatars/4825087.png -- 21.15kb -> 16.74kb (20.85%)
/public/avatars/4825112.png -- 25.28kb -> 20.04kb (20.72%)
/public/logos/btgpactual.png -- 3.51kb -> 2.85kb (18.62%)
/public/images/logo_text.png -- 26.08kb -> 21.34kb (18.18%)
/public/logos/crefisa.png -- 4.44kb -> 3.64kb (17.98%)
/public/avatars/4825035.png -- 25.01kb -> 20.69kb (17.25%)
/public/images/logo_small.png -- 3.79kb -> 3.16kb (16.79%)
/public/logos/wiipo.png -- 9.57kb -> 7.98kb (16.6%)
/public/avatars/4825047.png -- 20.26kb -> 17.29kb (14.69%)
/public/logos/nubank-ultravioleta.png -- 10.00kb -> 8.93kb (10.68%)
/public/logos/riachuelo.png -- 1.09kb -> 0.99kb (9.55%)
/public/logos/clear-corretora.png -- 4.13kb -> 3.76kb (8.97%)
/public/logos/bradesco-empresas.png -- 3.39kb -> 3.15kb (7.09%)
/public/icons/party.svg -- 4.15kb -> 3.98kb (4.02%)
/public/logos/pix.png -- 1.57kb -> 1.51kb (3.79%)
/public/providers/gemini.svg -- 0.87kb -> 0.86kb (1.46%)
/public/providers/openrouter_light.svg -- 0.56kb -> 0.55kb (1.05%)
/public/logos/creditas.png -- 11.04kb -> 10.94kb (0.95%)
/public/flags/visa.svg -- 1.37kb -> 1.36kb (0.93%)
/public/flags/mastercard.svg -- 5.13kb -> 5.12kb (0.3%)
/public/providers/chatgpt.svg -- 2.61kb -> 2.61kb (0.15%)
/public/providers/chatgpt_dark_mode.svg -- 2.61kb -> 2.61kb (0.15%)
/public/flags/elo.svg -- 1.66kb -> 1.66kb (0.12%)
/public/providers/claude.svg -- 2.51kb -> 2.50kb (0.12%)
/public/flags/amex.svg -- 4.81kb -> 4.81kb (0.04%)
/public/flags/hipercard.svg -- 17.29kb -> 17.29kb (0.01%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
2026-03-21 15:28:30 +00:00
2026-03-21 15:28:30 +00:00
2026-03-21 15:28:30 +00:00
2026-03-21 14:12:46 +00:00

OpenMonetis Logo

Projeto pessoal de gestão financeira. Self-hosted, manual e open source.

⚠️ Não há versão online hospedada. Você precisa clonar o repositório e rodar localmente ou no seu próprio servidor.

Version Next.js TypeScript PostgreSQL Docker Android Companion License Sponsor


Dashboard Preview


📖 Índice


🎯 Sobre o Projeto

OpenMonetis é um projeto pessoal de gestão financeira que criei para organizar minhas próprias finanças. Cansei de usar planilhas desorganizadas e aplicativos que não fazem exatamente o que preciso, então decidi construir algo do jeito que funciona pra mim.

A ideia é simples: ter um lugar onde consigo ver todas as minhas contas, cartões, gastos e receitas de forma clara. Se isso for útil pra você também, fique à vontade para usar e contribuir.

💡 Licença Não-Comercial: Este projeto é gratuito para uso pessoal, mas não pode ser usado comercialmente. Veja mais detalhes na seção Licença.

⚠️ Avisos importantes

1. Não há versão hospedada online — Este projeto é self-hosted. Você precisa rodar no seu próprio computador ou servidor.

2. Não há Open Finance — Não há conexão automática com bancos. Você pode registrar transações manualmente ou importar extratos nos formatos OFX e XLS/XLSX.

3. Requer disciplina — O OpenMonetis funciona melhor para quem tem disciplina de registrar os gastos regularmente, quer controle total sobre seus dados e gosta de entender exatamente onde o dinheiro está indo.

Funcionalidades

💰 Contas e transações — Contas bancárias, cartões, dinheiro. Receitas, despesas e transferências. Categorização, extratos detalhados e importação de extratos OFX e XLS/XLSX com detecção automática de categoria.

📊 Dashboard e relatórios — Widgets interativos de métricas, gráficos de evolução, comparativos por categoria, tendências, uso de cartões, top estabelecimentos. Exportação em PDF e Excel.

💳 Faturas de cartão — Acompanhe faturas por período, controle limites e vencimentos.

🎯 Orçamentos — Defina limites por categoria e acompanhe o progresso.

💸 Parcelamentos avançados — Séries de parcelas, antecipação com cálculo de desconto, análise consolidada.

🤖 Insights com IA — Análises geradas por Claude, GPT, Gemini ou OpenRouter. Insights personalizados e histórico salvo.

👥 Gestão colaborativa — Pagadores com permissões (admin/viewer), notificações automáticas por e-mail, códigos de compartilhamento.

📝 Anotações e tarefas — Notas de texto, listas com checkboxes, sistema de arquivamento.

📅 Calendário financeiro — Visualize todos os lançamentos em um calendário mensal.

📲 OpenMonetis Companion — App Android que captura notificações bancárias (Nubank, Itaú, Bradesco, Inter, C6 e outros) e envia como pré-lançamentos para revisão. Repositório.

⚙️ Personalização — Tema dark/light e modo privacidade.

Stack técnica

  • Next.js (App Router, Turbopack) + React + TypeScript
  • PostgreSQL + Drizzle ORM
  • Better Auth (email/senha, OAuth, Passkeys/WebAuthn)
  • shadcn/ui (Radix UI) + Tailwind CSS
  • Docker (multi-stage build)
  • Biome (linting + formatting)
  • Vercel AI SDK (Claude, GPT, Gemini, OpenRouter)

Instalação via Script

A forma mais rápida de instalar. O script verifica dependências, configura o .env interativamente e sobe o banco automaticamente.

Pré-requisito: Node.js 22+

# Mac / Linux / WSL
curl -fsSL https://raw.githubusercontent.com/felipegcoutinho/openmonetis/main/setup.mjs -o setup.mjs && node setup.mjs

# Windows (PowerShell)
curl -o setup.mjs https://raw.githubusercontent.com/felipegcoutinho/openmonetis/main/setup.mjs ; node setup.mjs

O script irá:

  • Verificar Node, pnpm, Git e Docker
  • Perguntar se quer banco local (Docker) ou remoto (Supabase, Neon, etc.)
  • Gerar o BETTER_AUTH_SECRET automaticamente
  • Configurar opcionais: Google OAuth, e-mail, IA, domínio público
  • Clonar o repositório, instalar dependências e aplicar o schema

🚀 Início Rápido (manual)

Pré-requisitos

  • Node.js 22+ e pnpm
  • Docker e Docker Compose

Passo a Passo

  1. Clone e instale

    git clone https://github.com/felipegcoutinho/openmonetis.git
    cd openmonetis
    pnpm install
    
  2. Configure o .env

    cp .env.example .env
    

    Edite o .env com suas credenciais. O principal é o DATABASE_URL e o BETTER_AUTH_SECRET:

    # Banco local (Docker): use host "localhost"
    DATABASE_URL=postgresql://openmonetis:openmonetis_dev_password@localhost:5432/openmonetis_db
    
    # Banco remoto (Supabase, Neon, etc): use a URL completa do provider
    # DATABASE_URL=postgresql://user:password@host:5432/database?sslmode=require
    
    BETTER_AUTH_SECRET=seu-secret-aqui  # gere com: openssl rand -base64 32
    BETTER_AUTH_URL=http://localhost:3000
    
  3. Suba o banco de dados (pule se estiver usando banco remoto)

    docker compose up db -d
    pnpm db:enableExtensions
    
  4. Execute as migrations e inicie

    pnpm db:push
    pnpm dev
    
  5. Acesse http://localhost:3000

Docker completo (app + banco em containers): use pnpm docker:up ao invés dos passos 3-4.


📜 Scripts Disponíveis

Desenvolvimento

pnpm dev              # Dev server (Turbopack)
pnpm build            # Build de produção
pnpm start            # Servidor de produção
pnpm lint             # Biome check
pnpm lint:fix         # Biome auto-fix

Banco de Dados

pnpm db:generate      # Gerar migrations
pnpm db:migrate       # Executar migrations
pnpm db:push          # Push schema direto (dev)
pnpm db:studio        # Drizzle Studio (UI visual)

Utilitários

pnpm backup           # Backup do banco (requer scripts/backup.sh configurado)

Docker

pnpm docker:up        # Subir app + banco
pnpm docker:up:d      # Subir em background
pnpm docker:up:db     # Subir apenas o banco
pnpm docker:down      # Parar containers
pnpm docker:down:volumes  # Parar e remover volumes (⚠️ apaga dados!)
pnpm docker:logs      # Logs em tempo real
pnpm docker:restart   # Reiniciar
pnpm docker:rebuild   # Rebuild completo

🐳 Docker

O Dockerfile usa multi-stage build (deps → builder → runner) com imagem final ~200MB rodando como usuário não-root.

Health checks configurados para ambos os serviços (PostgreSQL via pg_isready, app via GET /api/health).

Comandos úteis

docker compose exec app sh                                      # Shell da aplicação
docker compose exec db psql -U openmonetis -d openmonetis_db    # Shell do banco
docker compose ps                                                # Status
docker compose exec db pg_dump -U openmonetis openmonetis_db > backup.sql  # Backup
docker compose exec -T db psql -U openmonetis -d openmonetis_db < backup.sql  # Restore

Customizando Portas

APP_PORT=3001   # Padrão: 3000
DB_PORT=5433    # Padrão: 5432

🔐 Variáveis de Ambiente

Copie .env.example para .env e configure:

Obrigatórias

DATABASE_URL=postgresql://openmonetis:openmonetis_dev_password@localhost:5432/openmonetis_db
BETTER_AUTH_SECRET=seu-secret-aqui    # openssl rand -base64 32
BETTER_AUTH_URL=http://localhost:3000

Opcionais

# PostgreSQL (Docker local)
POSTGRES_USER=openmonetis
POSTGRES_PASSWORD=openmonetis_dev_password
POSTGRES_DB=openmonetis_db

# Multi-domínio (landing-only no domínio público)
# PUBLIC_DOMAIN=openmonetis.com

# OAuth
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=

# Email (Resend)
RESEND_API_KEY=
RESEND_FROM_EMAIL=

# AI Providers
ANTHROPIC_API_KEY=
OPENAI_API_KEY=
GOOGLE_GENERATIVE_AI_API_KEY=
OPENROUTER_API_KEY=

🏗️ Arquitetura

O projeto segue arquitetura feature-first dentro de src/:

openmonetis/
├── src/
│   ├── app/                       # Next.js App Router (rotas finas)
│   │   ├── api/                   # API Routes (auth, health, inbox)
│   │   ├── (auth)/                # Login e cadastro
│   │   ├── (dashboard)/           # Rotas protegidas (transactions, cards, accounts, etc.)
│   │   └── (landing-page)/        # Página inicial pública
│   │
│   ├── features/                  # Código de domínio por feature
│   │   ├── dashboard/             # Widgets, queries e métricas
│   │   ├── transactions/          # Lançamentos, ações em lote, exportação
│   │   ├── cards/                 # Cartões de crédito
│   │   ├── invoices/              # Faturas
│   │   ├── accounts/              # Contas bancárias
│   │   ├── categories/            # Categorias e histórico
│   │   ├── budgets/               # Orçamentos
│   │   ├── payers/                # Pagadores e compartilhamento
│   │   ├── inbox/                 # Pré-lançamentos do Companion
│   │   ├── insights/              # Análises com IA
│   │   ├── reports/               # Relatórios e exportações
│   │   ├── notes/                 # Anotações
│   │   ├── calendar/              # Calendário financeiro
│   │   ├── settings/              # Ajustes do usuário
│   │   ├── landing/               # Landing page
│   │   └── auth/                  # Formulários de autenticação
│   │
│   ├── shared/                    # Código reutilizado entre features
│   │   ├── components/            # UI compartilhada (shadcn/ui, navigation, skeletons...)
│   │   ├── hooks/                 # React hooks globais
│   │   ├── lib/                   # Helpers de domínio (auth, db, payers, schemas, email...)
│   │   └── utils/                 # Utilitários (currency, date, period, math, string...)
│   │
│   └── db/
│       └── schema.ts              # Drizzle schema (fonte única de verdade)
│
├── public/                        # Assets estáticos (imagens, logos, fontes)
├── drizzle/                       # Migrations geradas
├── scripts/                       # Scripts utilitários (migrations, dev)
├── Dockerfile                     # Multi-stage build (~200MB, non-root)
├── docker-compose.yml             # Orquestração app + PostgreSQL
└── proxy.ts                       # Middleware (auth + multi-domínio)

🤝 Contribuindo

  1. Fork o projeto
  2. Clone seu fork: git clone https://github.com/seu-usuario/openmonetis.git
  3. Crie uma branch: git checkout -b feature/minha-feature
  4. Commit: git commit -m 'feat: adiciona minha feature'
  5. Push: git push origin feature/minha-feature
  6. Abra um Pull Request

Antes de começar, leia o CLAUDE.md — ele documenta a arquitetura, convenções de nomenclatura, regras de queries e o checklist para novas features. Use TypeScript, commits semânticos e mantenha o CHANGELOG.md atualizado.


💖 Apoie o Projeto

Se o OpenMonetis está sendo útil, considere se tornar um sponsor!

Sponsor no GitHub

Outras formas de contribuir: estrela no repo, reportar bugs, melhorar docs, submeter PRs.


📄 Licença

Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).

License: CC BY-NC-SA 4.0

  • Uso pessoal, modificação, distribuição e fork
  • Uso comercial, remoção de créditos, mudança de licença
  • 📋 Crédito ao autor, indicar modificações, mesma licença

Para o texto legal completo, consulte o arquivo LICENSE ou visite creativecommons.org.


🙏 Agradecimentos

Next.js · Better Auth · Drizzle ORM · shadcn/ui · Biome · Vercel


Desenvolvido por: Felipe Coutinho — @felipegcoutinho

Se este projeto foi útil pra você:

Dê uma estrela · Apoie como sponsor · Compartilhe

Description
No description provided
Readme 47 MiB
Languages
TypeScript 62.5%
JavaScript 36.7%
Shell 0.4%
CSS 0.3%
Dockerfile 0.1%