ModelForge CI
deploy: 2026-06-19 19:24 UTC
6761f70
Raw
History Blame Contribute Delete
2.19 kB
import { createClient } from "@/lib/supabase/server"
import { MobileNav } from "./mobile-nav"
const DEV_PREVIEW = process.env.NEXT_PUBLIC_DEV_PREVIEW === "true"
export async function AppShell({ children }: { children: React.ReactNode }) {
let userEmail: string | undefined
if (!DEV_PREVIEW) {
const supabase = await createClient()
const { data: { user } } = await supabase.auth.getUser()
userEmail = user?.email
} else {
userEmail = "demo@modelforge.ai"
}
return (
<div className="flex min-h-screen grain">
{/* ── Aurora background — fixed, behind everything ── */}
<div className="aurora-bg" aria-hidden>
<div className="aurora-orb aurora-1" />
<div className="aurora-orb aurora-2" />
<div className="aurora-orb aurora-3" />
<div className="aurora-orb aurora-4" />
</div>
<MobileNav userEmail={userEmail} />
<main className="flex-1 ml-0 md:ml-60 min-h-screen relative z-10">
{/* Dot grid */}
<div className="pointer-events-none fixed inset-0 md:ml-60 bg-grid opacity-40 z-0" />
{/* Vignette fade at edges */}
<div
className="pointer-events-none fixed inset-0 md:ml-60 z-0"
style={{
background:
"radial-gradient(ellipse 90% 55% at 50% 0%, transparent 30%, rgba(6,10,16,0.7) 100%)",
}}
/>
{/* Dev preview banner */}
{DEV_PREVIEW && (
<div
className="relative z-20 flex items-center justify-center gap-2 px-4 py-2 text-xs font-mono"
style={{
background: "rgba(245,158,11,0.1)",
borderBottom: "1px solid rgba(245,158,11,0.25)",
color: "rgba(251,191,36,0.85)",
}}
>
<span
className="h-1.5 w-1.5 rounded-full bg-amber-400 animate-pulse inline-block"
/>
DEV PREVIEW — auth bypassed · Supabase queries return empty data · set real credentials to connect
</div>
)}
{/* Page content */}
<div className="relative z-10">
{children}
</div>
</main>
</div>
)
}