A zero-backend PWA expense tracker. Monthly expenses are committed as JSON files to a private GitHub repo via the Contents API. No server, no subscription.
| Repo | Visibility | Purpose |
|---|---|---|
explogger |
Public | This code — hosted on GitHub Pages |
my-expenses (or any name) |
Private | Expense data files |
npm install # installs deps; predev script generates PWA icons
npm run dev # http://localhost:5173On first load you'll see the Connect Repository screen. Enter:
-
Repository:
yourname/my-expenses -
PAT: a fine-grained Personal Access Token scoped to that repo
→ GitHub → Settings → Developer settings → Personal access tokens → Fine-grained tokens
→ Repository access:my-expensesonly
→ Permissions: Contents → Read and write
- Push to
main— the Actions workflow builds and deploys automatically. - First time only: enable Pages in the repo settings:
Settings → Pages → Source → GitHub Actions - Your app URL:
https://YOUR_USERNAME.github.io/explogger/
Android (Chrome)
Open the URL → three-dot menu → Add to Home screen / Install app
iOS (Safari)
Open the URL → Share sheet → Add to Home Screen
Expenses live in expenses-YYYY-MM.json in your data repo:
[
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-24",
"amount": 12.50,
"category": "food",
"note": "lunch"
}
]- The app shell is cached by the service worker — it loads instantly even with no signal.
- Expenses logged offline are stored in
localStorageand committed to GitHub automatically when the connection returns. - The Sync chip in the top-right shows pending count and lets you force-sync manually.
node generate-icons.mjs --force