尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
App web para controlar gastos do ano inteiro: salário por mês, gastos fixos (que se repetem todo mês), lançamentos variáveis, e quanto sobra do salário — em verde quando sobra e vermelho quando estoura. • Frontend: React + Vite + TypeScript + Tailwind + Recharts • Login + banco: Supabase (plano grátis) com Row Level Security — cada conta só enxerga os próprios dados • Hospedagem: Vercel (plano grátis) • PWA: instalável no celular/desktop, abre offline (dados só de leitura) Para rodar de verdade (com Supabase), veja abaixo. 1. Criar o projeto no Supabase (grátis)查看完整 README ↗
App web para controlar gastos do ano inteiro: salário por mês, gastos fixos (que se repetem todo mês), lançamentos variáveis, e quanto sobra do salário — em verde quando sobra e vermelho quando estoura.
npm install
npm run demo # abre em http://localhost:5173 com dados FICTÍCIOS (sem login)
Para rodar de verdade (com Supabase), veja abaixo.
supabase/schema.sql e clique em Run.
Isso cria as tabelas e as regras de segurança.Crie um arquivo .env na raiz (copie de .env.example):
VITE_SUPABASE_URL=https://xxxxxxxx.supabase.co
VITE_SUPABASE_ANON_KEY=eyJhbGciOi...
Teste local:
npm run dev
Crie sua conta na tela inicial e comece a usar.
VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEYhttps://...vercel.app.Cada git push na branch principal gera um novo deploy automático.
auth.uid() = user_id. Mesmo com a anon key pública (ela é feita para ficar
no navegador), ninguém acessa dados de outra conta.anon key pode ficar no frontend. A chave que nunca deve aparecer no
código nem no navegador é a service_role — não use ela aqui.autoRefreshToken).Como você é o único usuário, basta criar uma conta. Se um dia outra pessoa criar conta no mesmo app, os dados dela ficam totalmente separados dos seus.
src/
App.tsx decide entre login / dashboard / setup
lib/
supabase.ts client do Supabase
useAuth.tsx contexto de login (entrar, cadastrar, sair)
useYearData.ts carrega e calcula os números do ano
format.ts R$, meses, parserde valores "1.234,56"
demo.ts / demoStore.ts modo demonstração (npm run demo)
components/
Auth.tsx tela de login/cadastro
Dashboard.tsx resumo do ano + grade de 12 meses + toast de desfazer
Header.tsx seletor de ano, sair
StatCard.tsx cartões de total (verde/vermelho)
MonthCard.tsx cartão de cada mês com barra de progresso
MonthDetail.tsx modal do mês: salário, fixos do mês, lançamentos
InstallmentModal.tsx criar parcelamento
BillsPanel.tsx "Contas a pagar" do ano (lançamentos + fixos)
CategoryChart.tsx rosca de gastos por categoria (com filtro e drill-down)
BankChart.tsx rosca de gastos por banco (com filtro e drill-down)
PatrimonyCard.tsx cartão com o patrimônio total (contas+caixinhas+
investimentos+sobra do ano)
FixedExpensesPanel.tsx CRUD de gastos fixos
SavingsPanel.tsx lista de contas/caixinhas/investimentos com saldo
SavingsDetailModal.tsx histórico + depósito/retirada de uma conta
SummaryChart.tsx gráfico salário x gasto x sobra (mês a mês / acumulado)
Toast.tsx aviso com ação (desfazer)
scripts/gen-icons.mjs gera os ícones PNG do PWA
supabase/schema.sql rode no SQL Editor do Supabase
| Tabela | Para quê |
|---|---|
user_settings | salário padrão mensal |
fixed_expenses | gastos que repetem todo mês (ativar/desativar) |
monthly_salary | salário específico de um mês (sobrescreve o padrão) |
transactions | lançamentos e contas: data, descrição, valor, paid, due_date, method (boleto/cartão/pix/dinheiro/outro), category, bank (texto livre, ex: "Nubank"), group_id (parcelamento) |
fixed_expense_status | marca se um gasto fixo foi pago num mês específico (fixed_expense_id, year, month, paid) |
savings_accounts | caixinhas e investimentos: nome, kind (caixinha/investimento), institution (onde está guardado) |
savings_movements | depósitos e retiradas de uma caixinha/investimento (account_id, amount, kind, occurred_on, note) |
Cálculo de cada mês:
sobra = salário − (soma dos fixos ativos + soma dos lançamentos do mês)
— contas ainda não pagas também entram no gasto; o painel "Contas a pagar"
e os selos "a pagar" só ajudam a acompanhar o que falta quitar.
Já tinha rodado uma versão anterior do
schema.sql? Pode rodar de novo: o script é idempotente — cria a tabelafixed_expense_statusse faltar e adiciona as colunas novas viaalter table ... add column if not exists.
group_id.⚠️ N contas atrasadas) leva até a lista.(adiada de <mês>).public/pwa-*.png — regere com npm run gen:icons.