v0.4.4 — Profile page fix
What's Fixed
Bug: Profile page salary/fixed expenses reverted on every keystroke (#24)
The Profile page useEffect had form (from Mantine useForm()) in its dependency array. Because Mantine creates a new form object reference on every render, every keystroke triggered a new effect run that fetched the server state and overwrote in-progress edits. Fixed by removing form from the dependency array — the fetch only runs once on mount.
Bug: Profile data corruption in multi-user instances
All users had their budget_profiles row keyed on a hardcoded id='profile'. In a multi-user deployment the ON CONFLICT (id) upsert would overwrite the first user's profile with the second user's data. Fixed: user_id is now the primary key; each user has their own isolated profile row.
Migration Notes
Back up your database before upgrading.
Migration 004-budget-profiles-user-id-primary-key.sql runs automatically on backend startup. It:
- Deletes any orphaned
budget_profilesrows (no matchingusersrecord) - Sets
user_id NOT NULL - Drops the old
id TEXTprimary key - Promotes
user_idas the newPRIMARY KEY
Existing profile data for authenticated users is preserved as long as the user_id FK reference is intact.
To run manually:
psql "$PG_CONNECTION_STRING" < backend/migrations/004-budget-profiles-user-id-primary-key.sqlOther Changes
- Removed redundant Zod re-parse in profile controller (middleware already validates)
- Bumped
backendto v1.0.4,frontendto v0.0.4 - Updated
CHANGELOG.md,README.md,backend/README.md(removed stale scaffolding content),frontend/README.md(removed Vite boilerplate) - Fixed all remaining
PaulAtkins88→solid-logic-studiosURLs in docs - Removed explicit
esModuleInterop: falsefromtsconfig.jsonto fix TypeScript 6.x CI compatibility (the default for ESM modules is alreadyfalse)
Full changelog: https://github.com/solid-logic-studios/bucketwise-planner/blob/main/CHANGELOG.md