137 Commits

Author SHA1 Message Date
lashman e6269ea554 fix window controls not responding to clicks 2026-03-13 00:35:04 +02:00
lashman 2753039e0c add disclosure note to readme 2026-03-13 00:07:02 +02:00
lashman 88b487d443 linux appimage build with docker, egl fallback, and webkitgtk fixes 2026-02-27 13:26:04 +02:00
lashman 31e26a9aa4 auto-detect date format (DD/MM vs MM/DD) in CSV imports
Scans all date values in imported CSVs to determine whether the file
uses DD/MM/YYYY or MM/DD/YYYY format. When the format is ambiguous
(all day and month values are <= 12), shows an inline dropdown for the
user to choose. Bump version to 1.0.2.
2026-02-21 16:56:27 +02:00
lashman b1a0c03988 close button and CSV import parsing for Clockify/Harvest
Close button did nothing when "close to tray" was disabled - the
onCloseRequested handler lacked an explicit destroy call for the
non-tray path.

Clockify CSV import threw RangeError because locale-dependent date
formats (MM/DD/YYYY, DD.MM.YYYY, 12h time) were passed straight
to the Date constructor. Added flexible date/time parsers that
handle all Clockify export variants without relying on Date parsing.

Added dedicated Clockify mapper that prefers Duration (decimal)
column and a new Harvest CSV importer (date + decimal hours, no
start/end times).

