Commit Graph

44 Commits

Author SHA1 Message Date
Víctor Falcón 259a9a9712
chore: replace Caddy with Portless for local HTTPS proxy (#258)
## Summary

- Replace Caddy reverse proxy with [Portless](https://portless.sh) for
local HTTPS, eliminating manual cert generation and `/etc/hosts` editing
- Two URL strategies coexist: `composer run dev` uses worktree-aware
URLs (`https://<branch>.dev.whisper.money.localhost`), `whispermoney
start` uses a fixed alias (`https://whisper.money.localhost`)
- Remove Caddyfile, `docker/caddy/` directory, caddy service from
`compose.yaml`, and cert-related `.gitignore` entries
- Simplify `vite.config.ts` by removing caddy cert detection block (Vite
stays on plain HTTP since browsers treat localhost as secure context)
- Overhaul `public/setup.sh` to use `portless trust`, `portless proxy
start`, and `portless alias` instead of SSL cert generation and hosts
file editing
2026-04-02 16:39:44 +01:00
Víctor Falcón c53106289d chore: release v0.1.19 2026-03-17 12:02:31 +01:00
Víctor Falcón d5735b59c7 chore: release v0.1.18 2026-03-12 14:53:26 +01:00
Víctor Falcón dc6f12989e chore: release v0.1.17 2026-03-05 13:34:23 +01:00
Víctor Falcón 3d742677b5
feat(haptics): add haptic feedback to nav items and back buttons (#196)
## Summary

- Installs `web-haptics` via bun
- Triggers `selection` haptic feedback on all navigation items (mobile
bottom bar and desktop sidebar)
- Triggers `light` haptic feedback on all back buttons
(`connect-account-inline.tsx`, `categorize.tsx`)
2026-03-03 22:03:58 +01:00
Víctor Falcón 370e71b254 chore: release v0.1.16 2026-03-01 20:16:11 +00:00
Víctor Falcón 866f90838e
fix(tooling): fix stringWidth error in release-it interactive prompt (#179)
## Why

### Problem
Running `bun release -i patch` (or any interactive `release-it`
invocation) always failed with:

```
ERROR stringWidth is not a function
```

### Root Cause
`@inquirer/core` (used by `inquirer@12`, which `release-it@19` depends
on) bundles its own `wrap-ansi@6.2.0` (CJS). That package calls
`require('string-width')`, but the top-level `string-width` in this
project is v8 — pure ESM. When required via CJS, Node returns a module
namespace object instead of a function, causing the crash when
`release-it` tried to render its interactive confirmation prompt.

## What

- Added `scripts/patch-inquirer-string-width.js`: installs
CJS-compatible versions of `string-width@4`, `strip-ansi@6`,
`ansi-regex@5`, and `is-fullwidth-code-point@3` into
`node_modules/@inquirer/core/node_modules/` so `wrap-ansi@6` resolves
them correctly.
- Added a `postinstall` script to `package.json` so the patch is
re-applied automatically after every `bun install`.

## Verification

### Tests
No automated tests — this is a dev tooling fix. Verified manually by
running `node node_modules/release-it/bin/release-it.js --dry-run` and
confirming the interactive prompt renders without the `stringWidth`
error.

### Manual
1. `bun install` — postinstall script runs and outputs `Patch applied.`
2. `bun release -i patch` — interactive prompt now renders correctly.
2026-03-01 19:53:01 +00:00
Víctor Falcón 4d14e4d2f0
feat(ui): add glowing effect to all card components (#170)
## Why

### Problem
Cards across the app lacked visual interactivity. Adding a
cursor-tracking glowing border effect improves the UI polish and makes
the dashboard and other card-heavy pages feel more dynamic.

## What

### Changes
- Install `motion` package (required for the `animate()` call in the
effect)
- Add `GlowingEffect` component at
`resources/js/components/ui/glowing-effect.tsx` — tracks pointer
position and renders an animated conic gradient border that follows the
cursor
- Update the base `Card` primitive to include `<GlowingEffect>` as the
first child with `spread=40`, `proximity=64`, `inactiveZone=0.01`,
`glow=true` — all consumers inherit the effect automatically
- Remove `overflow-hidden` from the net-worth chart's `<Card>` (it was
clipping the effect) and move it to `<CardContent>` where it's actually
needed to contain the chart

## Verification

### Tests
No new logic was introduced — this is a purely visual enhancement to an
existing UI primitive. Existing tests remain unaffected.

### Manual
Move the cursor near and over any card (dashboard stats, account
balances, net worth chart, cashflow, budgets) to see the gradient border
glow follow the cursor.
2026-03-01 10:56:59 +00:00
Víctor Falcón dc812cc820 chore: release v0.1.14 2026-03-01 09:18:38 +00:00
Víctor Falcón e72f877e65 chore: release v0.1.13 2026-02-25 15:53:47 +01:00
Víctor Falcón 255033999d feat: Update facehash and enable blink 2026-02-24 15:54:49 +01:00
Víctor Falcón 9a12d86063 chore: release v0.1.12 2026-02-24 10:34:53 +01:00
Víctor Falcón 8fb898facb chore: Update release-it 2026-02-24 10:34:45 +01:00
Víctor Falcón da97313575 chore: release v0.1.10 2026-02-20 11:23:34 +01:00
Víctor Falcón 6aa9da3df3 feat: Replace user avatar with Facehash faces (#86)
## Summary
- Replaced the default initials-based avatar fallback with
[Facehash](https://facehash.dev/) — deterministic, unique avatar faces
generated from the user's name
- Same name always produces the same face, no API calls needed
- Fully rounded with `rounded-full` styling

## Preview

![Facehash avatars](https://facehash.dev/og-image.png)

Each user gets a unique, consistent face based on their name — no more
generic initials.

## Changes
- Installed `facehash` package
- Updated `resources/js/components/user-info.tsx` to use `<Facehash>`
instead of `<Avatar>` with initials fallback

## Test plan
- [x] Verify avatar renders correctly in the sidebar footer (desktop)
- [x] Verify avatar renders correctly in the mobile header
- [x] Verify avatar renders correctly in the user dropdown menu
- [x] Confirm the same user always gets the same face
- [x] Check dark mode appearance
2026-02-01 11:33:09 +01:00
Víctor Falcón cfa5bfd728 chore: release v0.1.9 2026-01-28 21:30:14 +01:00
Víctor Falcón f4f25ac48a chore: release v0.1.8 2026-01-25 17:25:05 +01:00
Víctor Falcón 417860bdc5 chore: release v0.1.7 2026-01-21 15:57:29 +01:00
Víctor Falcón f5d09eb247
feat: Add PostHog (#70) 2026-01-20 10:47:59 +01:00
Víctor Falcón 9759113186 chore: release v0.1.6 2026-01-19 19:47:10 +01:00
Víctor Falcón bd835dc841 chore: release v0.1.5 2026-01-17 10:00:59 +01:00
Víctor Falcón e7402ab918 chore: release v0.1.4 2026-01-11 19:13:01 +01:00
Víctor Falcón 9dab6f4835 chore: release v0.1.3 2026-01-09 10:06:44 +01:00
Víctor Falcón bfa30fa4b7 chore: release v0.1.2 2026-01-07 14:34:36 +01:00
Víctor Falcón f45d23deb4 chore: release v0.1.1 2026-01-05 15:10:45 +01:00
Víctor Falcón d592391de8 Push sourcemap to bugsink 2025-12-31 12:56:25 +01:00
Víctor Falcón 8f9f1e809d Config bugsink for React frontend 2025-12-31 12:22:01 +01:00
Víctor Falcón db81c9b888 feat: add version tracking with git tags and changelog
- Add version field to package.json (0.1.0)
- Install release-it for automated releases with conventional changelog
- Create .release-it.json configuration
- Create initial CHANGELOG.md
- Share version via Inertia (reads from package.json)
- Display version in user dropdown menu
2025-12-30 07:22:19 +01:00
Víctor Falcón c5df59c285 feat: add multiple chart view modes for net worth evolution (#37)
## 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
2025-12-30 07:22:19 +01:00
Víctor Falcón 82b94eafe1 Add recharts dependency for dashboard visualizations 2025-12-01 10:30:26 +01:00
Víctor Falcón 5cfe3c81a1 Better input field UX 2025-11-26 11:24:37 +01:00
Víctor Falcón bec18b925b Add account balances 2025-11-15 20:27:18 +01:00
Víctor Falcón 32c3b32804 Context menu to tables 2025-11-15 13:57:10 +01:00
Víctor Falcón e13a19bdde Add some toast notifications 2025-11-11 11:39:28 +00:00
Víctor Falcón 71b8d69020 Migrate IndexDB integration to use Dexie 2025-11-11 08:25:50 +00:00
Víctor Falcón d5ce7a24b4 Automation rules 2025-11-10 12:08:58 +00:00
Víctor Falcón ea9cec184f Bulk actions on transactions 2025-11-10 10:02:28 +00:00
Víctor Falcón faf6d9146e Sync transactions 2025-11-08 14:17:16 +00:00
Víctor Falcón dd0f1380d4 Import CSV 2025-11-08 14:17:11 +00:00
Víctor Falcón 9d95f884a0 Offline First: sync bank, accounts, and categories 2025-11-08 11:29:21 +00:00
Víctor Falcón b9679b9328 Settings: add account view 2025-11-07 21:38:23 +00:00
Víctor Falcón 689666e0f5 Categories 2025-11-07 17:38:57 +00:00
Víctor Falcón 2c0a5bd9a7 Add encryption key management features 2025-11-07 16:10:56 +00:00
Víctor Falcón fb140bbece Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00