Understand your personal finances. Forget Excels, try Whisper Money.
Go to file
Víctor Falcón 4b5d65ba03
feat: add transaction labels feature (#24)
## Summary

Add a labeling system for transactions that differs from categories in
that labels are ephemeral and created on-the-fly when assigned (no
pre-creation required). A transaction can have multiple labels
(many-to-many relationship), and labels can be used for filtering in the
transaction table and as actions in automation rules.

<img width="1372" height="484" alt="image"
src="https://github.com/user-attachments/assets/fd342b11-dafb-44ed-b818-578e1ea856e6"
/>
<img width="1373" height="613" alt="image"
src="https://github.com/user-attachments/assets/aa5cfb8b-50b7-4101-a872-54904924f234"
/>
<img width="1035" height="594" alt="image"
src="https://github.com/user-attachments/assets/ffa946b2-b01f-496b-8cb8-ab55ab5b79ed"
/>


## Changes

### Backend (Laravel)

- Add `labels` table with user_id, name, color, and soft deletes
- Add `label_transaction` pivot table for transaction-label many-to-many
- Add `automation_rule_labels` pivot table for automation rule-label
many-to-many
- Create Label model with relationships to User, Transaction, and
AutomationRule
- Add LabelController for CRUD operations (returns JSON for on-the-fly
creation)
- Add LabelSyncController for frontend sync
- Add LabelPolicy for authorization
- Update TransactionController to handle bulk label updates
- Update AutomationRuleController to handle label actions
- Add validation for label_ids in transactions and automation rules

### Frontend (React/TypeScript)

- Add Label type and color utilities
- Add labels table to IndexedDB (Dexie version 6)
- Create label-sync service with findOrCreate functionality
- Create LabelCombobox component with multi-select and create-on-type
- Add labels column to transactions table
- Add labels filter to transaction filters
- Add bulk label assignment in bulk actions bar
- Add labels action in create automation rule dialog
- Update rule engine to include labels in evaluation results

## Testing

- 11 feature tests for label CRUD
- 3 tests for label sync
- All 241 feature tests pass

## Screenshots

N/A - UI changes can be reviewed in browser
2025-12-13 13:02:19 +01:00
.cursor feat(.cursor): Add whisper-money rule configuration 2025-12-01 15:19:41 +01:00
.github/workflows undo deploy ci check 2025-12-08 18:31:03 +01:00
app feat: add transaction labels feature (#24) 2025-12-13 13:02:19 +01:00
bootstrap User Onboarding Flow (#23) 2025-12-12 13:06:08 +01:00
config User Onboarding Flow (#23) 2025-12-12 13:06:08 +01:00
database feat: add transaction labels feature (#24) 2025-12-13 13:02:19 +01:00
docker fix: increase nginx buffer sizes 2025-12-08 19:36:24 +01:00
public New icons for PWA 2025-12-11 16:46:37 +01:00
resources feat: add transaction labels feature (#24) 2025-12-13 13:02:19 +01:00
routes feat: add transaction labels feature (#24) 2025-12-13 13:02:19 +01:00
src/lib/crypto E2E Encryption 2025-11-07 14:21:25 +00:00
storage Import CSV 2025-11-08 14:17:11 +00:00
tests feat: add transaction labels feature (#24) 2025-12-13 13:02:19 +01:00
traefik feat(traefik): Add secure headers middleware to WhisperMoney service 2025-11-14 09:17:09 +01:00
.editorconfig Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
.env.example User Onboarding Flow (#23) 2025-12-12 13:06:08 +01:00
.gitattributes Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
.gitignore Config traefik to serve the web from whispermoney.dev 2025-11-14 09:09:19 +01:00
.php-cs-fixer.dist.php Execute browser tests on CI (#10) 2025-12-03 16:26:30 +01:00
.prettierignore Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
.prettierrc Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
Dockerfile feat(Docker): Optimize build process by removing unnecessary steps and adjusting environment variables 2025-11-24 18:53:24 +01:00
LICENSE.md Add Creative Commons license 2025-11-26 17:07:20 +01:00
README.md Update README: reformat community section and fix repository URL 2025-12-12 19:33:16 +01:00
artisan Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
boost.json Install Laravel Boost 2025-11-07 13:55:11 +00:00
bun.lock Fix CI: Update bun.lock and fix linting errors 2025-12-01 15:16:06 +01:00
components.json Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
compose.yaml Config traefik to serve the web from whispermoney.dev 2025-11-14 09:09:19 +01:00
composer.json Set --runtime=bun parameter on inertia:start-ssr command 2025-12-08 19:04:44 +01:00
composer.lock Subscriptions (#15) 2025-12-06 19:09:56 +01:00
eslint.config.js Y3:0 2025-11-26 12:01:49 +01:00
package-lock.json Add recharts dependency for dashboard visualizations 2025-12-01 10:30:26 +01:00
package.json Add recharts dependency for dashboard visualizations 2025-12-01 10:30:26 +01:00
phpunit.xml Execute browser tests on CI (#10) 2025-12-03 16:26:30 +01:00
tsconfig.json Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00
vite.config.ts Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00

README.md

Whisper Money

Whisper Money

CC BY-NC 4.0

The most secure way to understand your finances.

Whisper Money is a privacy-first personal finance application that helps you track, categorize, and understand your spending—all while keeping your financial data encrypted and secure.

💬 Join our Community: Whether you're a user looking for help or a developer wanting to contribute, we'd love to have you in our Discord server! Share feedback, ask questions, discuss new features, or just hang out with fellow privacy enthusiasts.

Features

  • 🔐 End-to-end encryption — Your financial data stays private
  • 🏦 Bank account management — Track multiple accounts in one place
  • 📊 Transaction categorization — Automatic and manual categorization
  • 🤖 Automation rules — Set up rules to auto-categorize transactions
  • 📈 Financial insights — Understand your spending patterns

Tech Stack

  • Backend: Laravel 12, PHP 8.4
  • Frontend: React 19, Inertia.js v2, TypeScript
  • Styling: Tailwind CSS v4
  • Database: MySQL
  • Cache/Queue: Redis
  • Testing: Pest v4

Running Locally

Prerequisites

  • Docker & Docker Compose
  • Composer
  • Node.js / Bun

Setup

  1. Clone the repository:
git clone https://github.com/whisper-money/whisper-money.git
cd whisper_money
  1. Copy the environment file:
cp .env.example .env
  1. Start the Docker services:
docker compose up -d
  1. Install dependencies and setup the application:
composer setup
  1. Start the development server:
composer run dev

This will concurrently start:

  • PHP development server
  • Queue worker
  • Log viewer (Pail)
  • Vite dev server

The application will be available at https://whispermoney.test.

License

This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.