Files
calendar/CLAUDE.md
Connor Johnstone 15f2d0c6d9 Implement shared RFC 5545 VEvent library with workspace restructuring
- Created calendar-models/ shared library with RFC 5545-compliant VEvent structures
- Migrated backend to use shared VEvent with proper field mappings (dtstart/dtend, rrule, exdate, etc.)
- Converted CalDAV client to parse into VEvent structures with structured types
- Updated all CRUD handlers to use VEvent with CalendarUser, Attendee, VAlarm types
- Restructured project as Cargo workspace with frontend/, backend/, calendar-models/
- Updated Trunk configuration for new directory structure
- Fixed all compilation errors and field references throughout codebase
- Updated documentation and build instructions for workspace structure

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-30 11:45:58 -04:00

3.2 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Development Commands

Frontend Development

  • trunk serve - Start frontend development server at http://localhost:8080
  • trunk build --release - Build frontend for production
  • cargo check - Check frontend code compilation

Backend Development

  • cargo run --manifest-path=backend/Cargo.toml - Start backend server at http://localhost:3000
  • cargo check --manifest-path=backend/Cargo.toml - Check backend code compilation

Full Development Setup

  1. Start backend: cargo run --manifest-path=backend/Cargo.toml
  2. Start frontend: trunk serve (in project root)
  3. Access application at http://localhost:8080

Architecture Overview

This is a full-stack calendar application with a Rust WebAssembly frontend and Rust backend, featuring CalDAV integration for calendar synchronization.

Frontend (Yew WebAssembly)

  • Entry Point: src/app.rs - Main application component with routing and state management
  • Models: src/models/ical.rs - RFC 5545-compliant iCalendar data structures (VEvent, VTodo, etc.)
  • Services: src/services/calendar_service.rs - HTTP client for backend API calls
  • Components: src/components/ - UI components including calendar views, modals, and forms
  • Views: Month view (month_view.rs) and week view (week_view.rs) with drag-and-drop event modification

Backend (Axum)

  • Entry Point: backend/src/main.rs - HTTP server with CORS and routing
  • Handlers: backend/src/handlers.rs - API endpoints for calendar operations
  • CalDAV Integration: backend/src/calendar.rs - CalDAV client for server synchronization
  • Authentication: backend/src/auth.rs - JWT token management

Key Data Flow

  1. Frontend makes HTTP requests to backend API (/api/* endpoints)
  2. Backend authenticates requests and proxies to CalDAV servers
  3. Data uses RFC 5545 VEvent structures throughout the system
  4. Events support recurrence (RRULE), exceptions (EXDATE), and timezone conversion

Event Management Features

  • Series Updates: Events can be updated as "entire series" (update_series) or "this and future events" (this_and_future)
  • Drag and Drop: Week/month views support dragging events to new times with automatic timezone conversion
  • Recurring Events: Full RRULE support with UNTIL dates and exception handling
  • Timezone Handling: Local time in UI, UTC for storage and API calls

Important Implementation Details

  • All event data uses RFC 5545-compliant VEvent structures (not legacy CalendarEvent)
  • Frontend converts local times to UTC before sending to backend
  • API expects HH:MM time format (not HH:MM:SS)
  • Recurrence modifications create new series with UNTIL dates on original events
  • Event UIDs are preserved across updates for CalDAV compatibility

Build Configuration

  • Frontend built with Trunk (see Trunk.toml)
  • Backend API URL: http://localhost:3000/api (configurable via BACKEND_API_URL)
  • Frontend serves on port 8080, backend on port 3000

Dependencies

  • Frontend: Yew, chrono, serde, web-sys, gloo-storage
  • Backend: Axum, tokio, reqwest, ical, jsonwebtoken
  • Shared: RFC 5545 iCalendar structures, UUID generation