Compare commits
	
		
			5 Commits
		
	
	
		
			feature/sq
			...
			0587762bbb
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 0587762bbb | |||
|   | cd6e9c3619 | ||
|   | d8c3997f24 | ||
|   | e44d49e190 | ||
| 4d2aad404b | 
							
								
								
									
										21
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								Dockerfile
									
									
									
									
									
								
							| @@ -47,6 +47,9 @@ FROM rust:alpine AS backend-builder | |||||||
| WORKDIR /app | WORKDIR /app | ||||||
| RUN apk add --no-cache musl-dev pkgconfig openssl-dev openssl-libs-static | RUN apk add --no-cache musl-dev pkgconfig openssl-dev openssl-libs-static | ||||||
|  |  | ||||||
|  | # Install sqlx-cli for migrations | ||||||
|  | RUN cargo install sqlx-cli --no-default-features --features sqlite | ||||||
|  |  | ||||||
| # Copy shared models | # Copy shared models | ||||||
| COPY calendar-models ./calendar-models | COPY calendar-models ./calendar-models | ||||||
|  |  | ||||||
| @@ -76,19 +79,29 @@ RUN cargo build --release --bin backend | |||||||
| FROM alpine:latest | FROM alpine:latest | ||||||
|  |  | ||||||
| # Install runtime dependencies | # Install runtime dependencies | ||||||
| RUN apk add --no-cache ca-certificates tzdata | RUN apk add --no-cache ca-certificates tzdata sqlite | ||||||
|  |  | ||||||
| # Copy frontend files to temporary location | # Copy frontend files to temporary location | ||||||
| COPY --from=builder /app/frontend/dist /app/frontend-dist | COPY --from=builder /app/frontend/dist /app/frontend-dist | ||||||
|  |  | ||||||
| # Copy backend binary (built in workspace root) | # Copy backend binary and sqlx-cli | ||||||
| COPY --from=backend-builder /app/target/release/backend /usr/local/bin/backend | COPY --from=backend-builder /app/target/release/backend /usr/local/bin/backend | ||||||
|  | COPY --from=backend-builder /usr/local/cargo/bin/sqlx /usr/local/bin/sqlx | ||||||
|  |  | ||||||
| # Create startup script to copy frontend files to shared volume | # Copy migrations for database setup | ||||||
| RUN mkdir -p /srv/www | COPY --from=backend-builder /app/backend/migrations /migrations | ||||||
|  |  | ||||||
|  | # Create startup script to copy frontend files, run migrations, and start backend | ||||||
|  | RUN mkdir -p /srv/www /db | ||||||
| RUN echo '#!/bin/sh' > /usr/local/bin/start.sh && \ | RUN echo '#!/bin/sh' > /usr/local/bin/start.sh && \ | ||||||
|  |     echo 'echo "Copying frontend files..."' >> /usr/local/bin/start.sh && \ | ||||||
|     echo 'cp -r /app/frontend-dist/* /srv/www/' >> /usr/local/bin/start.sh && \ |     echo 'cp -r /app/frontend-dist/* /srv/www/' >> /usr/local/bin/start.sh && \ | ||||||
|  |     echo 'echo "Ensuring database directory exists..."' >> /usr/local/bin/start.sh && \ | ||||||
|  |     echo 'mkdir -p /db && chmod 755 /db' >> /usr/local/bin/start.sh && \ | ||||||
|  |     echo 'echo "Running database migrations..."' >> /usr/local/bin/start.sh && \ | ||||||
|  |     echo 'sqlx migrate run --database-url "sqlite:///db/calendar.db" --source /migrations || echo "Migration failed but continuing..."' >> /usr/local/bin/start.sh && \ | ||||||
|     echo 'echo "Starting backend server..."' >> /usr/local/bin/start.sh && \ |     echo 'echo "Starting backend server..."' >> /usr/local/bin/start.sh && \ | ||||||
|  |     echo 'export DATABASE_URL="sqlite:///db/calendar.db"' >> /usr/local/bin/start.sh && \ | ||||||
|     echo '/usr/local/bin/backend' >> /usr/local/bin/start.sh && \ |     echo '/usr/local/bin/backend' >> /usr/local/bin/start.sh && \ | ||||||
|     chmod +x /usr/local/bin/start.sh |     chmod +x /usr/local/bin/start.sh | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										48
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								README.md
									
									
									
									
									
								
							| @@ -29,6 +29,12 @@ While there are many excellent self-hosted CalDAV server implementations (Nextcl | |||||||
| - **Real-time Updates**: Seamless synchronization with CalDAV servers | - **Real-time Updates**: Seamless synchronization with CalDAV servers | ||||||
| - **Timezone Aware**: Proper local time display with UTC storage | - **Timezone Aware**: Proper local time display with UTC storage | ||||||
|  |  | ||||||
|  | ### User Experience | ||||||
|  | - **Persistent Preferences**: Settings sync across devices and sessions | ||||||
|  | - **Remember Me**: Optional server/username remembering for convenience | ||||||
|  | - **Session Management**: Secure session tokens with automatic expiry | ||||||
|  | - **Cross-Device Sync**: User preferences stored in database, not just browser | ||||||
|  |  | ||||||
| ## Architecture | ## Architecture | ||||||
|  |  | ||||||
| ### Frontend (Yew WebAssembly) | ### Frontend (Yew WebAssembly) | ||||||
| @@ -40,7 +46,8 @@ While there are many excellent self-hosted CalDAV server implementations (Nextcl | |||||||
|  |  | ||||||
| ### Backend (Axum)   | ### Backend (Axum)   | ||||||
| - **Framework**: Axum async web framework with CORS support | - **Framework**: Axum async web framework with CORS support | ||||||
| - **Authentication**: JWT token management and validation | - **Authentication**: SQLite-backed session management with JWT tokens | ||||||
|  | - **Database**: SQLite for user preferences and session storage | ||||||
| - **CalDAV Client**: Full CalDAV protocol implementation for server sync | - **CalDAV Client**: Full CalDAV protocol implementation for server sync | ||||||
| - **API Design**: RESTful endpoints following calendar operation patterns | - **API Design**: RESTful endpoints following calendar operation patterns | ||||||
| - **Data Flow**: Proxy between frontend and CalDAV servers with proper authentication | - **Data Flow**: Proxy between frontend and CalDAV servers with proper authentication | ||||||
| @@ -54,12 +61,36 @@ While there are many excellent self-hosted CalDAV server implementations (Nextcl | |||||||
|  |  | ||||||
| ## Getting Started | ## Getting Started | ||||||
|  |  | ||||||
| ### Prerequisites | ### Docker Deployment (Recommended) | ||||||
|  |  | ||||||
|  | The easiest way to run the calendar is using Docker Compose: | ||||||
|  |  | ||||||
|  | 1. **Clone the repository**: | ||||||
|  |    ```bash | ||||||
|  |    git clone <repository-url> | ||||||
|  |    cd calendar | ||||||
|  |    ``` | ||||||
|  |  | ||||||
|  | 2. **Start the application**: | ||||||
|  |    ```bash | ||||||
|  |    docker compose up | ||||||
|  |    ``` | ||||||
|  |  | ||||||
|  | 3. **Access the application** at `http://localhost` | ||||||
|  |  | ||||||
|  | The Docker setup includes: | ||||||
|  | - **Automatic database migrations** on startup | ||||||
|  | - **Persistent data storage** in `./data/db/` volume | ||||||
|  | - **Frontend served via Caddy** on port 80 | ||||||
|  | - **Backend API** accessible on port 3000 | ||||||
|  |  | ||||||
|  | ### Development Setup | ||||||
|  |  | ||||||
|  | #### Prerequisites | ||||||
| - Rust (latest stable version) | - Rust (latest stable version) | ||||||
| - Trunk (`cargo install trunk`) | - Trunk (`cargo install trunk`) | ||||||
|  |  | ||||||
| ### Development Setup | #### Local Development | ||||||
|  |  | ||||||
| 1. **Start the backend server** (serves API at http://localhost:3000): | 1. **Start the backend server** (serves API at http://localhost:3000): | ||||||
|    ```bash |    ```bash | ||||||
| @@ -73,6 +104,17 @@ While there are many excellent self-hosted CalDAV server implementations (Nextcl | |||||||
|  |  | ||||||
| 3. **Access the application** at `http://localhost:8080` | 3. **Access the application** at `http://localhost:8080` | ||||||
|  |  | ||||||
|  | #### Database Setup | ||||||
|  |  | ||||||
|  | For local development, run the database migrations: | ||||||
|  | ```bash | ||||||
|  | # Install sqlx-cli if not already installed | ||||||
|  | cargo install sqlx-cli --features sqlite | ||||||
|  |  | ||||||
|  | # Run migrations | ||||||
|  | sqlx migrate run --database-url "sqlite:calendar.db" --source backend/migrations | ||||||
|  | ``` | ||||||
|  |  | ||||||
| ### Building for Production | ### Building for Production | ||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user