- Creates compressed backup before any schema changes
- Backup location: /root/maternal-app/backups/db-schema-sync
- Keeps last 10 backups automatically
- Shows restore command in summary
- Only backs up when changes will be made
- Skips backup in dry-run mode
- Pre-flight analysis to detect changes before backup
Features:
- Automatic cleanup of old backups (keeps 10 most recent)
- Compressed backups (.sql.gz) to save space
- Fallback SQL-based backup if pg_dump fails
- Backup file includes timestamp for easy identification
- Restore instructions displayed in summary
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created sync-database-schema.sh for automated schema sync
- Compares dev and prod databases automatically
- Creates missing tables with full schema
- Adds missing columns to existing tables
- Creates missing indexes
- Detects data type mismatches
- Includes dry-run mode for safety
- Added comprehensive documentation
Features:
- Safe dry-run mode to preview changes
- Verbose mode for detailed output
- Color-coded logging for clarity
- Automatic cleanup of temporary files
- Error handling and validation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
## AI Chat Fixes
- **CRITICAL**: Fixed AI chat responding only with sleep-related info
- Root cause: Current user message was never added to context before sending to AI
- Added user message to context in ai.service.ts before API call
- Fixed conversation ID handling for new conversations (undefined check)
- Fixed children query to properly use FamilyMember join instead of incorrect familyId lookup
- Added FamilyMember entity to AI module imports
- **Context improvements**:
- New conversations now use empty history array (not the current message)
- Properly query user's children across all their families via family membership
## Children Authorization Fix
- **CRITICAL SECURITY**: Fixed authorization bug where all users could see all children
- Root cause: Controllers used `user.sub` but JWT strategy returns `user.userId`
- Changed all children controller methods to use `user.userId` instead of `user.sub`
- Added comprehensive logging to track userId and returned children
- Backend now correctly filters children by family membership
## WebSocket Authentication
- **Enhanced error handling** in families gateway
- Better error messages for connection failures
- Added debug logging for token validation
- More descriptive error emissions to client
- Added userId fallback (checks both payload.userId and payload.sub)
## User Experience
- **Auto-clear cache on logout**:
- Logout now clears localStorage and sessionStorage
- Prevents stale cached data from persisting across sessions
- Users get fresh data on every login without manual cache clearing
## Testing
- Backend correctly returns only user's own children (verified in logs)
- AI chat now responds to all types of questions, not just sleep-related
- WebSocket authentication provides clearer error feedback
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>