🔒
This status page is private
{{ page.title }} shares live status with its team{% if page.password_hash %} and with people who have the page password{% endif %}.
{% if unlock_error %}{{ unlock_error }}
{% endif %}
Log in to view
{% if page.password_hash %}
or unlock with the page password
Access stays unlocked on this browser for 30 days.
{% endif %}{{ page.description }}
{% endif %} {% if notice %}{{ notice }}
{% endif %}
{% if sub_error %}{{ sub_error }}
{% endif %}
{{ overall_text }}
Updated {{ now.strftime('%d %b %Y, %H:%M UTC') }} · refreshes every minuteScheduled maintenance
Next 14 days
{% for r in active_maint %}{% set i = r.i %}
{% endfor %}
{% for w in maintenance %}
{% endfor %}
{% endif %}
{% macro component(r) %}
In progress {{ i.title }}
Details
Started {{ i.started_at.strftime('%d %b %H:%M UTC') }}{% if i.scheduled_end %} · expected to finish {{ i.scheduled_end.strftime('%d %b %H:%M UTC') }}{% endif %}{% if r.affected %} · {{ r.affected|join(', ') }}{% endif %}
{% if i.updates and i.updates[-1].message %}{{ i.updates[-1].message }}
{% endif %}{% if w.active %}In progress{% else %}Upcoming{% endif %} {{ w.name }}
{% if w.components %}{{ w.components|join(', ') }}{% else %}All components{% endif %}
{{ w.starts_at.strftime('%a %d %b, %H:%M') }} → {{ w.ends_at.strftime('%H:%M UTC') if w.ends_at.date() == w.starts_at.date() else w.ends_at.strftime('%a %d %b, %H:%M UTC') }}{% if w.repeat != 'none' %} · repeats {{ w.repeat }}{% endif %}
{{ r.name }}
{% for b in r.bars %}{% endfor %}
90 days ago{% if r.uptime90 is not none %}{{ r.uptime90 }}% uptime{% endif %}Today
Components
{{ rows|length }} monitored{{ g.name }}{{ state_label[g.state] }}
{% for r in g.rows %}{{ component(r) }}{% endfor %}
{% for r in ungrouped %}{{ component(r) }}{% endfor %}
{% endif %}
{% if not rows %}No components configured yet.
Incident history
Last 30 days
{% if inc_rows %}{% for r in inc_rows %}{% set i = r.i %}
{% if i.updates %}
{% endfor %}{% else %}{% endif %}
{{ i.title }}
{{ 'resolved' if i.resolved_at else i.status }}
{% if i.kind == 'maintenance' %}maintenance{% endif %}
{% if r.affected %}
Affected: {{ r.affected|join(', ') }}
{% endif %}
{{ i.started_at.strftime('%d %b %Y, %H:%M UTC') }}
{% if i.resolved_at %}lasted {{ fmt_duration(i.duration_seconds) }}{% elif i.scheduled_end %}until {{ i.scheduled_end.strftime('%d %b %H:%M UTC') }}{% else %}ongoing · {{ fmt_duration(i.duration_seconds) }}{% endif %}
{% if i.resolved_at %}lasted {{ fmt_duration(i.duration_seconds) }}{% elif i.scheduled_end %}until {{ i.scheduled_end.strftime('%d %b %H:%M UTC') }}{% else %}ongoing · {{ fmt_duration(i.duration_seconds) }}{% endif %}
-
{% for u in i.updates|reverse %}
- {{ u.status }}{% if u.message %} — {{ u.message }}{% endif %}{{ (u.at or '')[:16]|replace('T', ' ') }} UTC
{% endfor %}
{{ i.cause[:300] }}
{% endif %}
{% if i.postmortem %}Postmortem
{{ i.postmortem }}
{% endif %}
{{ i.postmortem }}
No incidents in the last 30 days.
Subscribe to updates
Atom / RSS feedGet a message whenever an incident is opened, updated or resolved: by email, in a Slack or Discord channel, or to any HTTPS endpoint (JSON webhook).