Files
budget-app/README.md
Claude 37bc35f53f feat: initial BudgetWise budgeting app with Appwrite sync
Full-stack PWA budgeting app installable on Android via Chrome.

Features implemented:
- Monthly balance sheet: income sources (monthly/yearly), buffer (fixed $ or % of income)
- Buckets: regular, savings-goal, and investment types with custom goals
  (amount or % of income, monthly or yearly schedule)
- Debt tracker: manual or auto-EMI (amortization formula), interest rate,
  remaining balance tracking, avalanche-method repayment suggestions
- Loan calculator: max affordable principal and EMI checker based on
  remaining income after all expenses
- Investment projections: compound interest at monthly/yearly rate,
  1/5/10-year projections per bucket
- Deposit / withdraw transactions per bucket with balance history
- Appwrite self-hosted backend: auth, 5 collections (balance_sheets,
  incomes, buckets, debts, transactions)
- scripts/setup-appwrite.cjs: one-command DB setup via node-appwrite
- PWA manifest + service worker (vite-plugin-pwa) for Android install
- Dark mobile-first UI with TailwindCSS, Zustand state, React Router v6

https://claude.ai/code/session_01Ny2EMaZYvzk5SSVDAPgxpP
2026-02-22 14:10:44 +00:00

3.6 KiB
Raw Permalink Blame History

BudgetWise

A personal budgeting PWA with self-hosted Appwrite sync — installable as an Android app.

Features

Feature Details
Monthly balance sheet Track income sources (monthly or yearly), set a monthly buffer (fixed amount or % of income)
Buckets Regular, savings-goal, and investment buckets with custom goals (amount or % of income, monthly or yearly)
Investment returns Track projected returns at a monthly or annual rate, see 1/5/10-year projections
Debt tracker Manual or auto-EMI calculation, interest rate (monthly/yearly), amortization tracking
Auto repayment plan After all expenses, avalanche-method suggestion for extra debt repayment
Loan calculator Max affordable loan based on remaining income after buffer + buckets + debts
Deposit / Withdraw Manual transactions per bucket, balance history
PWA / Android Installable via Chrome "Add to Home Screen"
Offline capable Service worker caches the app shell

Tech Stack

  • React 18 + TypeScript + Vite
  • TailwindCSS (dark theme, mobile-first)
  • Appwrite JS SDK (self-hosted database & auth)
  • Zustand (state management)
  • vite-plugin-pwa (service worker + web manifest)

Setup

1. Clone & install

git clone <repo>
cd budget
npm install

2. Configure environment

cp .env.example .env

Edit .env:

VITE_APPWRITE_ENDPOINT=https://your-appwrite.example.com/v1
VITE_APPWRITE_PROJECT_ID=your-project-id
APPWRITE_API_KEY=your-server-api-key    # only for setup script

3. Set up Appwrite

Install Appwrite (Docker):

docker run -it --rm \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \
  --entrypoint="install" \
  appwrite/appwrite:latest

Then:

  1. Open your Appwrite console → Create Project → note the Project ID
  2. Go to API Keys → create a key with databases.write permission
  3. Add the key to .env as APPWRITE_API_KEY

4. Create database collections

npm run setup:appwrite

This creates the budget_db database with all five collections and their attributes/indexes.

5. Build & deploy

npm run build
# Deploy dist/ to any static host (Nginx, Caddy, Netlify, Vercel…)

HTTPS is required for the PWA install prompt and service worker.

6. Install on Android

  1. Open the app URL in Chrome on Android
  2. Tap the three-dot menuAdd to Home Screen
  3. The app now runs as a standalone PWA with its own icon and no browser chrome

Data Model

balance_sheets   month, year, buffer_type, buffer_value
incomes          balance_sheet_id, name, amount, frequency
buckets          name, type, current_balance, goal_*, return_*, color
debts            name, principal, remaining_balance, interest_rate, term_months, monthly_payment
transactions     bucket_id, type, amount, date, notes, balance_after

Key calculations

Formula Where used
Monthly income Sum of incomes (yearly ones ÷ 12)
Buffer Fixed $ or % × monthly income
Bucket allocation Goal amount or % of income, divided by 12 for yearly goals
EMI P × r × (1+r)^n / ((1+r)^n 1)
Max loan payment × (1 (1+r)^n) / r
Investment projection Compound interest P × (1+r)^n

Development

npm run dev       # Start dev server at http://localhost:5173
npm run build     # Production build
npm run preview   # Preview production build locally