Bump version to 1.0.1.
2026-02-21 14:56:53 +02:00
lashman 7486cbdbb0 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
lashman 0a5751f128 add CC0 license file and update readme badge 2026-02-21 01:20:20 +02:00
lashman 7cfd008335 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
- README with feature documentation
- Remove tracked files that belong in gitignore
2026-02-21 01:15:57 +02:00
lashman 4cd0c04309 boost text-tertiary contrast for WCAG AAA (7:1) 2026-02-20 18:40:19 +02:00
lashman 298e050170 auto-backup UI and window close hook 2026-02-20 15:41:38 +02:00
lashman 5a4fa3ffa5 export with all tables and auto-backup command 2026-02-20 15:40:02 +02:00
lashman 788bf3d619 rounding visibility in invoices and reports 2026-02-20 15:37:20 +02:00
lashman 35ec270e1d rounding visibility indicators on entry rows 2026-02-20 15:36:07 +02:00
lashman 5a540261c8 time-of-day heatmap in reports patterns tab 2026-02-20 15:32:20 +02:00
lashman 3a58dd9476 project health badges and attention section 2026-02-20 15:32:14 +02:00
lashman 54b85f2a75 weekly comparison indicators and sparklines on dashboard 2026-02-20 15:32:07 +02:00
lashman 7bfe0915df receipt thumbnails, lightbox, and file picker for expenses 2026-02-20 15:25:18 +02:00
lashman 143009651d receipt lightbox component with zoom and focus trap 2026-02-20 15:23:11 +02:00
lashman d16d6f3cd0 global shortcut for quick entry dialog 2026-02-20 15:20:27 +02:00
lashman 3902f3bd61 global quick entry dialog component 2026-02-20 15:18:34 +02:00
lashman 5fa4a9521f timesheet row persistence and copy last week 2026-02-20 15:17:01 +02:00
lashman a5b2e7d746 timesheet row persistence backend 2026-02-20 15:15:50 +02:00
lashman 2c31f94e8f entry template management in settings 2026-02-20 15:10:48 +02:00
lashman 5eef5accf0 entry template picker and save-as-template in entries view 2026-02-20 15:09:37 +02:00
lashman 0a18c4cf2e entry templates pinia store 2026-02-20 15:07:18 +02:00
lashman 5fff21fc96 entry templates CRUD backend 2026-02-20 15:06:50 +02:00
lashman 115b22ca47 cascade delete dialog for clients with dependency counts 2026-02-20 15:02:39 +02:00
lashman e2d1b0aa4a client cascade delete with dependency counts 2026-02-20 15:01:33 +02:00
lashman a6d1c6fba5 smart timer safety net - save dialog on stop without project 2026-02-20 14:58:02 +02:00
lashman 68826529e4 timer save dialog for no-project and long-timer scenarios 2026-02-20 14:56:17 +02:00
lashman 0ff3260e8d use batch save for invoice items 2026-02-20 14:55:17 +02:00
lashman 882fee1209 batch invoice items save with transaction 2026-02-20 14:54:37 +02:00
lashman ad8184bb65 independent try/catch per onboarding detection call 2026-02-20 14:47:26 +02:00
lashman 79211cac83 standardize error handling across all stores 2026-02-20 14:46:56 +02:00
lashman c6e241ba09 use unified error handler in entries store 2026-02-20 14:43:10 +02:00
lashman 7bb62ee6aa unified error handler with retry for transient errors 2026-02-20 14:42:30 +02:00
lashman 039cfd518a persistent notifications toggle in settings 2026-02-20 14:40:50 +02:00
lashman 4e1ca8fd27 toast undo button and hover/focus pause 2026-02-20 14:38:34 +02:00
lashman 98b78106d2 toast auto-dismiss with undo and pause support 2026-02-20 14:38:08 +02:00
lashman 0f529793a3 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
lashman 5713a9d50f 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
lashman c187c67b06 add tour store for guided walkthrough state 2026-02-20 09:36:26 +02:00
lashman 9f44a1a697 tidy up project structure and normalize formatting 2026-02-19 22:43:14 +02:00
lashman 99be86a860 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
lashman 813411078d 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
lashman ffbbfe0df1 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
lashman b722ee684c load invoice templates from JSON files in data/templates directory 2026-02-18 15:12:30 +02:00
lashman 32fc45f111 delete invoice_items before invoice to prevent FK constraint failure 2026-02-18 15:07:43 +02:00
lashman aa031f6103 make template picker full-screen with fixed positioning so buttons are visible 2026-02-18 15:05:02 +02:00
lashman 391c4cf49c rewrite InvoicePreview with 15 unique typographic layouts 2026-02-18 14:50:49 +02:00
lashman e8a57397c0 rewrite PDF renderer with 15 unique typographic layouts 2026-02-18 14:45:38 +02:00
lashman 85aec09d1a add two-step invoice flow with full-screen template picker 2026-02-18 14:43:55 +02:00
lashman b78c796d55 update invoicePdf wrapper with new default template ID 2026-02-18 14:41:23 +02:00
lashman 2278534afe rewrite invoice template configs with design-doc IDs and colors 2026-02-18 14:39:01 +02:00
lashman 6320b6d13c add template_id to Invoice interface and updateInvoiceTemplate action 2026-02-18 14:38:14 +02:00
lashman a0f4815103 add template_id column to invoices table and update_invoice_template command 2026-02-18 14:37:26 +02:00
lashman dfbeb1a57f add invoice templates v2 implementation plan 2026-02-18 14:32:38 +02:00
lashman f1121b5a02 add invoice templates v2 complete redesign design doc 2026-02-18 14:28:41 +02:00
lashman 098751b741 integrate template picker into invoice create and preview views 2026-02-18 13:35:11 +02:00
lashman 2aa3b2950b add business identity settings for invoice branding 2026-02-18 13:34:44 +02:00
lashman c63e8577d6 add InvoicePreview.vue with all 7 header styles and 5 table styles 2026-02-18 13:30:27 +02:00
lashman e35077aeb3 add InvoiceTemplatePicker split-pane component 2026-02-18 13:28:40 +02:00
lashman bd9166a2f5 add config-driven jsPDF invoice renderer with all header and table styles 2026-02-18 13:26:11 +02:00
lashman 1ca757f8e1 add 15 invoice template configs and registry 2026-02-18 13:16:36 +02:00
lashman f7e4a29513 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
lashman 755ab470b1 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
lashman 69130dcd86 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
lashman bb40e381da 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
lashman 71f1702340 add animation CSS classes, keyframes, and reduced-motion support 2026-02-18 11:22:32 +02:00
lashman 2a60f71c56 install @vueuse/motion and create spring presets 2026-02-18 11:19:52 +02:00
lashman d3a36b76c9 add motion system design for animations and micro-interactions 2026-02-18 11:07:57 +02:00
lashman 1e2d775e63 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
lashman 731ed0219c 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
lashman 13c2e04d70 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
lashman 8d910495f3 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
lashman 03080e3d6b 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
lashman 21c98f1cb2 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
lashman c28c7371bb 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
lashman c0cfd8848a 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
lashman ca57ff2d6d add AppTagInput multi-select tag component 2026-02-18 10:35:18 +02:00
lashman be48a44a6a add markdown rendering for entry descriptions 2026-02-18 10:35:12 +02:00
lashman 997e4b2a80 add duplicate, copy previous day/week, and repeat entry 2026-02-18 10:35:06 +02:00
lashman 3b7b02abaf add theme customization with accent colors and light mode 2026-02-18 10:34:59 +02:00
lashman 5c0dccf133 add global-shortcut plugin and mini timer window commands 2026-02-18 02:06:07 +02:00
lashman f4d9a70e2e add goals, profitability, timesheet, and import commands 2026-02-18 02:04:10 +02:00
lashman 28ec9e66f7 add favorites table, CRUD commands, and Pinia store 2026-02-18 02:02:57 +02:00
lashman 1a4f2421f8 add project budgets and rounding override columns 2026-02-18 02:02:13 +02:00
lashman 7416e4b49a add tags table, CRUD commands, and Pinia store 2026-02-18 02:01:04 +02:00
lashman 0d792ef880 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
lashman 242a97baa9 add viewport margin to all modal dialogs 2026-02-17 23:41:59 +02:00
lashman 6b05f5112a replace native datetime-local with custom date picker + time inputs 2026-02-17 23:41:24 +02:00
lashman 2763ea4cd7 replace all hardcoded en-US and $ formatting with locale-aware helpers 2026-02-17 23:39:31 +02:00
lashman 235499e50c replace native number inputs with AppNumberInput across all views 2026-02-17 23:36:02 +02:00
lashman 6f2de22268 add locale and currency settings with searchable dropdowns 2026-02-17 23:35:27 +02:00
lashman c74c0c33f5 apply default hourly rate from settings when creating new projects 2026-02-17 23:35:24 +02:00
lashman 646b22a583 add AppNumberInput component with press-and-hold repeat 2026-02-17 23:33:13 +02:00
lashman ff06c59999 add searchable prop to AppSelect for filtering long option lists 2026-02-17 23:33:11 +02:00
lashman e8051d9799 add locale utility with 140+ locales and 120+ currencies 2026-02-17 23:31:04 +02:00
lashman 6b3a514ad8 add UI improvements batch implementation plan 2026-02-17 23:22:40 +02:00
lashman 524d245f0e add UI improvements batch design (locale, datetime picker, number input, etc.) 2026-02-17 23:17:00 +02:00
lashman d536baf3b8 add Clients view with card grid, dialogs, and billing details 2026-02-17 22:57:08 +02:00
lashman d9a5422bff add Client billing fields to store, /clients route, and reorder NavRail 2026-02-17 22:54:31 +02:00
lashman 0337b746ae add client billing fields to database and Rust backend 2026-02-17 22:52:51 +02:00
lashman 759bc44897 add Clients view and NavRail reorg implementation plan 2026-02-17 22:48:22 +02:00
lashman c5d9fb6108 add Clients view and NavRail reorg design 2026-02-17 22:44:50 +02:00
lashman 536906d442 make custom dropdowns and date pickers respect UI zoom setting
Teleported panels read zoom from #app and apply it to their own style,
with position coordinates divided by the zoom factor so they align
correctly with the zoomed trigger elements.
2026-02-17 22:35:42 +02:00
lashman d9c161dfca replace all native selects and date inputs with custom components 2026-02-17 22:27:51 +02:00
lashman f615954f05 add AppDatePicker custom calendar component 2026-02-17 22:24:47 +02:00
lashman 3349c31ae0 add AppSelect custom dropdown component 2026-02-17 22:22:43 +02:00
lashman 37f306d896 add custom dropdowns and date pickers implementation plan 2026-02-17 22:17:42 +02:00
lashman 3d28392d60 add custom dropdowns and date pickers design 2026-02-17 22:15:10 +02:00
lashman f337c50ad7 upgrade typography - Plus Jakarta Sans headings, JetBrains Mono data, 14px base
Heading font: Plus Jakarta Sans (500/600/700) for all h1-h3, stat values, dialog titles, timer display, and wordmark.
Body font: Inter (400/500/600/700) unchanged but base bumped from 13px to 14px.
Mono font: JetBrains Mono replaces IBM Plex Mono for code and tabular data.
2026-02-17 22:06:48 +02:00
lashman 0264b1d873 bump border-radius globally - rounded to rounded-lg, rounded-lg to rounded-xl 2026-02-17 21:56:48 +02:00
lashman 7180a0f9cd redesign Settings with left sidebar tabs per Apple HIG
Four tabs (General, Timer, Billing, Data) with icon + label sidebar,
amber active indicator, auto-save on change, progressive disclosure
for timer settings, and danger zone isolated within Data tab.
2026-02-17 21:49:48 +02:00
lashman cc4339e223 add Settings sidebar tabs design 2026-02-17 21:48:28 +02:00
lashman bff3ff94f0 reorganize Settings per Apple HIG - auto-save, progressive disclosure, danger zone 2026-02-17 21:43:04 +02:00
lashman 66b430b9b0 window dragging - use startDragging() API instead of data attribute 2026-02-17 21:36:30 +02:00
lashman 7f6bf16c86 persist window position and size between runs 2026-02-17 21:33:32 +02:00
lashman f5a4f081ef portable storage - data directory next to exe 2026-02-17 21:33:26 +02:00
lashman 84922bbf51 zoom initialization and toast container in App.vue 2026-02-17 21:32:15 +02:00
lashman 50fc590d0a redesign Settings - amber save, UI zoom, toasts 2026-02-17 21:31:54 +02:00
lashman 1e7accbf92 redesign Invoices - amber tabs and totals, rich empty state 2026-02-17 21:31:05 +02:00
lashman 8b16d45350 redesign Reports - amber actions and stats, toast notifications 2026-02-17 21:29:53 +02:00
lashman 53e2ea506d redesign Entries - filter container, amber actions, rich empty state 2026-02-17 21:28:42 +02:00
lashman 8a1d266520 redesign Projects - amber button, color presets, rich empty state 2026-02-17 21:27:49 +02:00
lashman 85ae108498 redesign Timer - amber Start, colon pulse, toast 2026-02-17 21:26:33 +02:00
lashman d32897700b redesign Dashboard - greeting, amber stats, rich empty state 2026-02-17 21:25:52 +02:00
lashman 36556100e5 amber wordmark and NavRail active indicator 2026-02-17 21:25:08 +02:00
lashman 38295a4e25 add toast notification system 2026-02-17 21:25:02 +02:00
lashman ab9cd15eb3 overhaul design tokens - charcoal palette + amber accent 2026-02-17 21:24:15 +02:00
lashman bf181f37e0 add UI polish implementation plan (14 tasks) 2026-02-17 21:21:16 +02:00
lashman 581533a82b add UI polish & UX upgrade design doc
Covers amber accent system, charcoal background lift, button hierarchy,
toast notifications, rich empty states, UI zoom, portable storage,
and window state persistence.
2026-02-17 21:15:41 +02:00
lashman 4f8c2acb72 syntax error in Invoices.vue 2026-02-17 18:44:02 +02:00
lashman 85d22da707 add Dashboard view 2026-02-17 18:30:01 +02:00
lashman 914cf7d61e initialize Tauri backend with SQLite database 2026-02-17 18:03:12 +02:00
lashman 1baed5da21 initialize Tauri v2 + Vue 3 project 2026-02-17 17:46:39 +02:00
lashman 6fbb0df690 Initial commit 2026-02-17 17:37:20 +02:00

Diff Content Not Available