from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): model_config = SettingsConfigDict(env_file=".env", extra="ignore") database_url: str session_secret: str session_https_only: bool = True session_max_age_seconds: int = 60 * 60 * 24 * 14 # Optional: push notifications are skipped (logged, not an error) if # unset, so existing deployments don't have to configure this to keep # running. Generate a pair with `python -m app.cli generate-vapid-keys`. vapid_public_key: str | None = None vapid_private_key: str | None = None vapid_subject: str = "mailto:admin@example.com" # Cross-instance WebSocket fan-out + presence (ARCHITECTURE.md phase 5). # No credentials in a local-dev default, unlike database_url. redis_url: str = "redis://localhost:6379/0" settings = Settings()