Skip to content

Latest commit

 

History

591 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Budgard

A personal expense tracker that actually fits in your pocket.

Live App TypeScript React License


I built Budgard because every expense app I tried was either too complicated or locked its basics behind a subscription. This one is just what I need: log an expense, see where the money went, move on with your day. The essentials are free for good — an optional Pro tier covers the power features and keeps the project running.

It's a PWA so it installs on your phone like a native app, syncs across devices, and works without an App Store.

budgard.com — sign in with your email, no password needed.

What it does

Expenses

  • Log expenses with amount, description, date, category, tag, and currency
  • Attach receipt photos with drag-and-drop or tap-to-upload (compressed to WebP)
  • Save expense templates for quick re-entry of frequent purchases
  • Date-grouped feed with sticky headers (Today, Yesterday, or formatted date)
  • Filter and search by category, tag, date range, or keyword
  • Sort by date or amount, search across all months
  • CSV import and export (export is Pro)
  • Merchant normalization, reusable transaction rules, and an import review queue
  • Multi-currency support with live exchange rates
  • Animated number transitions on totals

Recurring Expenses

  • Set up recurring expenses (weekly, biweekly, monthly, quarterly, yearly) with start/end dates — 3 on the free plan, unlimited with Pro
  • Automatic expense generation via Supabase Edge Function
  • Track next occurrence and overdue status
  • Toggle active/inactive without deleting
  • Preview estimated monthly cost

Income

  • Log one-off and recurring income alongside expenses
  • Net cash flow card (income − expenses) with savings rate
  • 50/30/20 ring (needs / wants / savings) computed live from your data
  • Optional savings allocation per income entry
  • Stored in a single transactions table with a type discriminator

Analytics

  • Monthly spending snapshot with month-over-month comparison
  • Interactive area chart with clickable month drill-down — last 3 months free, full history with Pro
  • Category breakdown with sparkline trends and drill-down details
  • Budget progress indicator with color-coded alerts
  • Proactive insights: weekly category anomalies, daily budget remaining, spending pace, and month-end projection
  • Cash flow trends and annual CSV export (Pro)

Budget

  • Set a monthly total budget target
  • Per-category budgets with their own 80% / 100% alerts (Pro)
  • Real-time progress tracking with color-coded alerts at 80% and 100%
  • Budget reference line on analytics chart

Savings Goals (Pro)

  • Create goals with a target amount and optional deadline
  • Link a goal to an investment account so progress is backed by its real balance
  • Invest yesterday's unspent daily allowance directly from Today
  • Visual progress bar with on-track / behind status
  • Edit or delete from a single goal card

Net Worth

  • Manual accounts (checking, savings, cash, investment, other)
  • Snapshot-based balance history per account, with verb-style actions (Add money, Withdraw, Update value)
  • Net worth chart with month-over-month delta
  • Account groups roll up totals by category
  • Investment accounts get an annualized return (XIRR), cost-basis line on the per-account chart, and an allocation donut across holdings
  • Recurring expenses can target an investment account so contributions roll into the balance automatically

Debt Tracker

  • Track debts with balance, APR, and minimum payment
  • Snowball or avalanche payoff plan with payoff date estimate
  • Log payments as linked expenses; balance auto-updates via DB trigger
  • Per-debt progress bar and detail sheet

Categories and Tags

  • Custom categories with user-chosen colors and emoji icons
  • Categories can be tagged as Need, Want, or Savings to feed the 50/30/20 ring
  • Tags for finer-grained expense grouping
  • Filter by category or tag in the expense list

Household Sharing (Pro)

  • Invite one partner into a shared financial space
  • Switch between personal and shared finances without sharing logins
  • Keep billing, notifications, push subscriptions, and security settings personal

Imports and Automation

  • Import CSV, OFX, QFX, and QIF bank statements
  • Review every imported row before trusting the automation
  • Teach merchant/category/tag rules and apply them to matching history
  • Detect recurring patterns and confirm suggestions instead of silently guessing

Notifications

  • Bill reminders for recurring expenses due tomorrow
  • Debt-payment reminders the day before they're due
  • Budget warning when monthly or per-category spend crosses 80%
  • Budget exceeded when monthly or per-category spend crosses 100%
  • Configurable daily reminder at the hour you choose
  • In-app weekly recap card every Monday summarizing the prior week
  • Per-type toggles in settings; works across mobile and desktop

Customization

  • Three themes: dark, light, and Barbie
  • Seven accent colors: Sunset, Ocean, Lavender, Mint, Coral, Gold, Slate
  • English and Greek (auto-detected from browser)
  • Default currency setting

Other

  • Guided onboarding for new users
  • Offline support with sync on reconnect
  • PWA update detection with in-app prompt
  • Installable on iOS, Android, and desktop
  • Account deletion from settings

Free and Pro

The core app is free — not a trial, not metered. The free plan includes unlimited expenses in 23 currencies, a monthly total budget, up to 3 recurring expenses, the last 3 months of analytics, and one tag per expense. Net worth and debt tracking are free too.

Budgard Pro — €1.99/month or €19.99/year — unlocks household sharing, account-funded investment goals, unlimited recurring expenses, full analytics history with cash flow trends, and CSV exports, plus early access to new features.

Payments run through Stripe as merchant of record; subscriptions are managed or cancelled anytime from Settings via the Stripe customer portal.

Tech

React 19 + TypeScript + Vite on the frontend. Supabase handles auth (email OTP), the Postgres database, file storage for receipts, and Edge Functions for recurring expense generation, push notifications, and Stripe billing (checkout, webhook, customer portal, live prices). Deployed on Netlify.

UI components from shadcn/ui, charts hand-rolled as inline SVG in components/charts/ (no charting library), forms from react-hook-form + Zod. State lives in React Context with optimistic updates (custom rollback pattern) so the UI never feels slow. Cloudflare Turnstile protects the auth flow. Errors are monitored with Sentry. Push notifications use the Web Push API with VAPID authentication.

Key architecture

  • State: Context API — AuthContext for sessions, FinancialSpaceContext for owner/household scope, and narrow DataContext slices so consumers don't re-render on unrelated mutations
  • Data: All Supabase calls go through services/*; transactions load in two stages (last 12 months first, full history streams in)
  • Mutations: Optimistic updates with rollback, one domain hook per table in hooks/dataOps/* (useExpenseOps, useCategoryOps, …) — called directly, there is no composed wrapper
  • Validation: Zod schemas in lib/validations.ts, react-hook-form for forms
  • Routing: Lazy-loaded routes with PrivateRoute / PublicRoute guards
  • Path alias: @/* maps to ./src/*
  • i18n: i18next with browser language detection
  • Offline: Queued mutations with automatic sync on reconnect

Scripts

The package manager is bun (bun.lock; bunfig.toml sets frozenLockfile, so bun install fails rather than silently resolving a different tree). The npm run scripts below work with either runner.

bun install           # install (respects the lockfile)

bun run dev           # dev server
bun run build         # TypeScript compile + Vite production build
bun run typecheck     # TypeScript check without emit
bun run lint          # ESLint
bun run lint:fix      # ESLint with auto-fix
bun run test          # unit tests (Vitest)
bun run test:watch    # watch mode
bun run test:coverage # with coverage report
bun run test:e2e      # end-to-end tests (Playwright)
bun run budget        # bundle-size budgets (reads dist/, run after build)
bun run sync:agents   # regenerate AGENTS.md from CLAUDE.md

bun run format reformats all of src, and the repo is not Prettier-clean at baseline — running it repo-wide produces a diff of unrelated files. Format only what you touched.

License

This project is proprietary software. The source code is available for reference and transparency, but copying, modifying, distributing, or using this software — in whole or in part — is not permitted without explicit authorization.

See LICENSE for full terms.


Built by George Vagdas

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages