configuration reference
Copy sample-config.yaml to config.yaml and fill in your values.
config.yaml is gitignored — never commit real secrets. Unknown keys are
ignored; missing keys fall back to the defaults below.
backpulse: server: listen: ":8080" # bind address inside the container base_url: "https://backpulse.example.com" # externally reachable origin commitment_allow_origin: "*" # CORS origin for POST /commitments database: postgres_url: "postgresql://backpulse:backpulse@postgres:5432/backpulse" worker: sweep_interval_sec: 15 # detection sweep cadence self_heartbeat_url: "" # dead-man URL for backpulse itself email: provider: "smtp" smtp_host: "mail.example.com" smtp_port: 587 smtp_user: "backpulse@example.com" smtp_pass: "changeme" # empty = delivery disabled from_addr: "backpulse@example.com" notify: max_attempts: 5 # retries before dead-letter tenant_email_per_hour: 100 recipient_email_per_hour: 20 limits: ping_rate_per_min: 60 max_body_bytes: 10240 retention: ping_days: 30 auth: session_secret: "changeme-generate-with-openssl-rand-hex-32" # REQUIRED, see belowTwo keys refuse to boot until set: database.postgres_url and
auth.session_secret (minimum 32 characters — generate with
openssl rand -hex 32). The placeholder value is rejected explicitly.
Tune worker.sweep_interval_sec down for tighter detection or up for a
quieter database. worker.self_heartbeat_url points at any external
dead-man’s switch so you learn if backpulse itself stops running.