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.