Expenses
Add receipt
Take photo or upload file
Receipts, invoices, PDFs
Tap to open camera or choose file
Reports
Settings
Signed in
One-time setup (~15 minutes):
- Install Node.js, then run:
npm install -g wrangler - Run
wrangler login— opens browser to sign in to Cloudflare (free account) - Create D1 database:
wrangler d1 create ninja-expense— copy the ID into wrangler.toml - Create R2 bucket:
wrangler r2 bucket create ninja-expense-receipts - Run schema:
wrangler d1 execute ninja-expense --file=schema.sql - Set secret:
wrangler secret put JWT_SECRET— type any random phrase - Deploy:
wrangler deploy— copy the Worker URL - Paste URL above → Test connection → then create your first user below
Add new user
Local storage used
Calculating…
Files uploaded to Supabase Storage are automatically removed from this device. "Clear files in cloud" manually removes any remaining local copies.
Security: Passwords hashed with PBKDF2 (100,000 iterations) server-side. JWTs signed with HS256. All requests authenticated. Per-user data isolation enforced in the Worker.
Files: Receipts stored in Cloudflare R2 (10GB free). Served through the authenticated Worker — files are private and require a valid session to access.
Database: Cloudflare D1 (SQLite) — 5GB free, fast, globally distributed.
Tip: Browser Share → Add to Home Screen for a phone app icon.