From 8e77130c6273c793dcb6fd55bbda496a44c3cfff Mon Sep 17 00:00:00 2001 From: Warp Agent Date: Fri, 26 Dec 2025 18:10:19 +0000 Subject: [PATCH] add logo and version release information --- frontend/public/logo.png | Bin 0 -> 22174 bytes frontend/src/components/Layout.tsx | 59 ++++++++++++++++++++++++++--- frontend/src/pages/Login.tsx | 24 ++++++++++-- frontend/src/pages/System.tsx | 3 -- frontend/vite.config.ts | 5 +++ 5 files changed, 79 insertions(+), 12 deletions(-) create mode 100644 frontend/public/logo.png diff --git a/frontend/public/logo.png b/frontend/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2cd032ed1d8e2057793087deb146c353a2b5b6b7 GIT binary patch literal 22174 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 A%K!iX literal 0 HcmV?d00001 diff --git a/frontend/src/components/Layout.tsx b/frontend/src/components/Layout.tsx index 8edd57e..e5285c1 100644 --- a/frontend/src/components/Layout.tsx +++ b/frontend/src/components/Layout.tsx @@ -12,13 +12,28 @@ import { Server, Users } from 'lucide-react' -import { useState } from 'react' +import { useState, useEffect } from 'react' export default function Layout() { const { user, clearAuth } = useAuthStore() const navigate = useNavigate() const location = useLocation() - const [sidebarOpen, setSidebarOpen] = useState(true) + const [sidebarOpen, setSidebarOpen] = useState(false) + + // Set sidebar open by default on desktop, closed on mobile + useEffect(() => { + const handleResize = () => { + if (window.innerWidth >= 1024) { + setSidebarOpen(true) + } else { + setSidebarOpen(false) + } + } + + handleResize() // Set initial state + window.addEventListener('resize', handleResize) + return () => window.removeEventListener('resize', handleResize) + }, []) const handleLogout = () => { clearAuth() @@ -48,6 +63,14 @@ export default function Layout() { return (
+ {/* Mobile backdrop overlay */} + {sidebarOpen && ( +
setSidebarOpen(false)} + /> + )} + {/* Sidebar */}
{/* Header */}
-
-
+
+ Calypso Logo { + // Fallback to text if image not found + const target = e.target as HTMLImageElement + target.style.display = 'none' + const fallback = target.nextElementSibling as HTMLElement + if (fallback) fallback.style.display = 'flex' + }} + /> +
C
-

Calypso

+
+

Calypso

+

Dev Release V.1

+
+
{/* Page content */}
diff --git a/frontend/src/pages/Login.tsx b/frontend/src/pages/Login.tsx index 83b524f..b58b760 100644 --- a/frontend/src/pages/Login.tsx +++ b/frontend/src/pages/Login.tsx @@ -31,11 +31,29 @@ export default function LoginPage() { return (
-
-

- AtlasOS - Calypso +
+ {/* Logo */} +
+ Calypso Logo +
+ {/* Title */} +

+ Calypso

+ {/* Version */} +

+ Dev Release V.1 +

+ {/* Subtitle */}

+ Adastra Backup Storage Appliance +

+ {/* Sign in instruction */} +

Sign in to your account

diff --git a/frontend/src/pages/System.tsx b/frontend/src/pages/System.tsx index 8add6bb..bd3af61 100644 --- a/frontend/src/pages/System.tsx +++ b/frontend/src/pages/System.tsx @@ -18,9 +18,6 @@ export default function System() { {/* Top Navigation */}
- {/* Breadcrumbs */}
diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index f4ddf09..7cb9b11 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -13,6 +13,11 @@ export default defineConfig({ server: { host: '0.0.0.0', // Listen on all interfaces to allow access via IP address port: 3000, + allowedHosts: [ + 'atlas-demo.avt.data-center.id', + 'localhost', + '.localhost', + ], proxy: { '/api': { target: 'http://localhost:8080',