+
+
+
Control room
+
Overview
+
System health, sending limits, and the signals that need attention.
+
+
+
+
+
+
+
+
+
+
+
Bot status{stats.isRunning ? 'Running' : 'Stopped'}
+
+ {stats.dryRunMode ? Dry run : null}
+ {stats.messagesThisHour} of {stats.maxMessagesPerHour} messages used this hour
+
+
+ {stats.invitationCooldown ? (
+
+ Reddit invitation cooldown
+ {stats.invitationCooldown.reason}
+
+ ) : null}
+
+
+
+
+ {timersQuery.isPending ? (
+
+ ) : timersQuery.isError ? (
+
+ Sending window unavailable
+ {errorMessage(timersQuery.error)}
+
+
+ ) : (
+
+ )}
+
+
+
+ {controlMutation.isError ?
{errorMessage(controlMutation.error)}
: null}
+ {confirmationAction ? (
+
setConfirmationAction(null)}
+ onConfirm={confirmControl}
+ />
+ ) : null}
+
+ );
+}
diff --git a/apps/dashboard/src/features/placeholder-page.tsx b/apps/dashboard/src/features/placeholder-page.tsx
new file mode 100644
index 0000000..0d4641a
--- /dev/null
+++ b/apps/dashboard/src/features/placeholder-page.tsx
@@ -0,0 +1,15 @@
+interface PlaceholderPageProps {
+ title: string;
+ description: string;
+}
+
+export function PlaceholderPage({ title, description }: PlaceholderPageProps) {
+ return (
+