# Selfhosting - should be true if you are selfhosting PUBLIC_IS_SELFHOSTED=false # Self-hosted meta tags (optional) - override title, description, and OG image for custom branding # PUBLIC_APP_TITLE=My Learning Platform # PUBLIC_APP_DESCRIPTION=A flexible LMS for your organization # PUBLIC_OG_IMAGE_URL=https://app.yourdomain.com/og-image.png # CSP: External domains allowed by Content-Security-Policy. # These are runtime env vars — set them when running the container (no rebuild needed). # When PUBLIC_IS_SELFHOSTED=true: starts with 'self' only; add your domains here. # When PUBLIC_IS_SELFHOSTED=false: unset uses SaaS defaults. # Comma-separated, e.g. ALLOWED_EXTERNAL_DOMAINS=assets.cdn.clsrio.com,cdnjs.cloudflare.com,cdn.plyr.io # ALLOWED_EXTERNAL_DOMAINS overrides all per-directive vars below. # ALLOWED_EXTERNAL_DOMAINS= # CSP_SCRIPT_SRC_DOMAINS= # CSP_STYLE_SRC_DOMAINS= # CSP_CONNECT_SRC_DOMAINS= # CSP_FRAME_SRC_DOMAINS= # CSP_FONT_SRC_DOMAINS= # CSP_MEDIA_SRC_DOMAINS= (applies to both img-src and media-src) # CSP_FRAME_ANCESTORS_DOMAINS= (extra parents allowed to iframe this app; appended after 'self'. Overridden by ALLOWED_EXTERNAL_DOMAINS when set.) # Example: CSP_FRAME_ANCESTORS_DOMAINS=http://localhost:5180 # Google Drive video picker (lesson editor). OAuth Web client ID + Browser API key from Google Cloud Console (Picker API + Drive API enabled). # PUBLIC_GOOGLE_PICKER_CLIENT_ID= # PUBLIC_GOOGLE_PICKER_API_KEY= # Unsplash setup - Optional if you want to use Unsplash images UNSPLASH_API_KEY= # Sever URL - Optional if you want to use video upload and pdf downloads # This is the deployment URL of apps/api PUBLIC_SERVER_URL= # Optional server-only override used during SSR (for Docker/internal network) # Example in compose: http://api:3081 PRIVATE_SERVER_URL= # Domain management - should be your domain # The final domain is app.classroomio.com where `app` is PRIVATE_APP_SUBDOMAINS and `classroomio.com` is PRIVATE_APP_HOST PRIVATE_APP_HOST=classroomio.com PRIVATE_APP_SUBDOMAINS=app # Polar (SvelteKit routes: /api/polar/subscribe, portal, webhook, buy-tokens) POLAR_ACCESS_TOKEN= POLAR_WEBHOOK_SECRET= POLAR_TOKEN_PACK_PRODUCT_ID= # Sentry (client-side error tracking). Leave PUBLIC_SENTRY_DSN unset to disable. PUBLIC_SENTRY_DSN= PUBLIC_SENTRY_ENVIRONMENT=production PUBLIC_SENTRY_TRACES_SAMPLE_RATE=0 PUBLIC_SENTRY_REPLAYS_SESSION_SAMPLE_RATE=0 PUBLIC_SENTRY_REPLAYS_ON_ERROR_SAMPLE_RATE=1