From cd6e9c361928efa618ef3060d874908022a34b34 Mon Sep 17 00:00:00 2001 From: Connor Johnstone Date: Mon, 1 Sep 2025 19:28:24 -0400 Subject: [PATCH] Update README with Docker deployment instructions and auth features MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added comprehensive Docker Compose deployment section as recommended method - Documented automatic database migrations and persistent storage - Updated architecture section to mention SQLite auth system - Added new User Experience section highlighting session management - Reorganized development setup with local database migration instructions 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- Dockerfile | 6 +++--- README.md | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index ed44d46..ff4b365 100644 --- a/Dockerfile +++ b/Dockerfile @@ -79,7 +79,7 @@ RUN cargo build --release --bin backend FROM alpine:latest # 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 --from=builder /app/frontend/dist /app/frontend-dist @@ -99,9 +99,9 @@ RUN echo '#!/bin/sh' > /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 '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 'export DATABASE_URL="sqlite:/db/calendar.db"' >> /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 && \ chmod +x /usr/local/bin/start.sh diff --git a/README.md b/README.md index cd03b56..23a06d6 100644 --- a/README.md +++ b/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 - **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 ### Frontend (Yew WebAssembly) @@ -40,7 +46,8 @@ While there are many excellent self-hosted CalDAV server implementations (Nextcl ### Backend (Axum) - **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 - **API Design**: RESTful endpoints following calendar operation patterns - **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 -### Prerequisites +### Docker Deployment (Recommended) +The easiest way to run the calendar is using Docker Compose: + +1. **Clone the repository**: + ```bash + git clone + 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) - Trunk (`cargo install trunk`) -### Development Setup +#### Local Development 1. **Start the backend server** (serves API at http://localhost:3000): ```bash @@ -73,6 +104,17 @@ While there are many excellent self-hosted CalDAV server implementations (Nextcl 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 ```bash