-
Dashboard
- {user &&
Welcome, {user.full_name ?? user.email}
}
+
+ {/* Welcome header */}
+
+
+ {greeting}, {displayName}!
+
+
+ Here are your pinned apps. Customize your dashboard below.
+
+
+
+ {/* Toolbar */}
+
+
My Apps
+ {editing ? (
+
+
+
+
+ ) : (
+
+ )}
+
+
+ {/* Pinned apps grid */}
+ {!editing && pinnedServices.length === 0 && (
+
+
No apps pinned yet.
+
+
+ )}
+
+ {pinnedServices.length > 0 && (
+
+ {pinnedServices.map((svc) => (
+
+ ))}
+
+ )}
+
+ {/* Edit mode — available apps to add */}
+ {editing && unpinnedServices.length > 0 && (
+ <>
+
+ Available Apps
+
+
+ {unpinnedServices.map((svc) => (
+
+ ))}
+
+ >
+ )}
+
+ {savePrefs.isError && (
+
+ Failed to save preferences. Please try again.
+
+ )}
+
+ );
+}
+
+interface AppCardProps {
+ svc: ServiceStatus;
+ editing: boolean;
+ pinned: boolean;
+ onToggle: (id: string) => void;
+}
+
+function AppCard({ svc, editing, pinned, onToggle }: AppCardProps) {
+ const canOpen = svc.healthy && !!svc.app_path;
+
+ return (
+
+ {/* Edit overlay button */}
+ {editing && (
+
+ )}
+
+
+
{svc.name}
+
+ {svc.healthy ? "Available" : "Unavailable"}
+
+
+
+
{svc.description}
+
+ {!editing && canOpen && (
+
+
+ Open
+
+
+
+ )}
);
}
diff --git a/frontend/src/pages/SettingsPage.tsx b/frontend/src/pages/SettingsPage.tsx
new file mode 100644
index 0000000..2a1fde7
--- /dev/null
+++ b/frontend/src/pages/SettingsPage.tsx
@@ -0,0 +1,15 @@
+import { Settings } from "lucide-react";
+
+export default function SettingsPage() {
+ return (
+
+
+
+
Settings
+
+
+ User and application settings will be available here in a future update.
+
+
+ );
+}