## Summary - Add four view modes for net worth and account balance charts: - **Stacked Accounts**: existing stacked bar chart showing balances by account - **Line**: net worth line chart with linear/log scale toggle - **Change**: bar chart showing MoM%, YoY%, Rolling 12M changes - **Waterfall**: bridge chart showing Start -> Change -> End transition - Add Vitest for frontend unit testing with 52 tests covering all calculation functions - Proper sign handling for liabilities (credit cards and loans subtract from net worth) - Log scale disabled with warning when net worth includes zero or negative values - Shared components and logic between dashboard and account detail charts ## New Files - `vitest.config.ts` - Vitest configuration - `resources/js/lib/chart-calculations.ts` - Pure computation functions - `resources/js/lib/chart-calculations.test.ts` - 52 unit tests - `resources/js/hooks/use-chart-views.ts` - Shared chart view state hook - `resources/js/components/charts/` - Reusable chart components ## Test plan - [x] Dashboard net worth chart shows view toggle and all four views work - [ ] Account detail page chart shows view toggle and three views work (no stacked) - [x] Line chart scale toggle works (log disabled with warning when applicable) - [x] Change chart series toggle (MoM, YoY, 12M EUR, 12M %) works - [x] Waterfall chart month selector works - [x] All 52 unit tests pass (`bun run test`) - [x] Build succeeds (`bun run build`) - [x] Dark mode styling correct |
||
|---|---|---|
| .cursor | ||
| .github/workflows | ||
| app | ||
| bootstrap | ||
| config | ||
| database | ||
| docker | ||
| public | ||
| resources | ||
| routes | ||
| src/lib/crypto | ||
| storage | ||
| tests | ||
| traefik | ||
| .editorconfig | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| .mcp.json | ||
| .php-cs-fixer.dist.php | ||
| .prettierignore | ||
| .prettierrc | ||
| CLAUDE.md | ||
| Dockerfile | ||
| LICENSE.md | ||
| README.md | ||
| artisan | ||
| boost.json | ||
| bun.lock | ||
| components.json | ||
| compose.yaml | ||
| composer.json | ||
| composer.lock | ||
| eslint.config.js | ||
| package-lock.json | ||
| package.json | ||
| phpunit.xml | ||
| tsconfig.json | ||
| vite.config.ts | ||
| vitest.config.ts | ||
| vitest.setup.ts | ||
README.md
Whisper Money
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
- Clone the repository:
git clone https://github.com/whisper-money/whisper-money.git
cd whisper_money
- Copy the environment file:
cp .env.example .env
- Start the Docker services:
docker compose up -d
- Install dependencies and setup the application:
composer setup
- 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.