Commit Graph

132 Commits

Author SHA1 Message Date
Your Name eb0c65c29a feat: complete export/import cycle and remove sample data
Export now includes invoice_payments and recurring_invoices tables.
Import restored to use ID-based lookups and all fields for clients,
projects, tasks, and time entries. Added missing import support for
timeline_events, calendar_sources, calendar_events, invoice_payments,
and recurring_invoices. Export uses native save dialog instead of blob
download. Removed sample data seeding (seed.rs, UI, command).
2026-02-21 01:34:26 +02:00
Your Name a0bb7d3ea8 chore: add CC0 license file and update readme badge 2026-02-21 01:20:20 +02:00
Your Name 514090eed4 feat: tooltips, two-column timer, font selector, tray behavior, icons, readme
- Custom tooltip directive (WCAG AAA) on every button in the app
- Two-column timer layout with sticky hero and recent entries sidebar
- Timer font selector with 16 monospace Google Fonts and live preview
- UI font selector with 15+ Google Fonts
- Close-to-tray and minimize-to-tray settings
- New app icons (no-glow variants), platform icon set
- Mini timer pop-out window
- Favorites strip with drag-reorder and inline actions
- Comprehensive README with feature documentation
- Remove tracked files that belong in gitignore
2026-02-21 01:15:57 +02:00
Your Name 2608f447de fix: boost text-tertiary contrast for WCAG AAA (7:1) 2026-02-20 18:40:19 +02:00
Your Name 5300ceeb12 feat: auto-backup UI and window close hook 2026-02-20 15:41:38 +02:00
Your Name 875d3ca23b feat: comprehensive export with all tables and auto-backup command 2026-02-20 15:40:02 +02:00
Your Name fa7b70aa61 feat: rounding visibility in invoices and reports 2026-02-20 15:37:20 +02:00
Your Name 773ba1d338 feat: rounding visibility indicators on entry rows 2026-02-20 15:36:07 +02:00
Your Name a41ce44f13 feat: time-of-day heatmap in reports patterns tab 2026-02-20 15:32:20 +02:00
Your Name ace66a6093 feat: project health badges and attention section 2026-02-20 15:32:14 +02:00
Your Name 3fd389da11 feat: weekly comparison indicators and sparklines on dashboard 2026-02-20 15:32:07 +02:00
Your Name 159bb927af feat: receipt thumbnails, lightbox, and file picker for expenses 2026-02-20 15:25:18 +02:00
Your Name 29f29e3368 feat: receipt lightbox component with zoom and focus trap 2026-02-20 15:23:11 +02:00
Your Name 991866f017 feat: global shortcut for quick entry dialog 2026-02-20 15:20:27 +02:00
Your Name d4fa17d315 feat: global quick entry dialog component 2026-02-20 15:18:34 +02:00
Your Name cb1c6c9b5d feat: timesheet row persistence and copy last week 2026-02-20 15:17:01 +02:00
Your Name a3ea37baa1 feat: timesheet row persistence backend 2026-02-20 15:15:50 +02:00
Your Name 54f75c15ed feat: entry template management in settings 2026-02-20 15:10:48 +02:00
Your Name 14c45c67e5 feat: entry template picker and save-as-template in entries view 2026-02-20 15:09:37 +02:00
Your Name 15c8db6572 feat: entry templates pinia store 2026-02-20 15:07:18 +02:00
Your Name dcfcdaf1b0 feat: entry templates CRUD backend 2026-02-20 15:06:50 +02:00
Your Name 6e05ddcf89 feat: cascade delete dialog for clients with dependency counts 2026-02-20 15:02:39 +02:00
Your Name 529461f12c feat: client cascade delete with dependency counts 2026-02-20 15:01:33 +02:00
Your Name fb38d98612 feat: smart timer safety net - save dialog on stop without project 2026-02-20 14:58:02 +02:00
Your Name 115bdd33db feat: timer save dialog for no-project and long-timer scenarios 2026-02-20 14:56:17 +02:00
Your Name 4589fea5ce feat: use batch save for invoice items 2026-02-20 14:55:17 +02:00
Your Name 522efbf230 feat: batch invoice items save with transaction 2026-02-20 14:54:37 +02:00
Your Name 43bd3b9b41 fix: independent try/catch per onboarding detection call 2026-02-20 14:47:26 +02:00
Your Name 35e97cbe7b feat: standardize error handling across all stores 2026-02-20 14:46:56 +02:00
Your Name 25c6c55eb2 feat: use unified error handler in entries store 2026-02-20 14:43:10 +02:00
Your Name 1f21cd61c3 feat: unified error handler with retry for transient errors 2026-02-20 14:42:30 +02:00
Your Name 3968a818c5 feat: persistent notifications toggle in settings 2026-02-20 14:40:50 +02:00
Your Name 85b39e41f6 feat: toast undo button and hover/focus pause 2026-02-20 14:38:34 +02:00
Your Name 24b3caf0da feat: toast auto-dismiss with undo and pause support 2026-02-20 14:38:08 +02:00
Your Name 6ed462853c 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 dea742707f 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 a3c0d43f67 feat: add tour store for guided walkthrough state 2026-02-20 09:36:26 +02:00
Your Name 78026c8bf0 chore: tidy up project structure and normalize formatting 2026-02-19 22:43:14 +02:00
Your Name b8239c6e1b 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 4462d832d2 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 edccc12c34 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 5680194ef4 feat: load invoice templates from JSON files in data/templates directory 2026-02-18 15:12:30 +02:00
Your Name 08d61b40a0 fix: delete invoice_items before invoice to prevent FK constraint failure 2026-02-18 15:07:43 +02:00
Your Name 6e00b8b8a3 fix: make template picker full-screen with fixed positioning so buttons are visible 2026-02-18 15:05:02 +02:00
Your Name f46424141d feat: rewrite InvoicePreview with 15 unique typographic layouts 2026-02-18 14:50:49 +02:00
Your Name fd4cc29d53 feat: rewrite PDF renderer with 15 unique typographic layouts 2026-02-18 14:45:38 +02:00
Your Name f40cc97668 feat: add two-step invoice flow with full-screen template picker 2026-02-18 14:43:55 +02:00
Your Name a313477cd7 feat: update invoicePdf wrapper with new default template ID 2026-02-18 14:41:23 +02:00
Your Name c5380568ca feat: rewrite invoice template configs with design-doc IDs and colors 2026-02-18 14:39:01 +02:00
Your Name 886a2b100e feat: add template_id to Invoice interface and updateInvoiceTemplate action 2026-02-18 14:38:14 +02:00