Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 15 additions & 15 deletions web/app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
--card-foreground: 222 47% 11%;
--popover: 0 0% 100%;
--popover-foreground: 222 47% 11%;
--primary: 221 83% 53%;
--primary: 38 39% 55%;
--primary-foreground: 210 40% 98%;
--secondary: 210 40% 96%;
--secondary-foreground: 222 47% 11%;
Expand All @@ -19,33 +19,33 @@
--destructive-foreground: 210 40% 98%;
--border: 214 32% 91%;
--input: 214 32% 91%;
--ring: 221 83% 53%;
--ring: 38 39% 55%;
--radius: 0.5rem;
--sidebar-width: 16rem;
--success: 142 76% 36%;
--warning: 38 92% 50%;
}

.dark {
--background: 222 47% 6%;
--background: 0 0% 10%;
--foreground: 210 40% 98%;
--card: 222 47% 9%;
--card: 0 0% 13%;
--card-foreground: 210 40% 98%;
--popover: 222 47% 9%;
--popover: 0 0% 13%;
--popover-foreground: 210 40% 98%;
--primary: 217 91% 60%;
--primary-foreground: 222 47% 6%;
--secondary: 217 33% 17%;
--primary: 38 39% 73%;
--primary-foreground: 0 0% 10%;
--secondary: 0 0% 17%;
--secondary-foreground: 210 40% 98%;
--muted: 217 33% 17%;
--muted-foreground: 215 20% 65%;
--accent: 217 33% 17%;
--muted: 0 0% 17%;
--muted-foreground: 0 0% 65%;
--accent: 0 0% 17%;
--accent-foreground: 210 40% 98%;
--destructive: 0 63% 50%;
--destructive-foreground: 210 40% 98%;
--border: 217 33% 17%;
--input: 217 33% 17%;
--ring: 217 91% 60%;
--border: 0 0% 20%;
--input: 0 0% 20%;
--ring: 38 39% 73%;
--success: 142 71% 45%;
--warning: 38 92% 50%;
}
Expand All @@ -58,4 +58,4 @@ body {
background: hsl(var(--background));
color: hsl(var(--foreground));
font-family: var(--font-geist-sans), system-ui, sans-serif;
}
}
12 changes: 3 additions & 9 deletions web/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";
import { ThemeProvider } from "@/components/theme-provider";
import { AuthProvider } from "@/lib/auth-context";
import { Sidebar } from "@/components/sidebar";
import { AppShell } from "@/components/app-shell";

