- Complete subscription tracking with monthly/annual billing cycles
- Dashboard integration with simplified card-based layout
- Website URL fields with clickable links for easy service access
- Comprehensive form validation and error handling
- Database schema with proper website_url column support
- Responsive design with mobile-friendly interface
- Export functionality for subscription data management
- Real-time dashboard summaries showing total costs and service counts
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add getMajorityCurrency() to calculate which currency holds most value
- Include both ETF positions and cash accounts in currency calculation
- Update formatCurrency() to use majority currency symbol by default
- Dashboard now displays in EUR/USD/GBP based on portfolio composition
- Automatic currency switching improves user experience and accuracy
- Maintain backward compatibility with optional currency parameter
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add British Pound (GBP) support to all database schemas and constraints
- Update API validation to accept EUR, USD, and GBP currencies
- Implement centralized currency symbol mapping with getCurrencySymbol()
- Replace all hardcoded currency mappings throughout frontend code
- Add GBP options to all currency dropdown menus in UI forms
- Update README with enhanced feature descriptions and changelog
- Document multi-currency support and historical price tracking features
- Improve project documentation with comprehensive feature overview
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Create price_history table for storing ETF price updates over time
- Add API endpoints for saving/retrieving price history per user
- Auto-load latest prices on app initialization for continuity
- Add "History" button to view price update timeline in modal
- Enhance price update notifications to confirm database saves
- Implement responsive modal design for price history viewing
- Maintain user data isolation for all price history features
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add cash accounts management with CRUD operations and account types
- Implement date-stamped transfer system with deposits/withdrawals
- Add total holdings card combining portfolio and cash values
- Create dedicated "Add Transfer" page in navigation
- Include automatic balance calculations and transaction history
- Add database migrations for cash_accounts and cash_transfers tables
- Integrate cash data with dashboard and real-time updates
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Features:
- New section specifically for holdings over 8 years
- Fixed 33% CGT rate for ultra long-term positions
- Automatic identification of 8+ year old trades
- Comprehensive breakdown showing individual position performance
- Visual cards displaying key metrics:
- Eligible holdings count and total value
- Total gains on 8+ year positions
- CGT liability at 33% rate
- After-tax gains calculation
Calculation Logic:
- Identifies all buy trades that are 8+ years old (≥2920 days)
- Groups trades by ETF symbol for position-level calculations
- Calculates current value vs original cost basis
- Applies 33% tax rate only to positive gains
- Shows holding period for each position in years
- Displays both gross and net (after-tax) performance
Visual Design:
- Distinct blue color scheme to differentiate from other CGT calculations
- Calendar icon (📅) to emphasize long-term nature
- Detailed breakdown cards for each qualifying position
- Color-coded positive/negative performance indicators
- Professional grid layout with responsive design
Display Features:
- Only appears when current prices are updated
- Hidden when no positions qualify (under 8 years)
- Shows exact holding period in years for each position
- Individual CGT liability and after-tax gains per position
- Clear distinction from existing variable-rate CGT system
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove collapse button from sidebar header
- Remove all collapsed state CSS styling
- Remove JavaScript sidebar toggle functionality
- Remove tooltip functionality and data-tooltip attributes
- Restore sidebar to fixed 260px width
- Clean up mobile responsive CSS
- Remove localStorage sidebar state persistence
- Return to original static sidebar behavior
Sidebar now:
- Fixed 260px width (no collapsing)
- Clean header without collapse button
- Standard menu items with icons + text
- Original mobile slide-out behavior maintained
- Simplified codebase without collapse complexity
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Features:
- Icons remain visible and functional when sidebar is collapsed
- Text labels hidden when collapsed, shown when expanded
- Hover tooltips on collapsed icons show full menu names
- Smooth transitions between collapsed and expanded states
- Enhanced visual feedback with hover effects
- Larger, more prominent icons in collapsed state (1.3rem)
- Proper centering and spacing for collapsed icon navigation
Collapsed State (60px):
- Only icons visible, centered and enlarged
- Hover effects with background highlighting
- Animated tooltips appear on hover showing full names
- Fully functional navigation via icon clicks
Expanded State (260px):
- Icons + text labels both visible
- Normal menu item layout with gaps and spacing
- Full sidebar functionality maintained
User Experience:
- Best of both worlds: minimal space usage + clear navigation
- Tooltips provide context in collapsed state
- Smooth 0.2s transitions for professional feel
- State persistence still maintained via localStorage
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Hide all menu icons when sidebar is collapsed
- Hide all menu text, header text, and footer content
- Create completely minimal collapsed state (60px wide)
- Only collapse button remains visible for expanding
- Smooth transitions for all elements
- Clean, distraction-free collapsed sidebar experience
When collapsed, sidebar now shows:
- Only the expand button (›)
- Clean gradient background
- 60px minimal width
- No icons or text bleeding through
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Features:
- Sidebar can now be collapsed to save screen space (260px → 60px)
- Collapse button integrated directly into sidebar header
- Smooth animations for expand/collapse transitions
- State persistence using localStorage (remembers user preference)
- Responsive design - collapse feature disabled on mobile devices
- Visual feedback with hover effects and rotation animation
- Icons remain visible when collapsed for easy navigation
- Seamless integration with existing mobile sidebar toggle
User Experience:
- Click the "‹" button in sidebar to collapse
- Click "›" button to expand back to full width
- User preference is saved and restored on page reload
- Main content area automatically adjusts width
- Smooth 0.3s transition animations for professional feel
- Tooltips show current state (Collapse/Expand sidebar)
Technical Implementation:
- CSS transitions for smooth animations
- JavaScript event handling with localStorage persistence
- Responsive CSS media queries for mobile compatibility
- Graceful degradation on smaller screens
- Clean separation of desktop vs mobile behavior
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Dockerfile with Node.js 18 Alpine base image
- Multi-stage build with production dependencies only
- Non-root user for security
- Health checks and proper signal handling
- Volume mounting for persistent database storage
- Docker Compose configuration for easy deployment
- Environment variable support for production config
- Updated README with comprehensive container instructions
Container features:
- Persistent data storage in /app/data volume
- Production-ready configuration
- Security hardened with non-root user
- Health monitoring built-in
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Installation and setup instructions
- Feature overview and screenshots section
- Default credentials and security info
- API documentation
- Database schema details
- Development and contribution guidelines
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>