services: web: build: ./web container_name: lazyflat-web restart: unless-stopped depends_on: apply: condition: service_started environment: # Coolify injects SOURCE_COMMIT at runtime on every deploy; settings.py # reads GIT_COMMIT and renders it in the footer. - GIT_COMMIT=${SOURCE_COMMIT:-dev} - AUTH_USERNAME=${AUTH_USERNAME} - AUTH_PASSWORD_HASH=${AUTH_PASSWORD_HASH} - SESSION_SECRET=${SESSION_SECRET} - COOKIE_SECURE=${COOKIE_SECURE:-true} - INTERNAL_API_KEY=${INTERNAL_API_KEY} - APPLY_URL=http://apply:8000 - APPLY_TIMEOUT=${APPLY_TIMEOUT:-600} - APPLY_FAILURE_THRESHOLD=${APPLY_FAILURE_THRESHOLD:-3} - DATA_DIR=/data - SESSION_MAX_AGE_SECONDS=${SESSION_MAX_AGE_SECONDS:-604800} - LOGIN_RATE_LIMIT=${LOGIN_RATE_LIMIT:-5} - LOGIN_RATE_WINDOW_SECONDS=${LOGIN_RATE_WINDOW_SECONDS:-900} - RETENTION_DAYS=${RETENTION_DAYS:-14} - RETENTION_RUN_INTERVAL_SECONDS=${RETENTION_RUN_INTERVAL_SECONDS:-3600} - PUBLIC_URL=${PUBLIC_URL:-https://flat.lab.moritz.run} - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-} - ANTHROPIC_MODEL=${ANTHROPIC_MODEL:-claude-haiku-4-5-20251001} volumes: - lazyflat_data:/data expose: - "8000" apply: build: ./apply container_name: lazyflat-apply restart: unless-stopped expose: - "8000" environment: - INTERNAL_API_KEY=${INTERNAL_API_KEY} - HEADLESS=true - BROWSER_WIDTH=${BROWSER_WIDTH:-600} - BROWSER_HEIGHT=${BROWSER_HEIGHT:-800} - BROWSER_LOCALE=${BROWSER_LOCALE:-de-DE} - POST_SUBMISSION_SLEEP_MS=${POST_SUBMISSION_SLEEP_MS:-0} alert: build: ./alert container_name: lazyflat-alert restart: unless-stopped depends_on: web: condition: service_started environment: - WEB_URL=http://web:8000 - INTERNAL_API_KEY=${INTERNAL_API_KEY} - SLEEP_INTERVALL=${SLEEP_INTERVALL:-60} - GMAPS_API_KEY=${GMAPS_API_KEY} - BERLIN_WOHNEN_USERNAME=${BERLIN_WOHNEN_USERNAME} - BERLIN_WOHNEN_PASSWORD=${BERLIN_WOHNEN_PASSWORD} volumes: lazyflat_data: