diff --git a/docusaurus.config.js b/docusaurus.config.js
index 3c5a39bd7..fb0463544 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -92,6 +92,7 @@ const config = {
label: "Documentation",
},
{ to: "/blog", label: "Blog", position: "left" },
+ { to: "/dashboard", label: "Dashboard", position: "left" },
{
href: "https://github.com/kmesh-net/kmesh/releases",
label: "Downloads",
@@ -152,11 +153,11 @@ const config = {
[
"docusaurus-lunr-search",
{
- languages: ["en",'zh'],
+ languages: ["en", "zh"],
indexDocs: true,
indexBlog: true,
indexPages: false,
- }
+ },
],
],
};
diff --git a/src/components/DashboardLayout.js b/src/components/DashboardLayout.js
new file mode 100644
index 000000000..bc4887b3d
--- /dev/null
+++ b/src/components/DashboardLayout.js
@@ -0,0 +1,41 @@
+import React from "react";
+import Layout from "@theme/Layout";
+import Link from "@docusaurus/Link";
+import { useLocation } from "@docusaurus/router";
+import "../css/dashboard.css";
+
+const SIDEBAR_ITEMS = [
+ { label: "Overview", path: "/dashboard" },
+ { label: "Topology", path: "/dashboard/topology" },
+ { label: "Waypoints", path: "/dashboard/waypoints" },
+ { label: "Policies", path: "/dashboard/policies" },
+ { label: "Metrics", path: "/dashboard/metrics" },
+];
+
+export default function DashboardLayout({ children, title }) {
+ const location = useLocation();
+
+ return (
+
+
+
+
{children}
+
+
+ );
+}
diff --git a/src/css/dashboard.css b/src/css/dashboard.css
new file mode 100644
index 000000000..d60985901
--- /dev/null
+++ b/src/css/dashboard.css
@@ -0,0 +1,52 @@
+.dashboard-container {
+ display: flex;
+ min-height: calc(100vh - 60px);
+}
+
+.dashboard-sidebar {
+ width: 250px;
+ flex-shrink: 0;
+ border-right: 1px solid var(--ifm-toc-border-color);
+ background-color: var(--ifm-background-surface-color);
+ padding: 1rem 0;
+ display: flex;
+ flex-direction: column;
+}
+
+.dashboard-sidebar-link {
+ padding: 0.75rem 1.5rem;
+ color: var(--ifm-font-color-base);
+ text-decoration: none;
+ font-weight: 500;
+ transition:
+ background-color 0.2s,
+ color 0.2s;
+}
+
+.dashboard-sidebar-link:hover {
+ background-color: var(--ifm-color-primary-lightest);
+ color: var(--ifm-color-primary-dark);
+ text-decoration: none;
+}
+
+[data-theme="dark"] .dashboard-sidebar-link:hover {
+ background-color: var(--ifm-color-primary-darkest);
+ color: var(--ifm-color-primary-light);
+}
+
+.dashboard-sidebar-link.active {
+ background-color: var(--ifm-color-primary-lightest);
+ color: var(--ifm-color-primary-dark);
+ border-right: 3px solid var(--ifm-color-primary);
+}
+
+[data-theme="dark"] .dashboard-sidebar-link.active {
+ background-color: var(--ifm-color-primary-darkest);
+ color: var(--ifm-color-primary-light);
+}
+
+.dashboard-content {
+ flex-grow: 1;
+ padding: 2rem;
+ background-color: var(--ifm-background-color);
+}
diff --git a/src/pages/dashboard/index.js b/src/pages/dashboard/index.js
new file mode 100644
index 000000000..e0ba7ab2c
--- /dev/null
+++ b/src/pages/dashboard/index.js
@@ -0,0 +1,11 @@
+import React from "react";
+import DashboardLayout from "../../components/DashboardLayout";
+
+export default function DashboardOverview() {
+ return (
+
+ Overview
+ Welcome to the Kmesh Dashboard. This is the overview page.
+
+ );
+}
diff --git a/src/pages/dashboard/metrics.js b/src/pages/dashboard/metrics.js
new file mode 100644
index 000000000..eecc4f165
--- /dev/null
+++ b/src/pages/dashboard/metrics.js
@@ -0,0 +1,11 @@
+import React from "react";
+import DashboardLayout from "../../components/DashboardLayout";
+
+export default function DashboardMetrics() {
+ return (
+
+ Metrics
+ Performance and observability metrics will be displayed here.
+
+ );
+}
diff --git a/src/pages/dashboard/policies.js b/src/pages/dashboard/policies.js
new file mode 100644
index 000000000..ec4a2c587
--- /dev/null
+++ b/src/pages/dashboard/policies.js
@@ -0,0 +1,11 @@
+import React from "react";
+import DashboardLayout from "../../components/DashboardLayout";
+
+export default function DashboardPolicies() {
+ return (
+
+ Policies
+ Configure routing and security policies here.
+
+ );
+}
diff --git a/src/pages/dashboard/topology.js b/src/pages/dashboard/topology.js
new file mode 100644
index 000000000..bff55b21e
--- /dev/null
+++ b/src/pages/dashboard/topology.js
@@ -0,0 +1,11 @@
+import React from "react";
+import DashboardLayout from "../../components/DashboardLayout";
+
+export default function DashboardTopology() {
+ return (
+
+ Topology
+ Service mesh topology will be visualized here.
+
+ );
+}
diff --git a/src/pages/dashboard/waypoints.js b/src/pages/dashboard/waypoints.js
new file mode 100644
index 000000000..95b0ecb73
--- /dev/null
+++ b/src/pages/dashboard/waypoints.js
@@ -0,0 +1,11 @@
+import React from "react";
+import DashboardLayout from "../../components/DashboardLayout";
+
+export default function DashboardWaypoints() {
+ return (
+
+ Waypoints
+ Manage and monitor waypoint proxies here.
+
+ );
+}