尚未偵測到更新。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.