Budget Planner
All updates

v1.9 · Released · March 27, 2026

Invoice Generation, Client Billing, Work Tracking & Dashboard Redesign

Full invoicing system with PDF export, client management with per-client billing currency, billable entry tracking, dashboard consolidation, sidebar restructuring, and recurring transaction improvements.

Invoice Generation
  • Full CRUD: Create, edit (drafts only), send, mark as paid, cancel invoices with proper status lifecycle (DRAFT -> SENT -> PAID/OVERDUE -> CANCELLED).
  • PDF Export: Clean black-and-white Stripe-inspired design with status watermarks (PAID, OVERDUE, DRAFT, CANCELLED). Download from any invoice.
  • In-App Preview: Document-style preview matching the PDF layout exactly. Balance Due line shows $0 when paid.
  • Overdue Detection: Daily cron job automatically transitions SENT invoices past due date to OVERDUE status.
  • Invoice Dashboard Widget: Outstanding amount, overdue count, and draft count with quick action buttons on the main dashboard.
  • Sortable DataTable: Invoice list with sortable columns, pagination (10 per page), status filter tabs, and visible action buttons.
Client Management
  • First-Class Clients: Dedicated /clients page with card grid layout showing name, billing rate, unbilled totals.
  • Per-Client Billing Currency: Each client can have a different currency (USD, EUR, PHP, etc.). Used across entries, invoices, and PDF generation.
  • Default Billing Rate: Auto-fills the rate when logging entries for a client. Editable per entry.
  • Client Detail Page: Stats cards (unbilled, invoiced, paid, outstanding), tabbed view for entries and invoices.
  • Soft Delete: Archive clients instead of hard delete to preserve audit trail for billed entries.
Billable Entries (Work Tracking)
  • Daily Work Log: Quick-add form with client, date, description, hours/qty, and rate. Desktop table layout, mobile bottom sheet.
  • Date-Grouped List: Entries organized by date with unbilled totals per currency in headers.
  • Generate Invoice from Entries: Select a client, pick a date range (This month/Last month/All), week grouping with group checkboxes, auto-append billing period to notes.
  • Entry-to-Invoice Linking: Each entry maps 1:1 to an invoice line item. Cancel/delete invoice reverts entries to unbilled.
  • Visual Status: Unbilled entries are editable, invoiced entries are dimmed and locked with a link to the invoice.
Dashboard Redesign
  • Consolidated Queries: Reduced from ~20 Prisma queries to ~8 per dashboard load via a single getDashboardData() method.
  • Merged Debt Cards: 3 separate cards (Total Debt, Credit Utilization, Debt Paydown) consolidated into 1 Debt Overview card.
  • Simplified Icons: Reduced from 11 status icons to 4 (CheckCircle, AlertTriangle, Flame, XCircle).
  • Visual Hierarchy: Net Worth hero card, Budget Health elevated to second position, consistent gradient styling.
Sidebar Navigation
  • Primary/Secondary Split: Core items (Dashboard, Transactions, Budgets, Goals, Invoices, Accounts, Reports) separated from utilities (Recurring, Import, Changelog in footer).
  • Invoices Collapsible Group: Sub-items for Clients, Entries, and All Invoices — ordered by workflow (setup -> log -> bill).
  • Auto-Open on Active Route: Collapsible groups automatically expand when navigating to a sub-page.
  • Merged Changelog: Updates + Feedback combined into single Changelog item with new-badge indicator.
Recurring Transaction Fixes
  • Edit Dialog: Full edit capability for recurring transactions (was missing — only create/delete existed).
  • Budget Linking: Recurring expenses can now be assigned to envelope budgets.
  • Service Delegation: Cron job now uses IncomeService/ExpenseService instead of raw Prisma (enables tithe and emergency fund auto-transfers).
  • Account Required: Account field is now mandatory (was optional, causing silent balance update failures).
  • Category Reset: Switching between Income/Expense type now properly resets the category selection.
Reset Financial Data
  • Tiered Reset: Transaction Reset (keep accounts zeroed, categories, goals) or Full Reset (delete everything, restart onboarding).
  • Double Verification: Password re-entry + type 'DELETE ALL DATA' confirmation phrase.
  • Data Export: Download all financial data as JSON before resetting.
  • Located in Profile page Danger Zone section.