Commit graph

68 commits

Author SHA1 Message Date
Le-King-Fu
6037c87846 feat: add inline keyword creation from transaction rows
Tag icon appears next to the category combobox when a category is
assigned. Clicking it expands an inline row pre-filled with the
transaction description, allowing users to add keyword rules without
leaving the Transactions page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 17:15:10 +00:00
Le-King-Fu
3351601ff5 feat: add per-page contextual help via CircleHelp icon
Each page now shows a ? icon next to its title that toggles a collapsible
help card with page-specific tips. Supports EN/FR via i18n, closes on
outside click or X button.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 12:17:28 +00:00
Le-King-Fu
0adfa5fe5e feat: add Settings page with in-app updater support
Add a Settings page with about card (app name + version) and an update
section that uses the Tauri v2 updater plugin to check GitHub Releases,
download signed installers, and relaunch. Includes full state machine
(idle/checking/available/downloading/readyToInstall/installing/error)
with progress bar and retry. Database in %APPDATA% is never touched.

- Add tauri-plugin-updater and tauri-plugin-process (Rust + npm)
- Configure updater endpoint, pubkey placeholder, and passive install mode
- Add signing env vars and updaterJsonPreferNsis to release workflow
- Add Settings nav item, route, and fr/en translations

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 11:47:25 +00:00
Le-King-Fu
41398f0f34 fix: CAD currency, real-time import progress, per-row duplicate control, orphaned sources cleanup, dashboard expenses-only
- Change all currency formatters from EUR/fr-FR to CAD/en-CA
- Add onProgress callback to insertBatch for real-time progress bar updates
- Replace binary skip/include duplicates with per-row checkboxes and type badges (DB/batch)
- Clean up orphaned import_sources when deleting imports with no remaining files
- Filter dashboard recent transactions to show expenses only

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 12:36:12 +00:00
Le-King-Fu
9ff410e9f9 fix: searchable category combobox, import source upsert, and intra-batch duplicate detection
Replace native <select> with a type-to-search CategoryCombobox in both
the filter bar and inline table cells. Fix re-import UNIQUE constraint
error by using INSERT ... ON CONFLICT upsert in createSource(). Detect
duplicate rows within the same import batch using a Set key check.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 12:02:23 +00:00
Le-King-Fu
d6000e191f feat: implement reports page with trends, category, and over-time charts
Add three chart tabs sharing a period selector: monthly income/expenses
area chart, horizontal category bar chart, and stacked category-over-time
bar chart with top 8 + Other grouping.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 01:47:18 +00:00
Le-King-Fu
3506c2c87e feat: add import history panel with delete and cross-source duplicate detection
Make duplicate file detection cross-source by removing sourceId from
existsByHash query. Add import history table below source list with
per-import and delete-all functionality.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 01:29:23 +00:00
Le-King-Fu
ca531262f7 feat: add auto-categorize button and fix keyword word-boundary matching
Replace substring matching (.includes) with \b word-boundary regex so
keywords like "Pay" no longer match "Payment". Add an auto-categorize
button on the transactions page that re-runs keyword matching on
uncategorized transactions and displays the result count.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 00:02:51 +00:00
Le-King-Fu
84eca47afd feat: implement dashboard with KPI cards, category pie chart, and recent transactions
Wire dashboard to real DB data with period selector (month/3m/6m/12m/all),
expense breakdown donut chart by category, and last 10 transactions list.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 23:49:16 +00:00
Le-King-Fu
2e7beea673 fix: show expenses as absolute value and add balance card to transaction summary
Expenses were displayed as negative values, making it hard to reconcile
with individual transactions. Now shown as absolute value since the label
and color already convey the sign. Added a Balance card showing the net total.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 23:30:44 +00:00
Le-King-Fu
a2beb583d1 feat: implement categories page with hierarchical tree, CRUD, and keyword management
Two-panel layout with collapsible category tree (left) and detail/edit panel (right).
Supports create/edit/delete categories, color swatches, parent-child hierarchy,
and keyword management with inline editing and priority badges.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 23:15:31 +00:00
Le-King-Fu
2b9fc49b51 feat: implement transactions page with filters, sorting, and inline editing
Add paginated transaction list with search, category/source/date filters,
sortable columns, inline category dropdown, expandable notes, and summary stats.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 22:54:18 +00:00
Le-King-Fu
273a17c0ac fix: handle duplicate file hash on re-import and improve alert colors
- importedFileService now upserts: if file hash already exists for a
  source (e.g. from a previous failed import), it updates the existing
  record instead of hitting the UNIQUE constraint.
- Replaced Tailwind amber/red/emerald colors with the app's CSS
  variables (--negative, --positive, --accent) for proper contrast
  on the cream background theme.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 22:27:49 +00:00
Le-King-Fu
764fdad6db fix: remove explicit BEGIN/COMMIT to avoid database locked error
sqlx connection pool can dispatch each execute to a different connection,
so BEGIN on one and INSERT on another causes a lock. Sequential inserts
without explicit transaction management avoids this.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 04:13:21 +00:00
Le-King-Fu
88219e657f fix: reload column headers on config change and add YYYYMMDD date format
Headers now refresh live when delimiter, encoding, skipLines, or hasHeader
changes. Added YYYYMMDD compact date format to parser and dropdown.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 04:08:33 +00:00
Le-King-Fu
ce584a15ab fix: use middle dot instead of pipe as raw column separator in preview
Prevents confusion between the display separator and actual CSV delimiters.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 04:00:25 +00:00
Le-King-Fu
49e0bd2c94 feat: implement CSV import wizard with folder-based source detection
Full import pipeline: Rust backend (6 Tauri commands for folder scanning,
file reading, encoding detection, hashing, folder picker), TypeScript
services (DB, import sources, transactions, auto-categorization, user
preferences), utility parsers (French amounts, multi-format dates),
12 React components forming a 7-step wizard (source list, config,
column mapping, preview, duplicate detection, import, report), and
i18n support (FR/EN, ~60 keys each).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 03:38:46 +00:00
Le-King-Fu
801404ca21 Initial project scaffold: Tauri v2 + React + TypeScript + TailwindCSS v4
- Tauri v2 with SQLite plugin and full database schema
- React with react-router-dom, i18n (FR/EN), recharts, lucide-react
- TailwindCSS v4 with custom Bleu/Creme/Terracotta palette
- App shell with sidebar navigation (7 pages)
- Dashboard with summary cards, page stubs for all sections
- Default category configuration (10 top-level categories)
- TypeScript interfaces matching SQLite schema

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 11:05:11 +00:00