Public page & integrations¶
Public status page¶
- Header with the logo, the application title (
applicationTitle, otherwisesiteName) and the buttons for time zone, theme, subscription and push. - Overall banner with the current status, a relative note of the last update, and the absolute timestamp. The timestamp is only shown in the banner on the start page, not in the header.
- Key figures below the banner: active incidents and outages (counting components), active maintenance, and days since the last incident or outage.
- Component groups with one card per group. Each component shows a 90-day bar, one segment per UTC calendar day, colored by the worst status of that day.
- Active incidents and outages, sorted by severity.
- Scheduled and running maintenance.
- History (
/history) with the outages, resolved incidents and completed maintenance of the last six months, 20 entries per page with pagination. - Service detail (
/service/[id]) with the availability table, monthly and quarterly SLA bars, the assigned SLA schedule (otherwise 24/7), and the incidents, maintenance and outages of the service. - Auto refresh: if
status_refresh_minutesis greater than 0, the start page reloads itself at that interval. The default is 0, which means off.
Signed-in team members additionally see internal services (mode active_internal) on the status page.
Phone layout¶
- Below the
smbreakpoint, the 90-day bar shows only the last 30 days. On the overview, its label then says 30 days and the percentage is hidden. On the service detail page, the label also says 30 days and the percentage stays unchanged. The full range is shown fromsmupward. - Tapping, clicking or keyboard-focusing a segment shows a detail line below the bar with date and status. Tapping outside, Escape or losing focus closes it. Hovering with the mouse still shows a tooltip.
- Below
sm, the monthly and quarterly bars are replaced by a list with value and target per period. - Below
md, the availability table is shown as one card per period. - Below
sm, the logo is smaller. Belowmd, the push button sits in a menu behind a bell icon.
Visitor time zone¶
Visitors can switch all times on the public portal between the operator's time zone and their browser time zone (lib/viewer-timezone.ts, components/viewer-timezone.tsx).
- The globe button sits in the header before the theme toggle. It only appears if the current UTC offset of the browser zone differs from the app zone.
- The choice is stored in the browser (localStorage, key
tz-mode) and applies immediately in other open tabs as well. - The server always renders in the app zone. The stored choice only takes effect after the page has loaded, so there are no hydration errors.
- Not switched are the days of the uptime bar (UTC days) and the times on "My data". The admin area always uses the app zone.
Themes¶
- Light is the default. Dark can be switched with the toggle in the header. The choice is stored in the browser.
- On first visit, the theme follows
prefers-color-scheme. A small inline script applies the theme before the first paint, so there is no flash. - The toggle has a fixed label ("Dark mode" or "Dunkelmodus") and shows its state through
aria-pressed. - Status colors are the same in both themes. The status badge keeps its own dark appearance.
Languages¶
The public UI is available in English and German (next-intl, messages/en.json and messages/de.json). The language is a site-wide setting (settings.language, default en), not a per-visitor choice. There is no language routing in the URL. It is set in the admin in the Local Settings card. <html lang> follows the setting.
All public pages are translated: status page, service detail, history, badge page, legal notice, data protection, the confirm and unsubscribe pages, "My data", the 404 page, the SLA and uptime components, and the error messages of the public forms. The footer links including "Powered by SLAtus", the relative time in the banner ("Updated … ago"), the push button's own notices, the labels of the outage cards, the badge text (badgeLabel, follows settings.language; a ?label= parameter takes precedence), the mails for unsubscribing and data access, and the "Source" value on "My data" follow the page language as well.
Still English only are:
- the RSS feed (
/feed.xml) - the API documentation at
/api-docsand the admin interface. Both are marked as an English subtree (lang="en"). - raw error messages from the browser or the server, for example when push permission is denied. They appear as delivered.
Date, time and number formats¶
Set in the admin under Settings → Locale:
- Time zone (
timezone) for display and for entering maintenance times. Daylight saving changes are handled correctly. Visitors can additionally switch to their browser zone (see above). - Display of the time zone next to timestamps: full name, short offset, or hidden.
- Short and long date format (presets).
- Decimal separator (
.or,) and decimal places (1 to 4) for all availability and SLA values, both in display and in input fields.
Incident feed and badge¶
| Endpoint | Purpose |
|---|---|
/feed.xml |
RSS feed of incidents, for feed readers and chat tools |
/badge.svg |
Dynamic SVG status badge. Parameters: style=flat and label=…. Use it as an image in a README or wiki. |
/badge |
Embeddable page that shows the badge |
Legal pages¶
/impressumrenders the company information from the settings (name, address, contact, legal notice). If nothing is filled in, it shows a hint that no legal notice is configured./dataprotectionpolicyrenders the data protection text entered as HTML in the settings. The HTML is sanitized before rendering. Onlyh1,h2,h3,bandiare kept, and all attributes are removed.
Showing resolved incidents¶
show_resolved_minutes keeps a resolved incident visible for the given number of minutes after its resolution, in green. The default is 0, so the incident disappears right away. It does not count toward the active incidents and outages in the key figures.
Public APIs¶
For machine-readable access, see Public API: /api/status (JSON), /feed.xml (RSS), /badge.svg (SVG) and /openapi.json with the interactive documentation at /api-docs.