+ {minutesToTime(window.startMinute)}–{minutesToTime(window.startMinute + window.durationMinutes)}{' '} + Daily · {window.timezone} +
+Loading…
+Loading…
+Define daily quiet periods for backups or planned service work.
+ ++ {minutesToTime(window.startMinute)}–{minutesToTime(window.startMinute + window.durationMinutes)}{' '} + Daily · {window.timezone} +
+Confirm
+Integrations
-Configure incident alerts and visitor-friendly status updates from one place.
+Configure incident alerts, visitor-friendly updates, and planned downtime from one place.
Keep probing during planned work while suppressing alerts and excluding those checks from uptime.
+Payload preview
{`{
diff --git a/src/client/pages/StatusPage.tsx b/src/client/pages/StatusPage.tsx
index 0594a08..a816035 100644
--- a/src/client/pages/StatusPage.tsx
+++ b/src/client/pages/StatusPage.tsx
@@ -1,5 +1,5 @@
import { useEffect, useState } from 'react';
-import { Activity, CircleCheck, Database, RefreshCw, TriangleAlert, Zap } from 'lucide-react';
+import { Activity, CircleCheck, Database, RefreshCw, TriangleAlert, Wrench, Zap } from 'lucide-react';
import { Badge, type BadgeVariant } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
import { Empty, EmptyContent, EmptyDescription, EmptyMedia, EmptyTitle } from '@/components/ui/empty';
@@ -29,8 +29,11 @@ const SERVICE_STATUS: Record service.message) ?? [];
+ const maintenanceServices = status?.services.filter((service) => service.maintenance) ?? [];
useEffect(() => {
const timer = window.setInterval(() => setNow(Date.now()), 5_000);
@@ -126,6 +130,43 @@ export function StatusPage() {
Scheduled maintenance
+