const geistSans = Geist({
variable: "--font-geist-sans",
Expand All @@ -18,7 +18,7 @@ const geistMono = Geist_Mono({
export const metadata: Metadata = {
title: "Birck Digital Twin Platform",
description:
"Centralized platform for smart digital twins — Purdue Birck Nanotechnology Center & SMART USA Partners",
"Multi-domain platform for intelligent digital twins — nanoHUB · Purdue University",
};

export default function RootLayout({
Expand All @@ -33,16 +33,10 @@ export default function RootLayout({
>
<ThemeProvider>
<AuthProvider>
<div className="flex h-screen overflow-hidden">
<Sidebar />
<main className="flex-1 overflow-y-auto">
<div className="p-6 lg:p-8 max-w-7xl mx-auto">{children}</div>
</main>
</div>
<AppShell>{children}</AppShell>
</AuthProvider>
</ThemeProvider>
</body>
</html>
);
}

41 changes: 24 additions & 17 deletions web/app/login/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,32 +11,39 @@ export default function LoginPage() {
return (
<div className="min-h-screen flex">
{/* Left Panel — Branding */}
<div className="hidden lg:flex lg:w-1/2 bg-gradient-to-br from-[hsl(221,83%,30%)] via-[hsl(221,83%,20%)] to-[hsl(260,60%,15%)] flex-col justify-between p-12 text-white">
<div className="hidden lg:flex lg:w-1/2 bg-[#1a1a1a] flex-col justify-between p-12 text-white relative overflow-hidden">
{/* Subtle gold accent line at top */}
<div className="absolute top-0 left-0 right-0 h-1 bg-gradient-to-r from-[#CFB991] via-[#B89D65] to-transparent" />

<div className="flex items-center gap-3">
<div className="flex items-center justify-center w-10 h-10 rounded-lg bg-white/10 backdrop-blur">
<Atom className="w-6 h-6" />
<div className="flex items-center justify-center w-10 h-10 rounded-lg bg-[#CFB991]/15 border border-[#CFB991]/30">
<Atom className="w-6 h-6 text-[#CFB991]" />
</div>
<div>
<span className="font-bold text-lg">Birck Digital Twin</span>
<span className="block text-xs text-white/60">SMART USA Platform</span>
<span className="font-bold text-lg text-[#CFB991]">Multi-Domain Digital Twin Platform</span>
<span className="block text-xs text-white/50">nanoHUB · Purdue University</span>
</div>
</div>

<div>
<h1 className="text-4xl font-bold leading-tight mb-4">
Centralized Smart<br />Digital Twin Platform
<h1
className="text-5xl font-extrabold leading-tight mb-5"
style={{
color: "#1a1a1a",
WebkitTextStroke: "1.5px #CFB991",
paintOrder: "stroke fill",
}}
>
Accelerate Discovery with<br />Intelligent Digital Twins
</h1>
<p className="text-white/70 text-lg leading-relaxed max-w-lg">
AI-driven optimization for semiconductor manufacturing, materials science, and bioengineering equipment across Purdue and SMART USA partners.
<p className="text-white/80 text-lg leading-relaxed max-w-lg">
An open, domain-agnostic platform for AI-driven equipment optimization. Whether your work spans semiconductor manufacturing, materials science, bioengineering, or beyond — <span className="text-[#CFB991] font-medium">bring your data and build your digital twin.</span>
</p>
</div>

<div className="flex items-center gap-6 text-sm text-white/50">
<span>Purdue University</span>
<span></span>
<span>Birck Nanotechnology Center</span>
<span></span>
<span>SMART USA</span>
<div className="flex items-center gap-8">
<img src="/purdue-logo-clean.svg" alt="Purdue University" className="h-14 object-contain" />
<img src="/nanohub-logo-clean.svg" alt="nanoHUB" className="h-10 object-contain" />
</div>
</div>

Expand Down Expand Up @@ -69,8 +76,8 @@ export default function LoginPage() {
key={u.id}
onClick={() => setSelectedUser(u)}
className={`p-2 rounded-md text-left text-xs transition-all ${selectedUser.id === u.id
? "bg-[hsl(var(--primary))] text-[hsl(var(--primary-foreground))] ring-2 ring-[hsl(var(--primary))]"
: "bg-[hsl(var(--muted))] text-[hsl(var(--muted-foreground))] hover:bg-[hsl(var(--accent))]"
? "bg-[hsl(var(--primary))] text-[hsl(var(--primary-foreground))] ring-2 ring-[hsl(var(--primary))]"
: "bg-[hsl(var(--muted))] text-[hsl(var(--muted-foreground))] hover:bg-[hsl(var(--accent))]"
}`}
>
<span className="font-medium block">{u.name.split(" ").slice(-1)[0]}</span>
Expand Down
24 changes: 24 additions & 0 deletions web/components/app-shell.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
"use client";

import { usePathname } from "next/navigation";
import { Sidebar } from "@/components/sidebar";

const NO_SHELL_ROUTES = ["/login"];

export function AppShell({ children }: { children: React.ReactNode }) {
const pathname = usePathname();
const isFullScreen = NO_SHELL_ROUTES.some((r) => pathname.startsWith(r));

if (isFullScreen) {
return <>{children}</>;
}

return (
<div className="flex h-screen overflow-hidden">
<Sidebar />
<main className="flex-1 overflow-y-auto">
<div className="p-6 lg:p-8 max-w-7xl mx-auto">{children}</div>
</main>
</div>
);
}
21 changes: 21 additions & 0 deletions web/public/nanohub-logo-clean.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added web/public/nanohub.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions web/public/purdue-logo-clean.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions web/public/purdue-logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added web/public/purdue.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.