diff --git a/web/src/components/layout/AppShell.tsx b/web/src/components/layout/AppShell.tsx index 75da8ae..a2d7bad 100644 --- a/web/src/components/layout/AppShell.tsx +++ b/web/src/components/layout/AppShell.tsx @@ -1,11 +1,17 @@ import * as React from 'react' import { TopBar } from './TopBar' -export function AppShell({ children }: { children: React.ReactNode }) { +interface AppShellProps { + children: React.ReactNode + /** When true, removes default padding/max-width from the main content area */ + noPadding?: boolean +} + +export function AppShell({ children, noPadding = false }: AppShellProps) { return (
-
+
{children}
diff --git a/web/src/components/layout/TopBar.tsx b/web/src/components/layout/TopBar.tsx index e7eeac4..c4ff960 100644 --- a/web/src/components/layout/TopBar.tsx +++ b/web/src/components/layout/TopBar.tsx @@ -1,4 +1,4 @@ -import { Plus, QrCode, Cable } from 'lucide-react' +import { Plus, QrCode, Cable, MessageSquare } from 'lucide-react' import { Link } from '@tanstack/react-router' import { Button } from '@/components/ui/button' @@ -9,6 +9,12 @@ export function TopBar() { HWLab
+ +
+ +
+ {conversationsQuery.isLoading && ( +

Loading...

+ )} + {conversationsQuery.data?.length === 0 && ( +

+ No conversations yet +

+ )} + {conversationsQuery.data?.map((conv) => ( + + ))} +
+ + + {/* Main chat panel */} +
+ {/* Messages area */} +
+ {allMessages.length === 0 && !streamingContent && ( +
+ +

Ask anything about your homelab

+
+ )} + + {allMessages.map((msg) => ( +
+
+ {msg.content} +
+
+ ))} + + {/* Streaming assistant message */} + {streamingContent && ( +
+
+ {streamingContent} + +
+
+ )} + +
+
+ + {/* Input row */} +
+ + +