HOST_IP=localhost ## App Information APP_NAME=ClassroomCopilot APP_VERSION=0.0.1 APP_DESCRIPTION="An AI copilot for learners and educators." APP_AUTHOR=KevlarAI APP_AUTHOR_EMAIL=kcar@kevlarai.com APP_URL=classroomcopilot.ai APP_URL_INTERNAL=classroomcopilot.ai APP_PROTOCOL=https APP_WS_PROTOCOL=wss API_EXTERNAL_URL=${APP_PROTOCOL}://supa.${APP_URL} # KevelarAI URLs KEVLARAI_URL=kevlarai.ai KEVLARAI_PROTOCOL=https # Super Admin user SUPER_ADMIN_EMAIL=admin@classroomcopilot.ai SUPER_ADMIN_WORKER_EMAIL=kcar@kevlarai.com SUPER_ADMIN_PASSWORD=password SUPER_ADMIN_USERNAME=superadmin SUPER_ADMIN_NAME="Super Admin" SUPER_ADMIN_DISPLAY_NAME="CC Creator" SUPER_ADMIN_CALENDAR_START_DATE=2025-01-01 SUPER_ADMIN_CALENDAR_END_DATE=2025-01-31 ## Hosts HOST_OLLAMA=${HOST_IP} ## Ports PORT_SUPABASE_KONG_HTTP=8000 PORT_SUPABASE_KONG_HTTPS=8443 PORT_SUPABASE_STUDIO=3000 PORT_SUPABASE_POSTGRES=5432 ############################################################# ## APP CONFIGURATION ############################################################# ## Supabase Basic URLs and Endpoints SITE_URL=${APP_PROTOCOL}://${APP_URL} SUPABASE_URL=${APP_PROTOCOL}://supa.${APP_URL} SUPABASE_PUBLIC_URL=${APP_PROTOCOL}://supastudio.${APP_URL} ## App domains APP_SITE_URL=${SITE_URL} APP_SUPABASE_URL=${SUPABASE_URL} APP_STUDIO_URL=${SUPABASE_PUBLIC_URL} ############################################################# ## SUPABASE CONFIGURATION ############################################################# ## Supabase Authentication Keys and Secrets # JWT configuration JWT_SECRET=mE9FCC2YvHyrFIyyloH27F3lw51Ij93a77ejMZY-NRc JWT_EXPIRY=3600 SECRET_KEY_BASE=UpNVntn3cDxHJpq99YMc1T1AQgQpc8kfYTuRgBiYa15BLrx8etQoXz3gZv1/u2oq VAULT_ENC_KEY=your-encryption-key-32-chars-min # API Keys ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiaWF0IjoxNzM0OTg4MzkxLCJpc3MiOiJzdXBhYmFzZSIsImV4cCI6MTc2NjUyNDM5MSwicm9sZSI6ImFub24ifQ.utdDZzVlhYIc-cSXuC2kyZz7HN59YfyMH4eaOw1hRlk SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiaWF0IjoxNzM0OTg4MzkxLCJpc3MiOiJzdXBhYmFzZSIsImV4cCI6MTc2NjUyNDM5MSwicm9sZSI6InNlcnZpY2Vfcm9sZSJ9.y-HHZC_Rxr8OTOX2rmb8ZgMnwLkSJYAF_lIHjkVtAyc ## Supabase Database Configuration POSTGRES_PASSWORD=your-super-secret-and-long-postgres-password POSTGRES_HOST=db POSTGRES_DB=postgres POSTGRES_PORT=${PORT_SUPABASE_POSTGRES} ## Supabase Dashboard Configuration DASHBOARD_USERNAME=supabase DASHBOARD_PASSWORD=password ## Supabase Pooler Configuration (Database Connection Pooling) POOLER_PROXY_PORT_TRANSACTION=6543 POOLER_DEFAULT_POOL_SIZE=20 POOLER_MAX_CLIENT_CONN=100 POOLER_TENANT_ID=your-tenant-id ## Supabase Kong API Gateway Configuration KONG_HTTP_PORT=${PORT_SUPABASE_KONG_HTTP} KONG_HTTPS_PORT=${PORT_SUPABASE_KONG_HTTPS} ## Supabase PostgREST Configuration PGRST_DB_SCHEMAS=public,storage,graphql_public ## Supabase Auth Server Configuration # General Auth Settings ADDITIONAL_REDIRECT_URLS="" AUTH_LOG_LEVEL=debug DISABLE_SIGNUP=false # Security Settings # Uncomment these for enhanced security # GOTRUE_SECURITY_REFRESH_TOKEN_ROTATION_ENABLED=true # GOTRUE_SECURITY_REFRESH_TOKEN_REUSE_INTERVAL=30s # GOTRUE_SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION=true # GOTRUE_PASSWORD_MIN_LENGTH=10 # GOTRUE_PASSWORD_REQUIRED_CHARACTERS=lowercase:uppercase:number:symbol # Rate Limiting # Uncomment these to enable rate limiting # GOTRUE_RATE_LIMIT_HEADER=IP # GOTRUE_RATE_LIMIT_EMAIL_SENT=4 ## Supabase Email Configuration # Mailer URL Paths MAILER_URLPATHS_CONFIRMATION="/auth/v1/verify" MAILER_URLPATHS_INVITE="/auth/v1/verify" MAILER_URLPATHS_RECOVERY="/auth/v1/verify" MAILER_URLPATHS_EMAIL_CHANGE="/auth/v1/verify" MAILER_SECURE_EMAIL_CHANGE_ENABLED=true GOTRUE_MAILER_EXTERNAL_HOSTS="localhost,supabase.localhost" # Email Auth Settings ENABLE_EMAIL_SIGNUP=true ENABLE_EMAIL_AUTOCONFIRM=true SMTP_ADMIN_EMAIL=${APP_AUTHOR_EMAIL} SMTP_USER=fake_mail_user SMTP_PASS=fake_mail_password SMTP_SENDER_NAME=fake_sender SMTP_HOST=smtp.zoho.eu SMTP_PORT=587 SMTP_USER=admin@${APP_URL} SMTP_PASS=&%Z040&% SMTP_ADMIN_EMAIL=admin@${APP_URL} SMTP_SENDER_NAME="Classroom Copilot" ## Supabase Phone Auth Configuration ENABLE_PHONE_SIGNUP=true ENABLE_PHONE_AUTOCONFIRM=true ## Supabase Anonymous Users ENABLE_ANONYMOUS_USERS=false ## Supabase Studio Configuration SUPABASE_PROJECT_ID=${APP_NAME} STUDIO_DEFAULT_ORGANIZATION=${APP_AUTHOR} STUDIO_DEFAULT_PROJECT=${APP_NAME} STUDIO_PORT=${PORT_SUPABASE_STUDIO} IMGPROXY_ENABLE_WEBP_DETECTION=true ## Supabase OAuth Providers # Azure Auth AZURE_ENABLED=false AZURE_CLIENT_ID=c9a27d21-2012-44ce-9ebd-ffc868444383 AZURE_SECRET=.Nr8Q~kBXgDp_aX7~TlgCbzJHPledeTQwfTzja5y AZURE_REDIRECT_URI=${APP_PROTOCOL}://${APP_URL}/web/auth/callback AZURE_TENANT_ID=e637ec20-60ca-4dfc-a605-d2798f9e977b ## Supabase Functions Configuration FUNCTIONS_VERIFY_JWT=false ## Supabase Logs Configuration LOGFLARE_LOGGER_BACKEND_API_KEY=your-super-secret-and-long-logflare-key LOGFLARE_API_KEY=your-super-secret-and-long-logflare-key ## App Information APP_NAME=ClassroomCopilot APP_VERSION=0.0.1 APP_DESCRIPTION="An AI copilot for learners and educators." APP_AUTHOR=KevlarAI APP_AUTHOR_EMAIL=kcar@kevlarai.com APP_URL=classroomcopilot.ai APP_URL_INTERNAL=classroomcopilot.internal APP_PROTOCOL=https APP_WS_PROTOCOL=wss # KevelarAI URLs KEVLARAI_URL=kevlarai.ai KEVLARAI_PROTOCOL=https # Super Admin user SUPER_ADMIN_EMAIL=admin@classroomcopilot.ai SUPER_ADMIN_WORKER_EMAIL=kcar@kevlarai.com SUPER_ADMIN_PASSWORD=password SUPER_ADMIN_USERNAME=superadmin SUPER_ADMIN_NAME="Super Admin" SUPER_ADMIN_DISPLAY_NAME="CC Creator" SUPER_ADMIN_CALENDAR_START_DATE=2025-01-01 SUPER_ADMIN_CALENDAR_END_DATE=2025-01-31 ## Runtime settings PROJECT_DIR=/Users/kcar/dev/ClassroomCopilot BUILD_OS=macos NGINX_MODE=prod DEV_MODE=false HOST_IP=localhost BACKEND_DEV_MODE=false STRICT_MODE=false SUPER_ADMIN_CHECK=true INIT_SUPER_ADMIN=false ## Docker compose environment variables COMPOSE_PROJECT_NAME=classroomcopilot-${NGINX_MODE:-dev} ## Hosts HOST_OLLAMA=${HOST_IP} ## Ports PORT_KEYCLOAK=8080 PORT_KEYCLOAK_MANAGEMENT=9000 PORT_KEYCLOAK_SSL=8444 PORT_CC_ADMIN=5173 PORT_CC_ADMIN_DEVTOOLS=5001 PORT_SUPABASE_KONG_HTTP=8000 PORT_SUPABASE_KONG_HTTPS=8443 PORT_SUPABASE_STUDIO=3000 PORT_SUPABASE_POSTGRES=5432 # PORT_SOLID_CSS=3006 # not used currently in docker on by localhost solid server PORT_SOLID_PROXY=3007 PORT_SOLID_PROXY_SSL=3008 PORT_NEO4J_BOLT=7687 PORT_NEO4J_HTTP=7474 PORT_NEO4J_HTTPS=7473 PORT_FRONTEND=3003 PORT_FRONTEND_SSL=3033 PORT_MARKETING_SITE=3004 PORT_MARKETING_SITE_SSL=3044 PORT_BACKEND=8880 PORT_BACKEND_SSL=8088 PORT_TLDRAW_SYNC=5002 PORT_WHISPERLIVE=5050 PORT_WHISPERLIVE_SSL=5053 PORT_TEXT_GENERATION=7861 PORT_TEXT_GENERATION_API=5010 PORT_STABLE_DIFFUSION=7860 PORT_STABLE_DIFFUSION_API=5011 PORT_OLLAMA=11434 PORT_OPEN_WEBUI=3333 PORT_OPEN_WEBUI_SSL=3334 PORT_OPENWEBUI_PROXY_INTERNAL=3335 PORT_MORPHIC=3001 PORT_REDIS=6379 PORT_SEARXNG=8090 PORT_MAILHOG_SMTP=1025 PORT_MAILHOG_WEB=8025 # WhisperLive Frontend PORT_WHISPERLIVE_FRONTEND=5054 PORT_WHISPERLIVE_FRONTEND_SSL=5055 ############################################################# ## APP CONFIGURATION ############################################################# ## Supabase Basic URLs and Endpoints SITE_URL=${APP_PROTOCOL}://${APP_URL} SUPABASE_URL=${APP_PROTOCOL}://supa.${APP_URL} API_EXTERNAL_URL=${APP_PROTOCOL}://supa.${APP_URL} SUPABASE_PUBLIC_URL=${APP_PROTOCOL}://supastudio.${APP_URL} ## App domains APP_SITE_URL=${SITE_URL} APP_SUPABASE_URL=${SUPABASE_URL} APP_STUDIO_URL=${SUPABASE_PUBLIC_URL} APP_API_URL=${APP_PROTOCOL}://api.${APP_URL} APP_GRAPH_URL=${APP_PROTOCOL}://graph.${APP_URL} APP_BOLT_URL=bolt://neo4j:${PORT_NEO4J_BOLT} CC_ADMIN_URL=${APP_PROTOCOL}://admin.${APP_URL} APP_ADMIN_API_URL=${APP_PROTOCOL}://admin-api.${APP_URL} ## Vite environment variables VITE_APP_URL=app.${APP_URL} ############################################################# ## OAUTH2 PROXY CONFIGURATION ############################################################# KEYCLOAK_SECRET_OPENWEBUI=XbKriIGb1YRSKmALfoKodpyJaQQOtP4U KEYCLOAK_SECRET_ADMIN="" COOKIE_SECRET_OPENWEBUI=QAm4ImW8ieeEftQgRly5guVYqHzcU/m+to5k5sHqfF8= COOKIE_SECRET_ADMIN=yDaNr1DwYqRykdoeW+mS/Ari5pWs8m4YPQJsjIt2xYQ= ############################################################# ## SUPABASE CONFIGURATION ############################################################# ## Supabase Authentication Keys and Secrets # JWT configuration JWT_SECRET=mE9FCC2YvHyrFIyyloH27F3lw51Ij93a77ejMZY-NRc JWT_EXPIRY=3600 SECRET_KEY_BASE=UpNVntn3cDxHJpq99YMc1T1AQgQpc8kfYTuRgBiYa15BLrx8etQoXz3gZv1/u2oq VAULT_ENC_KEY=your-encryption-key-32-chars-min # API Keys ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiaWF0IjoxNzM0OTg4MzkxLCJpc3MiOiJzdXBhYmFzZSIsImV4cCI6MTc2NjUyNDM5MSwicm9sZSI6ImFub24ifQ.utdDZzVlhYIc-cSXuC2kyZz7HN59YfyMH4eaOw1hRlk SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiaWF0IjoxNzM0OTg4MzkxLCJpc3MiOiJzdXBhYmFzZSIsImV4cCI6MTc2NjUyNDM5MSwicm9sZSI6InNlcnZpY2Vfcm9sZSJ9.y-HHZC_Rxr8OTOX2rmb8ZgMnwLkSJYAF_lIHjkVtAyc ## Supabase Database Configuration POSTGRES_PASSWORD=your-super-secret-and-long-postgres-password POSTGRES_HOST=db POSTGRES_DB=postgres POSTGRES_PORT=${PORT_SUPABASE_POSTGRES} ## Supabase Dashboard Configuration DASHBOARD_USERNAME=supabase DASHBOARD_PASSWORD=password ## Supabase Pooler Configuration (Database Connection Pooling) POOLER_PROXY_PORT_TRANSACTION=6543 POOLER_DEFAULT_POOL_SIZE=20 POOLER_MAX_CLIENT_CONN=100 POOLER_TENANT_ID=your-tenant-id ## Supabase Kong API Gateway Configuration KONG_HTTP_PORT=${PORT_SUPABASE_KONG_HTTP} KONG_HTTPS_PORT=${PORT_SUPABASE_KONG_HTTPS} ## Supabase PostgREST Configuration PGRST_DB_SCHEMAS=public,storage,graphql_public ## Supabase Auth Server Configuration # General Auth Settings ADDITIONAL_REDIRECT_URLS="" AUTH_LOG_LEVEL=debug DISABLE_SIGNUP=false # Security Settings # Uncomment these for enhanced security # GOTRUE_SECURITY_REFRESH_TOKEN_ROTATION_ENABLED=true # GOTRUE_SECURITY_REFRESH_TOKEN_REUSE_INTERVAL=30s # GOTRUE_SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION=true # GOTRUE_PASSWORD_MIN_LENGTH=10 # GOTRUE_PASSWORD_REQUIRED_CHARACTERS=lowercase:uppercase:number:symbol # Rate Limiting # Uncomment these to enable rate limiting # GOTRUE_RATE_LIMIT_HEADER=IP # GOTRUE_RATE_LIMIT_EMAIL_SENT=4 ## Supabase Email Configuration # Mailer URL Paths MAILER_URLPATHS_CONFIRMATION="/auth/v1/verify" MAILER_URLPATHS_INVITE="/auth/v1/verify" MAILER_URLPATHS_RECOVERY="/auth/v1/verify" MAILER_URLPATHS_EMAIL_CHANGE="/auth/v1/verify" MAILER_SECURE_EMAIL_CHANGE_ENABLED=true GOTRUE_MAILER_EXTERNAL_HOSTS="localhost,supabase.localhost" # Email Auth Settings ENABLE_EMAIL_SIGNUP=true ENABLE_EMAIL_AUTOCONFIRM=true SMTP_ADMIN_EMAIL=${APP_AUTHOR_EMAIL} SMTP_USER=fake_mail_user SMTP_PASS=fake_mail_password SMTP_SENDER_NAME=fake_sender SMTP_HOST=smtp.zoho.eu SMTP_PORT=587 SMTP_USER=admin@${APP_URL} SMTP_PASS=&%Z040&% SMTP_ADMIN_EMAIL=admin@${APP_URL} SMTP_SENDER_NAME="Classroom Copilot" ## Supabase Phone Auth Configuration ENABLE_PHONE_SIGNUP=true ENABLE_PHONE_AUTOCONFIRM=true ## Supabase Anonymous Users ENABLE_ANONYMOUS_USERS=false ## Supabase OAuth Providers # Azure Auth AZURE_ENABLED=false AZURE_CLIENT_ID=c9a27d21-2012-44ce-9ebd-ffc868444383 AZURE_SECRET=.Nr8Q~kBXgDp_aX7~TlgCbzJHPledeTQwfTzja5y AZURE_REDIRECT_URI=${APP_PROTOCOL}://${APP_URL}/web/auth/callback AZURE_TENANT_ID=e637ec20-60ca-4dfc-a605-d2798f9e977b ## Supabase Studio Configuration SUPABASE_PROJECT_ID=${APP_NAME} STUDIO_DEFAULT_ORGANIZATION=${APP_AUTHOR} STUDIO_DEFAULT_PROJECT=${APP_NAME} STUDIO_PORT=${PORT_SUPABASE_STUDIO} IMGPROXY_ENABLE_WEBP_DETECTION=true ## Supabase Functions Configuration FUNCTIONS_VERIFY_JWT=false ## Supabase Logs Configuration LOGFLARE_LOGGER_BACKEND_API_KEY=your-super-secret-and-long-logflare-key LOGFLARE_API_KEY=your-super-secret-and-long-logflare-key ## Supabase Analytics Configuration (Google Cloud) GOOGLE_PROJECT_ID=GOOGLE_PROJECT_ID GOOGLE_PROJECT_NUMBER=GOOGLE_PROJECT_NUMBER ############################################################# ## OTHER SERVICES CONFIGURATION ############################################################# # Neo4j Settings USER_NEO4J=neo4j PASSWORD_NEO4J=password NEO4J_AUTH=${USER_NEO4J}/${PASSWORD_NEO4J} ## Keycloak Configuration KEYCLOAK_ADMIN=admin KEYCLOAK_ADMIN_PASSWORD=admin KEYCLOAK_DB_USER=keycloak KEYCLOAK_DB_PASSWORD=keycloak KEYCLOAK_DB_DATABASE=keycloak KEYCLOAK_PORT=${PORT_KEYCLOAK} KEYCLOAK_MANAGEMENT_PORT=${PORT_KEYCLOAK_MANAGEMENT} KEYCLOAK_SSL_PORT=${PORT_KEYCLOAK_SSL} KEYCLOAK_IMAGE=quay.io/keycloak/keycloak:24.0.1 KEYCLOAK_REALM=classroomcopilot KEYCLOAK_CLIENT_ID=frontend-app KEYCLOAK_CLIENT_SECRET=your-super-secret-and-long-keycloak-client-secret KEYCLOAK_URL=${KEVLARAI_PROTOCOL}://keycloak.${KEVLARAI_URL} KEYCLOAK_ADMIN_URL=${KEVLARAI_PROTOCOL}://keycloak-admin.${KEVLARAI_URL} KEYCLOAK_INTERNAL_URL=http://keycloak:8080 ## Backend UVICORN_WORKERS=2 CORS_SITE_URL=${APP_URL} NODE_FILESYSTEM_PATH=/node_filesystem BACKEND_INIT_PATH=/init LOG_PATH=/logs # Log level must be lowercase for Node.js services using Pino logger (storage, functions) # Valid values: trace, debug, info, warn, error, fatal LOG_LEVEL=debug # Whisper live settings WHISPERLIVE_SSL=false WHISPL_USE_CUSTOM_MODEL=false FASTERWHISPER_MODEL=faster-whisper-large-v3 WHISPERLIVE_URL=${APP_WS_PROTOCOL}://whisperlive.${APP_URL} ## SearXNG Settings SEARXNG_URL=${APP_PROTOCOL}://search.${APP_URL} SEARXNG_SECRET="" # generate a secret key e.g. openssl rand -base64 32 SEARXNG_PORT=${PORT_SEARXNG} # default port SEARXNG_BIND_ADDRESS=0.0.0.0 # default address SEARXNG_IMAGE_PROXY=true # enable image proxy SEARXNG_LIMITER=false # can be enabled to limit the number of requests per IP address SEARXNG_DEFAULT_DEPTH=basic # Set to 'basic' or 'advanced', only affects SearXNG searches SEARXNG_MAX_RESULTS=50 # Maximum number of results to return from SearXNG SEARXNG_ENGINES=google,bing,duckduckgo,wikipedia # Search engines to use SEARXNG_TIME_RANGE=None # Time range for search results: day, week, month, year, or None (for all time) SEARXNG_SAFESEARCH=0 # Safe search setting: 0 (off), 1 (moderate), 2 (strict) ## Morphic Settings NEXT_PUBLIC_BASE_URL=http://morphic:3001 USE_LOCAL_REDIS=true LOCAL_REDIS_URL=redis://redis:6379 SEARXNG_API_URL=${APP_PROTOCOL}://search.${APP_URL} SEARCH_API=searxng # use searxng, tavily or exa ## Notion settings NOTION_CAPTAINS_LOG_SENDER_INTERNAL_INTEGRATION_SECRET=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 ## API Keys OPENAI_API_KEY=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 LANGCHAIN_API_KEY=ls__27405da61a724d18ba4833a0b79730e0 ## Other Settings LANGCHAIN_TRACING_V2=true LANGCHAIN_PROJECT='LangChain Perpexity Clone with human in the loop for Classroom Copilot' USER_AGENT='cc_user_agent' # Google API Settings YOUTUBE_API_KEY=AIzaSyDbpJInK6dsFUjY6oG60FlzYkj7JUJmUNs GOOGLE_CLIENT_SECRETS_FILE=Users/kcar/ClassroomCopilot/backend/app/secrets/google_cloud_yt_credentials.json