Previously only checked checking+savings; now includes investments and
any other non-liability account types.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When running as root on an existing install, git refuses to operate on
a repo owned by a different user. Mark the install dir as safe before pulling.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Envelopes view: "Available to Budget" card shows checking+savings balance
minus total envelope allocations — turns red if over-allocated
- Income transactions in ManualEntry: envelope picker labeled clearly,
green highlight, helper text explaining effect on Available to Budget,
default option "Leave in Available to Budget"
- Fix account delete: now removes the account's transactions and
recalculates envelope spending
- Fix transaction edit/delete: use functional state updater to avoid
stale closure bug on accounts/envelopes recalculation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
install.sh: no-Docker one-liner for cloud VPS
- Installs Node.js 20 via NodeSource if missing (Ubuntu/Debian/RHEL/Rocky)
- Clones to /opt/capsule, builds, creates a systemd service
- Re-running upgrades in place (git pull + rebuild)
Backup & Restore (Settings → Backup & Restore tab):
- Download Backup: streams all data/ as a .tar.gz (pure Node zlib, no deps)
- Restore: upload a .tar.gz to replace server data, auto sign-out after
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
App no longer uses Firebase — these were vestigial from an earlier version.
The exposed API key should be rotated in the Firebase console.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- TOTP-based two-factor authentication (RFC 6238, HMAC-SHA1): setup, enable, disable in Settings → Password & Security
- Login flow: password verified first, then temp token issued for 5-min TOTP window before full session is granted
- QR code generated server-side via `qrcode` package for scanning with any authenticator app
- "Run Rules Now" button in TransactionRulesManager applies auto-categorization rules to existing uncategorized expenses
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Account sharing:
- fileStorage: add shares.json with createShare/listShares/getShareData/revokeShare
- /api/share/account: real implementation using session token
- /api/share/list: GET endpoint returning owned + received shares
- /api/share/data: GET endpoint to fetch a shared account's data
- SharedAccountManager: use session token, load existing shares, revoke support
- AccountManagement: render SharedAccountManager per-account
- page.tsx: load received shares on login, show "Shared with me" cards in Accounts view
Get Paid schedule:
- PaycheckSchedule type: weekly/biweekly/semimonthly/monthly with day config
- computeNextPayday(): calculates next payday from today
- Schedule UI in GetPaid modal with live "Next payday: ..." preview
- Schedule persisted to localStorage template
Recurring transaction manager:
- Fix biweekly support (was missing)
- Show "due now" vs "upcoming" with amber badge for overdue
- Render in Transactions view; onApplyRecurring creates new transactions + updates lastAppliedDate
Envelope overspending:
- Red warning banner at top of Envelopes view listing overspent envelopes
- Red ring on individual overspent envelope cards
Mobile layout:
- Fixed bottom tab bar (Home/Accounts/Txns/Envelopes/More) on sm: and below
- Active tab highlighted in blue
- Main content padded to avoid being hidden by bottom nav
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- FileUpload: full rewrite with column mapping, split debit/credit columns,
negate toggle, duplicate detection, OFX/QFX support, and live preview
- ManualEntry: add recurring transaction checkbox with weekly/biweekly/monthly/yearly options
- DataInput: pass existingTransactions to FileUpload for duplicate detection
- Settings: use session token for delete-account; replace reset-code password
flow with proper current+new password form
- page.tsx: fix TypeScript build error by mapping date strings to Date objects
after setup wizard completes
- SetupWizard: fix hasSplit boolean type error
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- New csv-import wizard step with file upload, auto column detection, column mapping UI, split-debit/credit support, and 5-row preview
- Imports transactions and auto-calculates account balance from CSV data
- Uses pendingImportedTransactions state (not side-channel) to reliably pass transactions through to saveUserData
- handleSetupComplete reloads from server so imported transactions appear in the UI immediately after wizard completes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
All 11 modal backdrop divs used `bg-black bg-opacity-50` which Tailwind v4
dropped, causing solid-black overlays. Replaced with `bg-black/50` across
AuthModal, AccountManagement, EnvelopeCreate, EnvelopeEdit, GetPaid,
SetupWizard, TransactionEdit, and page.tsx.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Install all dependencies including TypeScript for build
- Remove devDependencies after build to keep image small
- Fixes TypeScript missing error during Docker build
- Escape &, /, and \ characters in encryption key before sed
- Use | as delimiter instead of / to avoid conflicts
- Fixes 'unknown option to s' error on ZimaOS
- Auto-detect standalone docker-compose vs docker compose plugin
- Works on ZimaOS which uses docker compose (v2)
- Works on older systems with docker-compose (v1)
- Updated all script commands to use detected version
- Better error messages showing which version is being used
- Added fallback to /dev/urandom when openssl is not available
- Added multiple fallback methods for encryption key generation
- Scripts now work on minimal systems like ZimaOS
- Maintains security with urandom-based key generation
- Added clone and deploy method as primary option
- Noted that curl install only works for public repos
- Updated README.md with both installation methods
- Updated DEPLOYMENT.md with proper instructions
- Clone method works for both private and public repos
- Added test-persistence.sh script to verify Docker volume mounting
- Enhanced DEPLOYMENT.md with detailed data persistence documentation
- Updated deploy.sh to verify data directory mount on deployment
- Added data/README.md explaining data storage and backup
- Updated data/.gitignore to include README.md
- Documented what data persists and what doesn't
- Added backup strategies and troubleshooting tips
- Updated Dockerfile for local storage deployment (removed Firebase dependencies)
- Created docker-compose.yml with persistent data volumes
- Added deploy.sh script for automated deployment
- Created DEPLOYMENT.md with ZimaOS deployment guide
- Added .env.example for configuration template
- Updated .gitignore to protect sensitive data
- Fixed package.json to use port 7654 in production
- Cleared all test user data for fresh deployment
- Updated README with deployment section
- Add CSS variables for brand colors: Primary Blue (#1E73BE), Finance Green (#28A745), Cloud Blue (#A7D8F8), Dark Navy (#0F2C4C), Neutral Gray (#F4F4F4)
- Import Montserrat and Roboto fonts from Google Fonts
- Update navigation bar with brand colors (navy logo, blue active state, green Get Paid button)
- Update landing page hero section with brand color accents and button styling
- Update AuthModal, GetPaid, Settings, and DemoWizard components to use CSS variables
- Apply brand colors to info boxes and secondary UI elements
- Improve visual consistency across all app screens with cohesive color palette