Commit Graph

78 Commits

Author SHA1 Message Date
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
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
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
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
Your Name
162acccc2c feat: integrate template picker into invoice create and preview views 2026-02-18 13:35:11 +02:00
Your Name
06dc063125 feat: add business identity settings for invoice branding 2026-02-18 13:34:44 +02:00
Your Name
3cadb42f8b feat: add InvoicePreview.vue with all 7 header styles and 5 table styles 2026-02-18 13:30:27 +02:00
Your Name
673da2aab8 feat: add InvoiceTemplatePicker split-pane component 2026-02-18 13:28:40 +02:00
Your Name
3928904c40 feat: add config-driven jsPDF invoice renderer with all header and table styles 2026-02-18 13:26:11 +02:00
Your Name
f1a5428dd5 feat: add 15 invoice template configs and registry 2026-02-18 13:16:36 +02:00
Your Name
32ee6284da 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
Your Name
04d4220604 feat: add transitions and micro-interactions across all views
- Page transitions with slide-up/fade on route changes (App.vue)
- NavRail sliding active indicator with spring-like easing
- List enter/leave/move animations on Entries, Projects, Clients, Timer
- Modal enter/leave transitions with scale+fade on all dialogs
- Dropdown transitions with overshoot on all select/picker components
- Button feedback (scale on hover/active), card hover lift effects
- Timer pulse on start, glow on stop, floating empty state icons
- Content fade-in on Dashboard, Reports, Calendar, Timesheet
- Tag chip enter/leave animations in AppTagInput
- Progress bar smooth width transitions
- Implementation plan document
2026-02-18 11:33:58 +02:00
Your Name
bd0dbaf91d feat: add animation CSS classes, keyframes, and reduced-motion support 2026-02-18 11:22:32 +02:00
Your Name
5630751adc feat: install @vueuse/motion and create spring presets 2026-02-18 11:19:52 +02:00
Your Name
c7b9822e48 feat: add daily/weekly goals, streaks, and time rounding
Settings Timer tab now has daily/weekly goal hour inputs. Dashboard
shows goal progress bars and streak counter. Settings Billing tab
has rounding toggle with increment and method selectors. New
rounding.ts utility for nearest/up/down time rounding.
2026-02-18 10:51:56 +02:00
Your Name
87b1853f39 feat: add budget progress indicators to Projects and Dashboard
Project edit dialog includes budget hours and amount fields. Project
cards show progress bars with color-coded status. Dashboard displays
budget alerts section for projects exceeding 75% of budget.
2026-02-18 10:51:47 +02:00
Your Name
787f8bbacf feat: integrate tags in Timer and Entries views
Timer shows tag selector below description, saves tags on stop.
Entries table displays tag chips per row with color coding.
Tags loaded from store on mount.
2026-02-18 10:51:39 +02:00
Your Name
7e7e04e4d4 feat: add data import from CSV and JSON
Import utility with CSV parser, Toggl/Clockify format mapping, and
generic CSV column mapping. Settings Data tab has import UI with
file picker, format selector, preview table, and import execution.
2026-02-18 10:46:33 +02:00
Your Name
f6955d1bd7 feat: enhance floating mini timer with controls and pop-out button
MiniTimer shows project color dot, name, elapsed time, stop button,
and expand-to-main button. Timer.vue has pop-out button when running.
2026-02-18 10:46:25 +02:00
Your Name
af95a53c4e feat: add global keyboard shortcuts for timer toggle and show app
Register CmdOrCtrl+Shift+T (toggle timer) and CmdOrCtrl+Shift+Z
(show app) via tauri-plugin-global-shortcut. Shortcut keys are
configurable in Settings Timer tab. Shortcuts re-register on change.
2026-02-18 10:46:18 +02:00
Your Name
e143b069db feat: add profitability tab and favorites strip
Reports view now has Hours/Profitability tabs with per-project revenue
table. Timer view shows favorites strip for quick project selection
and a Save as Favorite button next to the description input.
2026-02-18 10:46:10 +02:00
Your Name
28d199bddc feat: add Calendar, Timesheet, and MiniTimer views
Calendar shows weekly time-block layout with hour rows, entry positioning,
current time indicator, and week navigation. Timesheet provides a weekly
grid with project/task rows, day columns, totals, and add-row functionality.
MiniTimer is a minimal always-on-top timer display for the floating window.
2026-02-18 10:39:08 +02:00
Your Name
b650e981fc feat: add AppTagInput multi-select tag component 2026-02-18 10:35:18 +02:00
Your Name
32d22bf877 feat: add markdown rendering for entry descriptions 2026-02-18 10:35:12 +02:00
Your Name
ba185a1ac9 feat: add duplicate, copy previous day/week, and repeat entry 2026-02-18 10:35:06 +02:00
Your Name
318570295f feat: add theme customization with accent colors and light mode 2026-02-18 10:34:59 +02:00
Your Name
1ee4562647 feat: add favorites table, CRUD commands, and Pinia store 2026-02-18 02:02:57 +02:00
Your Name
85c20247f5 feat: add project budgets and rounding override columns 2026-02-18 02:02:13 +02:00
Your Name
26f1b19dde feat: add tags table, CRUD commands, and Pinia store 2026-02-18 02:01:04 +02:00
Your Name
afa8bce2c9 fix: dynamic currency symbols and integrated datetime picker
- Replace all hardcoded prefix="$" with :prefix="getCurrencySymbol()"
  in Settings, Projects, and Invoices views
- Replace hardcoded ($) labels with dynamic currency symbol
- Extend AppDatePicker with showTime prop + hour/minute v-models
  for integrated date+time selection
- Simplify Entries.vue to use single AppDatePicker with showTime
  instead of separate hour/minute inputs
2026-02-17 23:53:45 +02:00
Your Name
5ad901ca4f fix: add viewport margin to all modal dialogs 2026-02-17 23:41:59 +02:00
Your Name
137be610f8 feat: replace native datetime-local with custom date picker + time inputs 2026-02-17 23:41:24 +02:00
Your Name
519bdabe61 feat: replace all hardcoded en-US and $ formatting with locale-aware helpers 2026-02-17 23:39:31 +02:00
Your Name
fe0b20f247 feat: replace native number inputs with AppNumberInput across all views 2026-02-17 23:36:02 +02:00
Your Name
8112fe8fd6 feat: add locale and currency settings with searchable dropdowns 2026-02-17 23:35:27 +02:00
Your Name
a13dff96c8 fix: apply default hourly rate from settings when creating new projects 2026-02-17 23:35:24 +02:00