- |
+ |
|
-
+ |
{assignment.server?.ip_address ?? "n/a"}
|
-
+ |
{assignment.revoked_at ? "revoked" : "active"}
|
-
+ |
{new Date(assignment.assigned_at).toLocaleDateString()}
|
-
+ |
{assignment.revoked_at
? new Date(assignment.revoked_at).toLocaleDateString()
diff --git a/web/app/(app)/keys/page.tsx b/web/app/(app)/keys/page.tsx
index ff0bb66..26cd967 100644
--- a/web/app/(app)/keys/page.tsx
+++ b/web/app/(app)/keys/page.tsx
@@ -106,10 +106,10 @@ export default function KeysPage() {
});
return (
-
+
{showUpload && setShowUpload(false)} />}
-
+
SSH Keys
@@ -146,21 +146,21 @@ export default function KeysPage() {
{keys.map((key: Key) => (
- |
+ |
{key.label}
|
-
+ |
{key.fingerprint}
|
-
+ |
{key.source}
|
-
+ |
{key.assigned_count ?? 0} server{(key.assigned_count ?? 0) !== 1 ? "s" : ""}
|
-
+ |
{new Date(key.created_at).toLocaleDateString()}
|
diff --git a/web/app/(app)/layout.tsx b/web/app/(app)/layout.tsx
index 5716a50..be7a8f8 100644
--- a/web/app/(app)/layout.tsx
+++ b/web/app/(app)/layout.tsx
@@ -1,6 +1,5 @@
import { AuthProvider } from "@/components/AuthProvider";
-import { LicenseBanner } from "@/components/LicenseBanner";
-import { Sidebar } from "@/components/Sidebar";
+import { AppShell } from "@/components/AppShell";
export default function AppLayout({
children,
@@ -9,13 +8,7 @@ export default function AppLayout({
}) {
return (
-
-
-
-
- {children}
-
-
+ {children}
);
}
diff --git a/web/app/(app)/monitors/[id]/edit/page.tsx b/web/app/(app)/monitors/[id]/edit/page.tsx
index 8a6b3f8..de1e933 100644
--- a/web/app/(app)/monitors/[id]/edit/page.tsx
+++ b/web/app/(app)/monitors/[id]/edit/page.tsx
@@ -37,14 +37,14 @@ export default function EditMonitorPage() {
if (!monitor) {
return (
-
+
);
}
return (
-
+
← {monitor.name}
diff --git a/web/app/(app)/monitors/[id]/page.tsx b/web/app/(app)/monitors/[id]/page.tsx
index 08ca9d9..43edc76 100644
--- a/web/app/(app)/monitors/[id]/page.tsx
+++ b/web/app/(app)/monitors/[id]/page.tsx
@@ -86,7 +86,7 @@ export default function MonitorDetailPage() {
if (!monitor) {
return (
-
+
);
@@ -96,7 +96,7 @@ export default function MonitorDetailPage() {
const last24 = all.slice(-24);
return (
-
+
@@ -180,17 +180,17 @@ export default function MonitorDetailPage() {
{incidents.map((inc) => (
- |
+ |
{new Date(inc.started_at).toLocaleString()}
|
-
+ |
{inc.resolved_at ? (
{new Date(inc.resolved_at).toLocaleString()}
) : (
ongoing
)}
|
-
+ |
{inc.cause || "n/a"}
|
diff --git a/web/app/(app)/monitors/new/page.tsx b/web/app/(app)/monitors/new/page.tsx
index bc536f2..d754dac 100644
--- a/web/app/(app)/monitors/new/page.tsx
+++ b/web/app/(app)/monitors/new/page.tsx
@@ -20,7 +20,7 @@ export default function NewMonitorPage() {
});
return (
-
+
← Monitors
diff --git a/web/app/(app)/monitors/page.tsx b/web/app/(app)/monitors/page.tsx
index a9d035a..5c17228 100644
--- a/web/app/(app)/monitors/page.tsx
+++ b/web/app/(app)/monitors/page.tsx
@@ -31,8 +31,8 @@ export default function MonitorsPage() {
});
return (
-
-
+
+
Monitors
Service uptime and latency checks.
@@ -76,24 +76,24 @@ export default function MonitorsPage() {
{monitors.map((m) => (
- |
+ |
{m.name}
|
-
+ |
{m.type}
|
-
+ |
{targetSummary(m)}
|
-
+ |
{m.state.status}
|
-
+ |
{m.state.latency_ms}ms
|
-
+ |
{m.state.last_check_at ? new Date(m.state.last_check_at).toLocaleTimeString() : "n/a"}
diff --git a/web/app/(app)/secrets/[group]/page.tsx b/web/app/(app)/secrets/[group]/page.tsx
index 24bbb1f..0745b68 100644
--- a/web/app/(app)/secrets/[group]/page.tsx
+++ b/web/app/(app)/secrets/[group]/page.tsx
@@ -138,11 +138,11 @@ function SecretRow({ group, secret }: { group: string; secret: Secret }) {
return (
|
- |
+ |
{secret.key}
|
- {revealed == null ? •••••••••••• : {revealed}} |
-
+ | {revealed == null ? •••••••••••• : {revealed}} |
+
{new Date(secret.updated_at).toLocaleString()}
|
@@ -241,14 +241,14 @@ export default function SecretGroupPage() {
});
return (
-
+
{showYaml && setShowYaml(false)} />}
← Back to secrets
-
+
{group}
diff --git a/web/app/(app)/secrets/page.tsx b/web/app/(app)/secrets/page.tsx
index ff746f0..f8c28ad 100644
--- a/web/app/(app)/secrets/page.tsx
+++ b/web/app/(app)/secrets/page.tsx
@@ -50,7 +50,7 @@ function NewGroupModal({ onClose }: { onClose: () => void }) {
className={`${inputClass} font-mono`}
/>
-
+
+
{showNew && setShowNew(false)} />}
-
+
Secrets
@@ -139,15 +139,15 @@ export default function SecretsPage() {
{groups.map((g: SecretGroupSummary) => (
- |
+ |
{g.group}
|
-
+ |
{g.key_count} key{g.key_count !== 1 ? "s" : ""}
|
-
+ |
{new Date(g.updated_at).toLocaleString()}
diff --git a/web/app/(app)/servers/[id]/console/page.tsx b/web/app/(app)/servers/[id]/console/page.tsx
index 675db57..8705175 100644
--- a/web/app/(app)/servers/[id]/console/page.tsx
+++ b/web/app/(app)/servers/[id]/console/page.tsx
@@ -158,14 +158,14 @@ export default function ServerConsolePage() {
if (!server) {
return (
-
+
Server not found or failed to load.
);
}
return (
-
+
← {server.hostname}
@@ -267,7 +267,7 @@ export default function ServerConsolePage() {
) : (
-
+
diff --git a/web/app/(app)/servers/[id]/page.tsx b/web/app/(app)/servers/[id]/page.tsx
index d0124cf..0fff5ee 100644
--- a/web/app/(app)/servers/[id]/page.tsx
+++ b/web/app/(app)/servers/[id]/page.tsx
@@ -161,7 +161,7 @@ function GenerateKeyModal({ onClose, onSubmit, isPending }: { onClose: () => voi
-
+
{(["ed25519", "rsa", "ecdsa"] as const).map((t) => (
| | | |