Your Name
7c8effb0a7
feat: receipt lightbox component with zoom and focus trap
2026-02-20 15:23:11 +02:00
Your Name
f337f8c28f
feat: global shortcut for quick entry dialog
2026-02-20 15:20:27 +02:00
Your Name
96ef48000c
feat: global quick entry dialog component
2026-02-20 15:18:34 +02:00
Your Name
c6f6b61503
feat: timesheet row persistence and copy last week
2026-02-20 15:17:01 +02:00
Your Name
ebadbbc2a6
feat: timesheet row persistence backend
2026-02-20 15:15:50 +02:00
Your Name
f504241fc9
feat: entry template management in settings
2026-02-20 15:10:48 +02:00
Your Name
1e324ef0ca
feat: entry template picker and save-as-template in entries view
2026-02-20 15:09:37 +02:00
Your Name
2292e4ff9e
feat: entry templates pinia store
2026-02-20 15:07:18 +02:00
Your Name
2b47f3412a
feat: entry templates CRUD backend
2026-02-20 15:06:50 +02:00
Your Name
fb41f67145
feat: cascade delete dialog for clients with dependency counts
2026-02-20 15:02:39 +02:00
Your Name
0ddf8aa14e
feat: client cascade delete with dependency counts
2026-02-20 15:01:33 +02:00
Your Name
eb58794555
feat: smart timer safety net - save dialog on stop without project
2026-02-20 14:58:02 +02:00
Your Name
f0d8e066cb
feat: timer save dialog for no-project and long-timer scenarios
2026-02-20 14:56:17 +02:00
Your Name
349b9eb95d
feat: use batch save for invoice items
2026-02-20 14:55:17 +02:00
Your Name
37751eb0c8
feat: batch invoice items save with transaction
2026-02-20 14:54:37 +02:00
Your Name
4faac61901
fix: independent try/catch per onboarding detection call
2026-02-20 14:47:26 +02:00
Your Name
83a3ca1e93
feat: standardize error handling across all stores
2026-02-20 14:46:56 +02:00
Your Name
6c961b6c9f
feat: use unified error handler in entries store
2026-02-20 14:43:10 +02:00
Your Name
8bcd81b4f0
feat: unified error handler with retry for transient errors
2026-02-20 14:42:30 +02:00
Your Name
6179c8fee8
feat: persistent notifications toggle in settings
2026-02-20 14:40:50 +02:00
Your Name
6df5485813
feat: toast undo button and hover/focus pause
2026-02-20 14:38:34 +02:00
Your Name
d83a832cb1
feat: toast auto-dismiss with undo and pause support
2026-02-20 14:38:08 +02:00
Your Name
6757b7d800
docs: enhancement round 2 implementation plan - 34 tasks
...
Phase 1: Toast auto-dismiss/undo, unified error handling, onboarding
resilience, invoice batch save, smart timer safety net.
Phase 2: Client cascade delete, entry templates, timesheet persistence,
global quick entry, receipt management.
Phase 3: Dashboard comparison, project health, heatmap, rounding
visibility, complete export with auto-backup.
2026-02-20 14:29:25 +02:00
Your Name
03c1157683
docs: enhancement round 2 design - 15 feature proposals
...
Covers smart timer safety net, toast undo system, unified error
handling, onboarding resilience, invoice save reliability, global
quick entry, entry templates, timesheet persistence, client cascade,
receipt management, weekly comparison, project health cards, time
heatmap, rounding preview, and export scheduling. All features
designed for WCAG 2.2 AAA compliance.
2026-02-20 14:22:01 +02:00
Your Name
2a1ed8d875
feat: add tour store for guided walkthrough state
2026-02-20 09:36:26 +02:00
Your Name
3dcbd4a888
chore: tidy up project structure and normalize formatting
2026-02-19 22:43:14 +02:00
Your Name
47eb1af7ab
fix: mini timer renders via window label instead of hash routing
...
The mini timer window was blank because hash-based routing
(createWebHashHistory) doesn't work with Tauri's WebviewUrl path.
Now App.vue detects the mini timer by checking getCurrentWindow().label
=== 'mini-timer' and renders the MiniTimer component directly,
bypassing the router entirely.
2026-02-18 15:26:44 +02:00
Your Name
28eb7a2639
fix: mini timer window blank due to hash routing mismatch
...
The app uses createWebHashHistory but the mini timer window was
opened with WebviewUrl::App("/mini-timer") which sets the URL path,
not the hash fragment. Vue Router never matched the route, so the
Dashboard rendered in a 300x64 window (appearing blank). Now loads
root URL and sets window.location.hash via eval. Also shows/focuses
the main window when closing the mini timer.
2026-02-18 15:23:20 +02:00
Your Name
8c8de6a2a7
feat: load invoice templates from JSON files via backend
...
Templates are now loaded dynamically from data/templates/*.json
via the get_invoice_templates Tauri command instead of being
hardcoded in TypeScript. Preview and PDF renderer switch on
template.layout instead of template.id, allowing custom templates
to reuse built-in layouts with different colors.
2026-02-18 15:17:54 +02:00
Your Name
8b8d451806
feat: load invoice templates from JSON files in data/templates directory
2026-02-18 15:12:30 +02:00
Your Name
f0571fb1bb
fix: delete invoice_items before invoice to prevent FK constraint failure
2026-02-18 15:07:43 +02:00
Your Name
92749bdb63
fix: make template picker full-screen with fixed positioning so buttons are visible
2026-02-18 15:05:02 +02:00
Your Name
e3450ff92e
feat: rewrite InvoicePreview with 15 unique typographic layouts
2026-02-18 14:50:49 +02:00
Your Name
efc9fce811
feat: rewrite PDF renderer with 15 unique typographic layouts
2026-02-18 14:45:38 +02:00
Your Name
c499acd17d
feat: add two-step invoice flow with full-screen template picker
2026-02-18 14:43:55 +02:00
Your Name
056333c31c
feat: update invoicePdf wrapper with new default template ID
2026-02-18 14:41:23 +02:00
Your Name
59e713f1ec
feat: rewrite invoice template configs with design-doc IDs and colors
2026-02-18 14:39:01 +02:00
Your Name
ed8b0c0776
feat: add template_id to Invoice interface and updateInvoiceTemplate action
2026-02-18 14:38:14 +02:00
Your Name
6a252facf6
feat: add template_id column to invoices table and update_invoice_template command
2026-02-18 14:37:26 +02:00
Your Name
4a45713c77
docs: add invoice templates v2 implementation plan
2026-02-18 14:32:38 +02:00
Your Name
de5f65aed0
docs: add invoice templates v2 complete redesign design doc
2026-02-18 14:28:41 +02:00
Your Name
0ecb4d80c1
feat: integrate template picker into invoice create and preview views
2026-02-18 13:35:11 +02:00
Your Name
d739033463
feat: add business identity settings for invoice branding
2026-02-18 13:34:44 +02:00
Your Name
cf4d64eced
feat: add InvoicePreview.vue with all 7 header styles and 5 table styles
2026-02-18 13:30:27 +02:00
Your Name
98152984c1
feat: add InvoiceTemplatePicker split-pane component
2026-02-18 13:28:40 +02:00
Your Name
b05bd415fb
feat: add config-driven jsPDF invoice renderer with all header and table styles
2026-02-18 13:26:11 +02:00
Your Name
185b20cab2
feat: add 15 invoice template configs and registry
2026-02-18 13:16:36 +02:00
Your Name
a05e7555e8
docs: add invoice templates implementation plan
...
9-task plan covering template config types, jsPDF renderer,
HTML preview component, template picker UI, Invoices.vue
integration, business identity settings, and polish passes.
2026-02-18 13:12:37 +02:00
Your Name
2e4143edc0
docs: add invoice templates design document
...
15 visually distinct templates across 4 tiers (Professional
Essentials, Creative & Modern, Warm & Distinctive, Premium &
Specialized) with template config schema, picker UI design,
shared renderer architecture, and business identity support.
2026-02-18 13:07:39 +02:00
Your Name
291429e1b8
refactor: migrate remaining dialogs to Vue Transition, remove old keyframes
...
Convert Settings, Invoices, IdlePrompt, AppTrackingPrompt, and
AppDiscard dialogs from animate-modal-enter CSS class to proper
<Transition name="modal"> wrappers for enter/leave animations.
Remove unused animate-modal-enter and animate-dropdown-enter keyframes.
2026-02-18 11:36:35 +02:00