Split monolithic app.rs into focused, reusable components:
- Sidebar component for user info, navigation and calendar management
- CalendarListItem component for individual calendar items with color picker
- RouteHandler component to eliminate duplicated routing logic
- Reduced app.rs from 645 to 338 lines (47% reduction)
- Improved separation of concerns and maintainability
- Clean props-based component communication
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added complete calendar deletion functionality including:
- Context menu component with right-click activation on calendar items
- Backend API endpoint for calendar deletion with CalDAV DELETE method
- Frontend integration with calendar list refresh after deletion
- Fixed URL construction to prevent double /dav.php path issue
- Added proper error handling and user feedback
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add full end-to-end calendar creation feature including:
- Create Calendar button in sidebar footer
- Modal form with name, description, and color picker (16 predefined colors in 4x4 grid)
- Form validation and error handling with loading states
- Backend API endpoint for calendar creation with authentication
- CalDAV MKCALENDAR protocol implementation with proper XML generation
- Real-time calendar list refresh after successful creation
- Responsive design for mobile and desktop
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Backend enhancements:
- Add calendar_path field to CalendarEvent for color mapping
- Generate consistent colors for calendars using path-based hashing
- Update CalDAV parsing to associate events with their calendar paths
- Add 16-color palette with hash-based assignment algorithm
Frontend features:
- Interactive color picker with 4x4 grid of selectable colors
- Click color swatches to open dropdown with all available colors
- Instant color changes for both sidebar and calendar events
- Persistent color preferences using local storage
- Enhanced UX with hover effects and visual feedback
Styling improvements:
- Larger 16px color swatches for better clickability
- Professional color picker dropdown with smooth animations
- Dynamic event coloring based on calendar assignment
- Improved contrast with text shadows and borders
- Click-outside-to-close functionality for better UX
Users can now personalize their calendar organization with custom colors
that persist across sessions and immediately update throughout the app.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Use data-trunk directive for CSS processing instead of manual copy
- Enable automatic content hashing and cache busting for styles.css
- Remove unused CalendarInfo import to fix compiler warning
- Simplify Trunk.toml by removing redundant copy configuration
This ensures styles.css is properly copied and processed on every build
with automatic cache invalidation when styles change.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Backend changes:
- Add /api/user/info endpoint to fetch user details and calendar list
- Create UserInfo and CalendarInfo models for API responses
- Filter out generic calendar collections from sidebar display
- Extract readable calendar names with proper title case formatting
Frontend changes:
- Fetch and display user info (username, server URL) in sidebar header
- Show list of user's calendars with hover effects and styling
- Add loading states and error handling for user info
- Reorganize sidebar layout: header, navigation, calendar list, logout
Styling:
- Enhanced sidebar with user info section and calendar list
- Responsive design hides user info and calendar list on mobile
- Improved logout button positioning in sidebar footer
- Professional styling with proper spacing and visual hierarchy
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Convert horizontal top navbar to vertical left sidebar
- Sidebar features gradient background and fixed positioning
- Main content area adjusts with left margin to accommodate sidebar
- Mobile responsive: sidebar becomes horizontal top bar on smaller screens
- Enhanced navigation styling with hover effects and smooth transitions
- Improved space utilization for calendar view
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major architectural change to simplify authentication by authenticating directly against CalDAV servers instead of maintaining a local user database.
Backend changes:
- Remove SQLite database dependencies and user storage
- Refactor AuthService to authenticate directly against CalDAV servers
- Update JWT tokens to store CalDAV server info instead of user IDs
- Implement proper CalDAV calendar discovery with XML parsing
- Fix URL construction for CalDAV REPORT requests
- Add comprehensive debug logging for authentication flow
Frontend changes:
- Add server URL input field to login form
- Remove registration functionality entirely
- Update calendar service to pass CalDAV passwords via headers
- Store CalDAV credentials in localStorage for API calls
Key improvements:
- Simplified architecture eliminates database complexity
- Direct CalDAV authentication ensures credentials always work
- Proper calendar discovery automatically finds user calendars
- Robust error handling and debug logging for troubleshooting
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add RRULE parsing for DAILY, WEEKLY, MONTHLY, YEARLY frequencies
- Support INTERVAL, COUNT, and BYDAY recurrence parameters
- Generate event occurrences across 30 days past to 365 days future
- Update event refresh to regenerate all recurring occurrences
- Clean up unused imports for cleaner compilation
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Backend: Add GET /api/calendar/events/:uid endpoint for single event refresh
- Backend: Implement fetch_event_by_uid method to retrieve updated events from CalDAV
- Frontend: Add event click callback system to trigger refresh on interaction
- Frontend: Display loading state with orange pulsing animation during refresh
- Frontend: Smart event data updates without full calendar reload
- Frontend: Graceful error handling with fallback to cached data
- CSS: Add refreshing animation for visual feedback during updates
Events now automatically refresh from CalDAV server when clicked, ensuring
users always see the most current event data including changes made in
other calendar applications.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Backend: Parse VALARM components from CalDAV iCalendar data
- Backend: Add EventReminder struct with minutes_before, action, and description
- Backend: Support Display, Email, and Audio reminder types
- Backend: Parse ISO 8601 duration triggers (-PT15M, -P1D, etc.)
- Frontend: Add reminders field to CalendarEvent structure
- Frontend: Display reminders in event modal with human-readable formatting
- Frontend: Show reminder timing (15 minutes before, 1 day before) and action type
- Fix: Update Trunk.toml to properly copy CSS files to dist directory
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Moved all 578+ lines of CSS from index.html into styles.css
- Updated index.html to link to external stylesheet
- Improved code organization and maintainability
- Better separation of concerns between HTML structure and styling
- Enables better browser caching of stylesheets
- Follows web development best practices
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created dedicated EventModal component in src/components/event_modal.rs
- Extracted modal logic and styling from calendar component for better separation
- Updated data flow to pass full CalendarEvent objects instead of strings
- Added PartialEq derive to CalendarEvent for component props
- Updated service layer to group events by CalendarEvent objects
- Enhanced event click handling to show detailed event information
- Modal displays title, description, location, start/end times, and status
- Maintained existing modal styling and user interaction patterns
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added click handlers to calendar days for user interaction
- Implemented selected day state tracking in calendar component
- Added CSS styling for selected days with green highlight
- Selected days show distinct visual feedback with borders and shadows
- Supports combination states (selected+today, selected+events)
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added full CalDAV integration to display real calendar events from Baikal server:
Backend changes:
- Added CalDAV client with iCalendar parsing and XML handling
- Created /api/calendar/events endpoint with authentication
- Fixed multiline regex patterns for namespace-prefixed XML tags
- Added proper calendar path discovery and event filtering
Frontend changes:
- Created CalendarService for API communication
- Updated calendar UI to display events as blue boxes with titles
- Added loading states and error handling
- Integrated real-time event fetching on calendar load
Now successfully displays 3 test events from the Baikal server with proper date formatting and responsive design.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added a comprehensive monthly calendar component with modern styling:
- Full monthly view with proper date calculations
- Current day highlighting and navigation
- Responsive design for all screen sizes
- Event indicator support for future integration
- Takes up most of screen space as requested
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Removed unused imports, fields, methods, and structs that were generating warnings during compilation.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Updated frontend to use BACKEND_API_URL environment variable at compile time with fallback to localhost. Added configuration to Trunk.toml and .env.example for development.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Restructure project with separate frontend/backend architecture
- Create dedicated backend with Axum, SQLite, JWT authentication
- Implement real API endpoints for register/login/verify
- Update frontend to use HTTP requests instead of mock auth
- Add bcrypt password hashing and secure token generation
- Separate Cargo.toml files for frontend and backend builds
- Fix Trunk compilation by isolating WASM-incompatible dependencies
- Create demo user in database for easy testing
- Both servers running: frontend (8081), backend (3000)
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add comprehensive authentication module with mock service
- Create login and registration components with form validation
- Implement protected routing with yew-router
- Add responsive UI styling with gradient design
- Enable JWT token persistence via localStorage
- Support demo credentials (demo/password) and flexible auth for development
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Features:
- Complete CalendarEvent struct with all iCal properties
- EventStatus and EventClass enums for proper typing
- CalDAVClient for server communication with:
- fetch_events() method using CalDAV REPORT queries
- discover_calendars() with intelligent path discovery
- Full iCal parsing using ical crate
- DateTime parsing with multiple format support
- XML response parsing with regex
Integration tests:
- Real server event fetching with calendar discovery
- iCal parsing validation with sample data
- DateTime parsing tests (UTC, local, date-only)
- Successful connection to configured calendar path
Dependencies added:
- regex crate for XML parsing
- Enhanced calendar module structure
Test results: ✓ All 7 tests pass
- Successfully connects to /calendars/test/ path
- Fetches 0 events (empty calendar, connection confirmed)
- No more 404 errors with improved discovery logic
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove #[ignore] attributes from CalDAV tests
- Update documentation to reflect tests run with `cargo test`
- Tests now validate CalDAV connectivity on every test run
- Ensures continuous integration of server authentication
- All 3 tests pass: unit test + 2 integration tests
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Updated base64 usage to new API (BASE64_STANDARD.encode)
- Added tokio dev dependency for async testing
- Created comprehensive integration tests:
- test_baikal_auth: Tests authentication with OPTIONS request
- test_propfind_calendars: Tests calendar discovery with PROPFIND
- Tests validate:
- HTTP Basic Auth with .env credentials
- DAV server capabilities detection
- CalDAV PROPFIND XML responses
- 207 Multi-Status handling
- Both tests pass successfully against Baikal server
- Tests marked as #[ignore] for CI/network isolation
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Multi-stage Dockerfile with rust:alpine and nginx:alpine
- Optimized for small container size (~20MB)
- Includes SPA routing support and gzip compression
- Health check for container monitoring
- .dockerignore to optimize build context
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Set up Cargo.toml with Yew dependencies
- Created main.rs entry point
- Added basic App component with counter functionality
- Included HTML template with styling
- Added Trunk.toml for build configuration
- Added .gitignore to exclude build artifacts
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>