Understand your personal finances. Forget Excels, try Whisper Money.
Go to file
Víctor Falcón c433088806
User Onboarding Flow (#23)
## Summary

Implements a complete user onboarding flow that guides new users through
setting up their account after registration.

## Features

- **Step-by-step wizard UI** with progress indicator and smooth
animations
- **E2E Encryption setup** with password strength indicator and
explanation of how encryption works
- **Account creation** supporting all account types (checking, savings,
credit card, investment, pension)
- **Category customization** with explanation of category types
(expenses, income, transfer)
- **Smart rules explanation** covering why there is no AI
auto-categorization (privacy & E2EE)
- **Transaction/balance import** based on account type
- **Sync integration** to ensure data consistency with backend

## Flow Diagram

```mermaid
flowchart TD
    A[User Registration] --> B[Welcome]

    B --> E[Encryption Explained]
    
    E --> C{Has encryption key?}

    C -->|No|F[Encryption Setup]
    C -->|Yes|G{Has Existing Accounts?}
    G -->|Yes| H[Show Existing Accounts]
    G -->|No| I[Create First Account]
    
    H --> J[Continue]
    I --> K{Account Type?}
    
    K -->|Checking/Savings/Credit Card| L[Import Transactions]
    K -->|Investment/Pension| M[Import Balances]
    
    J --> N[Category Types Explanation]
    L --> N
    M --> N
    
    N --> O[Customize Categories]
    O --> P[Smart Rules Explanation]
    P --> Q[More Accounts?]
    
    Q -->|Add More| I
    Q -->|Finish| R[Complete]
    
    R --> S[Redirect to Dashboard]
    S --> T{Subscribed?}
    T -->|No| U[Subscribe Page]
    T -->|Yes| V[Dashboard]
```

## Technical Changes

### Backend
- Added `onboarded_at` field to users table with migration
- Created `EnsureOnboardingComplete` middleware for redirect logic
- Created `OnboardingController` with index and complete actions
- Custom `RegisterResponse` to redirect new users to onboarding
- Updated `AccountController::store` to return JSON for fetch requests

### Frontend
- `OnboardingLayout` - fullscreen layout with step progress
- `useOnboardingState` hook - manages step navigation and state
- 12 step components for each onboarding screen
- Backend sync after account creation and imports

### Tests
- Feature tests for onboarding middleware
- Updated existing tests to use `onboarded()` factory state
2025-12-12 13:06:08 +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 User Onboarding Flow (#23) 2025-12-12 13:06:08 +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 User Onboarding Flow (#23) 2025-12-12 13:06:08 +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 User Onboarding Flow (#23) 2025-12-12 13:06:08 +01:00
routes User Onboarding Flow (#23) 2025-12-12 13:06:08 +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 User Onboarding Flow (#23) 2025-12-12 13:06:08 +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 Remove commented Product Hunt badge from README 2025-12-02 09:24:03 +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.

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/your-username/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.