{title}
+ {description && ( +{description}
+ )} +diff --git a/client/pages/internal-docs/InternalDocsLayout.tsx b/client/pages/internal-docs/InternalDocsLayout.tsx new file mode 100644 index 00000000..054fe7f6 --- /dev/null +++ b/client/pages/internal-docs/InternalDocsLayout.tsx @@ -0,0 +1,300 @@ +import { useState } from "react"; +import { Link, useLocation, Navigate } from "react-router-dom"; +import { Menu, X, ChevronRight, Lock, Home } from "lucide-react"; +import { useAuth } from "@/contexts/AuthContext"; + +interface NavSpace { + id: string; + title: string; + emoji: string; + description: string; + pages: NavPage[]; +} + +interface NavPage { + title: string; + path: string; + description?: string; +} + +const spaces: NavSpace[] = [ + { + id: "space1", + title: "START HERE", + emoji: "🚀", + description: "For All New Members", + pages: [ + { + title: "Welcome", + path: "/internal-docs", + description: "Welcome to AeThex Ecosystem", + }, + { + title: "Axiom Model", + path: "/internal-docs/axiom-model", + description: "Our 3-entity structure", + }, + { + title: "Find Your Role", + path: "/internal-docs/find-your-role", + description: "Who are you in the ecosystem?", + }, + ], + }, + { + id: "space2", + title: "ECOSYSTEM-WIDE", + emoji: "🌍", + description: "Universal Rules", + pages: [ + { + title: "Code of Conduct", + path: "/internal-docs/code-of-conduct", + description: "How we act", + }, + { + title: "Communication Protocol", + path: "/internal-docs/communication", + description: "Discord, Slack, meetings", + }, + { + title: "Meeting Cadence", + path: "/internal-docs/meetings", + description: "When & how we meet", + }, + { + title: "Brand & Voice", + path: "/internal-docs/brand", + description: "How we talk publicly", + }, + { + title: "Tech Stack", + path: "/internal-docs/tech-stack", + description: "Tools we use", + }, + ], + }, + { + id: "space3", + title: "THE FOUNDATION", + emoji: "🏛️", + description: "The Guardian", + pages: [ + { + title: "Governance Model", + path: "/internal-docs/foundation-governance", + description: "The Parliament", + }, + { + title: "Open-Source Protocol", + path: "/internal-docs/foundation-protocol", + description: "The AI Foundry", + }, + { + title: "Community Programs", + path: "/internal-docs/foundation-programs", + description: "The University", + }, + ], + }, + { + id: "space4", + title: "THE CORP", + emoji: "⚙️", + description: "The Engine", + pages: [ + { + title: "Product & Engineering", + path: "/internal-docs/corp-product", + description: "Development lifecycle", + }, + { + title: "Product Blueprints", + path: "/internal-docs/corp-blueprints", + description: "The Factory", + }, + { + title: "Client & Sales Ops", + path: "/internal-docs/corp-clients", + description: "Client onboarding & hiring", + }, + { + title: "Platform Strategy", + path: "/internal-docs/corp-platform", + description: "The Monolith", + }, + ], + }, + { + id: "space5", + title: "PEOPLE & FINANCE", + emoji: "👥", + description: "Back Office", + pages: [ + { + title: "Onboarding", + path: "/internal-docs/onboarding", + description: "New hire handbook", + }, + { + title: "Finance & Payments", + path: "/internal-docs/finance", + description: "Invoicing & expenses", + }, + ], + }, +]; + +interface InternalDocsLayoutProps { + children: React.ReactNode; + title?: string; + description?: string; +} + +export default function InternalDocsLayout({ + children, + title, + description, +}: InternalDocsLayoutProps) { + const { user, loading } = useAuth(); + const [sidebarOpen, setSidebarOpen] = useState(false); + const location = useLocation(); + + if (loading) { + return ( +
Loading...
+{description}
+ )} +