guides/quiet_hours.md

# Quiet Hours

Quiet hours defer dispatch based on the recipient's local time. DripDrop leans
on Postgres timezone functions so the decision is made consistently with the
database clock.

## Timezone Resolution

DripDrop resolves the timezone in this order:

* `enrollment.data["timezone"]`
* `step.config["timezone"]`
* `config :dripdrop, :quiet_hours_timezones`, keyed by channel
* sequence metadata `"default_timezone"` or `"timezone"`
* `config :dripdrop, :default_timezone`, defaulting to `"Etc/UTC"`

The application quiet-hours default is `{8, 21}` for every channel unless a
step overrides it or sets `"quiet_hours" => false`.

## Step Configuration

```elixir
%{
  "quiet_hours" => %{
    "start" => 8,
    "end" => 21
  },
  "timezone" => "America/New_York"
}
```

The end hour is exclusive, so `{8, 21}` allows sends from 8:00 through 20:59 in
the resolved timezone. Windows can wrap midnight. When a send is outside the
allowed window, the dispatch worker returns a deferral time and emits
`[:dripdrop, :policy, :quiet_hours]`.