Give your agent a wallet you control.
에이전트가 일회용 카드나 기계 결제 프로토콜로 온라인 결제하고, 모든 요청을 직접 승인
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Dashboard de finanças pessoais, construído a partir da ideia da planilha PLANILHA_FINANCEIRA_2026.xlsx
(mesmos conceitos, mas com cara de app):
Visual OpusCash, claro e escuro: menu lateral com a marca, barra de busca, seletor de mês, sino de contas e perfil no topo; na Início, saudação, cartões de indicadores, fluxo financeiro dos últimos 6 meses, últimos lançamentos, rosca por categoria, metas e um convite para planejar. As cores vêm do símbolo (índigo → azul → verde-água). O tema segue o aparelho ou é escolhido no botão ☀/☾ do topo e em Configurações → Painel → Aparência
Animações: blocos que saem do desfoque um após o outro, números que contam até o valor, gráficos que crescem da base, barras de progresso que enchem, pílula do menu que desliza até a página aberta e cartões que sobem sob o ponteiro. A troca de tema espalha o tema novo como uma mancha de tinta a partir do botão. Quem quiser menos movimento escolhe Animações: Reduzidas em Configurações → Painel → Aparência
Qualquer idioma: o botão 文A (no topo do painel; nas outras telas, preso no canto de cima) abre a lista de mais de
100 idiomas, cada um escrito nele mesmo, com busca. O app é escrito em português. Inglês e espanhol têm tradução nossa
(lib/textos.ts e src/i18n/traducoes.json, no app inteiro menos as páginas legais); os outros idiomas são a
tradução automática do Google (lib/idioma.ts). A escolha fica salva no navegador. Valores em dinheiro, a marca e o nome da pessoa não são traduzidos.
A política de segurança (vercel.json) libera o tradutor do Google; se ele mudar o script que roda na barra dele, o hash
sha256-… do script-src precisa ser atualizado (o console do navegador mostra o novo)
Painel que se adapta a cada pessoa: no primeiro acesso, 4 perguntas rápidas (moeda, outras moedas, o que faz parte da vida financeira, jeito de ver) montam o painel só com o que faz sentido. Dívidas, bancos, investimentos e outras moedas são módulos que ligam e desligam; o jeito de ver vai de simples (só o essencial) a detalhado (todas as categorias, lançamentos do mês e mais indicadores). Depois disso o app continua se adaptando: percebe pelos lançamentos que a pessoa começou a investir, paga parcelas, mexe com dólar ou usa vários bancos e sugere ligar (sem insistir se ela recusar). No formulário, uma dica aparece enquanto ela digita ("Aporte no CDB" → acompanhar investimentos). Tudo pode ser mudado em Personalizar painel, ou com um toque em "+ Investimentos" no fim da visão geral
Qualquer moeda: a moeda principal define todos os totais (real, dólar, euro, peso…). Lançamentos podem ser feitos em outra moeda com a cotação do dia (editável); o valor original fica guardado e o total entra convertido
Categorias suas: toda conta começa com categorias que servem para qualquer pessoa (moradia, saúde, lazer, assinaturas, pets, salário, renda extra…), e cada uma pode ser criada, renomeada, ganhar emoji e cor ou ser apagada. Entradas também têm categoria. Ao lançar, o app sugere a categoria pela descrição ("Netflix" → Assinaturas) e aprende com o que você escolhe; dá para criar uma categoria nova sem sair do lançamento
Metas para qualquer objetivo: viagem, carro, casa, estudos, reserva de emergência (o app sugere 6 meses dos seus gastos)… Cada meta tem valor, moeda e prazo opcional; você registra o que guarda ou retira e o app mostra quanto falta, quanto guardar por mês para chegar no prazo e, no seu ritmo, quando você chega lá
Contas fixas e a pagar: aluguel, luz, internet, academia, streaming… e também entradas fixas como o salário. Cadastre uma vez (dia, valor de costume, categoria) e todo mês o app mostra o que está atrasado, o que vence esta semana, o que vem depois e o que já foi pago. Nada é lançado sozinho: você toca em Paguei (ou Recebi) e o app cria o lançamento com 1 toque, com a opção de trocar o valor (a conta de luz muda) ou a data; dá para desfazer. O app também sugere transformar em conta fixa o que você paga todo mês. Módulo "Contas do mês", ligado nas perguntas iniciais ou em Personalizar painel
Cartão de crédito: cadastre cada cartão com o dia em que a fatura fecha, o dia em que vence e o limite. Ao lançar uma saída, escolha "Como pagou?" e em quantas vezes: cada parcela cai na fatura certa (compra depois do fechamento vai para o mês seguinte) e conta como saída no mês em que você de fato paga. A página Cartões mostra a fatura de cada mês com situação (aberta, fechada, paga, venceu), as compras dela, as próximas 6 faturas, as compras parceladas em andamento ("3/10") e quanto do limite ainda está livre. "Paguei a fatura" só marca como paga, sem contar o gasto duas vezes
Início: responde, nesta ordem, "como estou este mês?" (quanto sobrou, entrou e saiu), "o que preciso fazer?"
(dívidas e o que vem por aí) e "para onde está indo meu dinheiro?" (categorias e últimos lançamentos); depois o mês a
mês do ano, o dinheiro guardado e as metas. O jeito de ver (simples, equilibrado, detalhado) só acrescenta linhas aos
mesmos blocos. A lógica de cada modo está em docs/arquitetura-do-painel.md, junto
com o guia de linguagem do app
Moeda em todo o sistema e dinheiro sem vírgula na mão: contas do mês e dívidas também podem ser em outra moeda (internet em
dólar, alguém te deve US$ 5). O valor aparece na moeda da conta ou da dívida, com "≈ R$ …" ao lado, e os totais do painel
somam tudo na moeda principal pela cotação do dia. "Paguei" numa conta em dólar guarda o valor original e a cotação (dá para
informar a que você pagou); pagar uma dívida em dólar já abre em dólar. A escolha de moeda é uma fileira de pílulas com a
bandeira desenhada, o código e o símbolo, e os campos de dinheiro preenchem os centavos sozinhos (digitar 1500 mostra 15,00;
contas como =105,53-60,02 continuam valendo). A conta em outra moeda aceita uma cotação combinada (a que a pessoa paga de
verdade, "1 R$ = 290 ARS", com botão para inverter): o valor da conta em reais passa a ser exato e a mesma cotação já vem
preenchida no "Paguei". Pedem a migração 14 e a
15
Tutorial guiado: depois das perguntas iniciais, o painel escurece e destaca, um por vez, onde fica cada coisa (lançar, resumo, lançamentos, importar extrato, e só as abas que a pessoa ligou). Um passo oferece ligar abas que ela não tinha escolhido. Dá para pular a qualquer momento (botão, X ou Esc) e rever em Configurações → Conta → Ver o tutorial, ou no menu da conta
Assinatura (Stripe): conta nova ganha 7 dias grátis sem cartão (o teste começa quando a pessoa escolhe o plano: migração 17 e 18); o cartão só é pedido ao assinar, por R$ 9,99
por mês (ou o equivalente em USD, EUR, ARS, CLP, UYU, COP, PEN, MXN, CAD, AUD, CHF, GBP, conforme a moeda da pessoa).
Teste acabou, cancelou ou o cartão falhou: o painel fica bloqueado. Quem deve ter acesso sem cobrança recebe cortesia (veja supabase/dar-cortesia.sql). Peças:
tabela assinaturas (migração 12), funções stripe-checkout, stripe-portal e
stripe-webhook em supabase/functions/ (segredo STRIPE_SECRET_KEY no Supabase, nunca no código) e, para o bloqueio valer
também no banco, a migração 20 (a 13 antiga), que liga o bloqueio: teste o fluxo de assinatura com uma conta nova logo depois de rodá-la
Forma de pagamento: todo lançamento tem "Como pagou?" (Pix, débito, crédito, dinheiro, boleto) ou "Como recebeu?" (Pix, transferência, dinheiro). O app lembra a forma que você usou para cada descrição e reconhece "Pix" escrito no texto (e no extrato importado). Crédito leva ao cartão e às parcelas e a compra entra na fatura e no limite da aba Cartões; Pix e débito saem do banco escolhido. Na lista, um filtro por forma mostra quanto foi gasto em cada uma (migração 11; sem ela o app funciona, só não guarda Pix/débito/dinheiro)
Lançamentos: lista por dia com busca e filtros; formulário rápido com "salvar e lançar outro", sugestão de descrição e categoria automática pelo histórico (digitou "iFood", já vem Alimentação)
Dívidas interligadas: cada dívida existe ao longo dos meses. Ao lançar uma saída de dívida, você escolhe qual dívida ela abate (ou o app reconhece pela descrição) e o saldo cai sozinho em todos os meses seguintes. Com a parcela definida, o app prevê quando a dívida acaba. Juros ou acordo? Basta informar o saldo novo. Se você informar os juros por mês de cada dívida (opcional, migração 19), o conselheiro do menu diz qual dívida pagar primeiro (a que cobra mais) e avisa quando os juros são muito altos
Bancos: cadastre os seus (Nubank, Itaú, Next, PicPay, dinheiro vivo…). O banco de cada entrada/saída é opcional — o app reconhece "(Next)" na descrição e lembra o banco que você usa para cada coisa. Tela de bancos com saldo guardado e movimento do mês de cada um, detalhe individual e bloco "Por banco" na visão geral. Saldos, US$ e meta passam automaticamente para os meses seguintes até você atualizar
Ano: totais do ano, gráficos de saldo e evolução de caixa, dívida, investimentos e dólar, tabela mês a mês
Importar planilha (.xlsx) com os meses e categorias da planilha antiga; exportar backup (.xlsx)
Valores aceitam 1.234,56 e contas como =105,53-60,02
Celular em modo leitura: resumo, gráficos e listas recolhidas; editar continua a um toque (botão + e tocando nos itens)
Tudo grátis: o site fica na Vercel ou Netlify e os dados no Supabase (Postgres), protegidos por login.
supabase/schema.sql → Run.
Depois, uma consulta por vez e nesta ordem, rode as migrações 09,
10, 11,
12, 14,
15, 16,
17, 18,
e, , a .
O sozinho tem cobrança nem bloqueio: sem a 12 e a 20 o painel abre para qualquer conta, paga ou não.
Não rode as migrações 02 a 08 num banco novo (o já inclui o que elas fazem) nem a 13 (a 20 a substitui).Vercel: https://vercel.com/new → importe este repositório → em Environment Variables adicione as duas variáveis acima → Deploy.
Netlify: https://app.netlify.com/start → importe este repositório (o netlify.toml já configura o build) → Site configuration → Environment variables → adicione as duas variáveis → Deploy.
Já tinha o banco criado antes? Rode as migrações que faltarem, em ordem, no SQL Editor (de
migracao-02até amigracao-20), e a 20 sempre por último. A maioria só acrescenta, não apaga nada. A 12 (assinaturas) e a 20 (bloqueio no banco) só servem se você cobra assinatura; a 16 acrescenta carência no cartão recusado, teste grátis por cartão e o registro de erros; a 19 acrescenta os juros por mês das dívidas (opcional).Não rode de novo o
schema.sqlnem as migrações 04 a 08, 13 e 16 num banco que já tem cobrança: elas apagam as regras de acesso (políticadonosemtem_acesso(), ou a função sem o teste grátis) e o bloqueio de quem não pagou deixa de valer. Se isso acontecer, rode amigracao-20, que é segura de rodar quantas vezes precisar.
lookup_key = opuscash_mensal (em reais e nas outras moedas aceitas).stripe-checkout, stripe-portal, excluir-conta (com verificação de JWT) e stripe-webhook
(sem verificação de JWT). Em Secrets, defina STRIPE_SECRET_KEY.stripe-webhook com os eventos customer.subscription.created, .updated e .deleted.supabase/dar-cortesia.sql
com os e-mails escolhidos. Rodar as migrações não dá cortesia a ninguém.VITE_EMAIL_SUPORTE e VITE_RESPONSAVEL: aparecem nos Termos e na Privacidade.URL Configuration: Site URL = endereço do site; em Redirect URLs adicione o mesmo endereço (o link de "Esqueci minha senha" e
o de confirmação voltam para ele).
SMTP próprio (Project Settings → Authentication → SMTP): o e-mail padrão do Supabase manda pouquíssimos por hora e quase não serve para um site aberto. Use Resend, Brevo, SendGrid etc.
E-mails com a cara do OpusCash (Authentication → Emails → Templates): cole o conteúdo de cada arquivo de
supabase/emails/ no template correspondente e use o assunto sugerido:
| Template do Supabase | Arquivo | Assunto |
|---|---|---|
| Confirm sign up | confirmar-cadastro.html | Confirme seu e-mail no OpusCash |
| Reset password | redefinir-senha.html | Crie uma senha nova no OpusCash |
| Change email address | trocar-email.html | Confirme seu novo e-mail no OpusCash |
| Password changed (ative "Ativar notificações") | senha-alterada.html | Sua senha do OpusCash foi alterada |
Em Authentication → Sign In / Providers → Email, deixe Confirm email ligado.
Passwords: ligue "Prevent use of leaked passwords" (plano Pro) e deixe o mínimo em 8 caracteres ou mais.
Erros do app aparecem em select * from erros_app order by criado_em desc limit 50;.
.env (o .gitignore já bloqueia *.xlsx e .env).cp .env.example .env # preencha as duas variáveis
npm install
npm run dev
19schema.sqlschema.sqlVITE_SUPABASE_URLVITE_SUPABASE_ANON_KEY
(essa chave é pública por natureza; quem protege os dados são as regras RLS do schema.sql. Nunca use a service_role.)