// ============================================================
// 4 modern SaaS nav layouts. Each artboard is a full 1440×900
// app/marketing chrome with the nav as the focal point and just
// enough body content to read context. Original brand "Lattice
// Studio" used throughout so the navs feel like one product
// family — the variable is the nav pattern itself.
// ============================================================
// Generic placeholder block
const NavImgSlot = ({ label, h = 200, tone = "light" }) => {
const p = tone === "dark"
? { bg: "#1a1a1f", stripe: "#222229", ink: "#7a7a85" }
: { bg: "#f3f3f0", stripe: "#e7e7e3", ink: "#7a7a72" };
return (
{label}
);
};
// Tiny stroke icon helper — single line so it doesn't bloat the file
const I = ({ d, size = 16, sw = 1.6 }) => (
{d}
);
// Common path sets, kept terse
const Paths = {
search: <> >,
bell: <> >,
cmd: ,
home: <> >,
inbox: <> >,
people: <> >,
building: <> >,
target: <> >,
check: <> >,
workflow: <> >,
bar: <> >,
hash: ,
lock: <> >,
plus: ,
chevron: ,
arrow: ,
star: ,
doc: <> >,
spark: ,
};
const sansStack = "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif";
// ============================================================
// 1. SIDEBAR — workspace + sections + secondary
// (Linear / Notion / Twenty school)
// ============================================================
const NavSidebar = () => {
const ItemRow = ({ icon, label, count, active }) => (
{label}
{count && {count} }
);
const SectionHeader = ({ label }) => (
{label}
);
return (
{/* SIDEBAR */}
{/* Workspace switcher */}
L
Lattice Studio
Free · 4 members
{/* Search */}
{/* Nav */}
{/* Footer */}
MR
Mira Reyes
mira@lattice.co
{/* CONTENT */}
Workspaces / Marketing site
Share
New page
Marketing site
14 pages · last edited 4 minutes ago by Mira
{["Homepage", "Pricing", "Changelog"].map(t => (
))}
);
};
// ============================================================
// 2. ICON RAIL + CONTEXT PANEL — Slack / Discord / Mail school
// ============================================================
const NavIconRail = () => {
const RailIcon = ({ icon, active, badge, color }) => (
{badge && (
{badge}
)}
);
const ChannelItem = ({ name, active, unread, mention }) => (
#
{name}
{mention && {mention} }
);
return (
{/* RAIL */}
{/* SECONDARY PANEL */}
Channels
Direct messages
{[
["Sun Kim", "#e8a87c", true],
["Devi Patel", "#a8c8e8", false],
["Theo Roux", "#c8e8a8", false],
].map(([n, c, online], i) => (
))}
{/* CONTENT */}
#
launch-2026
· 18 members
);
};
// ============================================================
// 3. TOP HORIZONTAL + COMMAND BAR — Vercel / Stripe / Linear web
// ============================================================
const NavTopHorizontal = () => {
const TabItem = ({ label, active }) => (
{label}
);
return (
{/* DARK TOP BAR */}
{/* CONTENT */}
Overview
Last deployment 14 minutes ago to main
Deploy
);
};
// ============================================================
// 4. FLOATING GLASS NAV — marketing site / homepage pattern
// ============================================================
const NavFloatingGlass = () => (
{/* Soft aurora background */}
{/* Floating pill nav — the focal point */}
{["Product", "Solutions", "Customers", "Pricing", "Docs"].map((l, i) => (
{l}
{(i === 0 || i === 1) && (
)}
))}
Sign in
Get started →
{/* Tiny status pill above nav */}
All systems normal ·{" "}
● 99.99% uptime
{/* HERO */}
NEW
Lattice 4.0 — agents that draft for you ·{" "}
read more →
The workspace where{" "}
good ideas
{" "}
compound.
Docs, canvases, and agents in one luminous surface.
Built by people who got tired of switching tabs.
Start for free
▶ Watch the film · 2 min
);
// Export to window
Object.assign(window, {
NavSidebar, NavIconRail, NavTopHorizontal, NavFloatingGlass,
});