Skip to content

Commit 48c4e16

Browse files
committed
nexus link page
1 parent d97cbbd commit 48c4e16

File tree

3 files changed

+38
-3
lines changed

3 files changed

+38
-3
lines changed

packages/admin-ui/src/pages-new/ai/AiLayout.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from "react";
22
import { Routes, Route, useNavigate, useLocation, Link } from "react-router-dom";
3-
import { Sparkles, ShoppingBag, Package, Home } from "lucide-react";
3+
import { Sparkles, ShoppingBag, Package, Home, Globe } from "lucide-react";
44
import dappnodeLogo from "img/dappnode-logo-only.png";
55
import {
66
SidebarProvider,
@@ -33,13 +33,18 @@ import { StorePage } from "./store/StorePage";
3333
import { PackagesPage } from "./packages/PackagesPage";
3434
import { PackageDetailPage } from "./packages/PackageDetailPage";
3535
import { InstallerPage } from "./installer/InstallerPage";
36+
import { NexusPage } from "./nexus/NexusPage";
37+
import { storeRelativePath } from "./store/data";
38+
import { packagesRelativePath } from "./packages/data";
39+
import { nexusRelativePath } from "./nexus/data";
3640

3741
/* ── Navigation items ───────────────────────────────────────────────── */
3842

3943
const navItems = [
4044
{ label: "Overview", icon: Sparkles, path: "/ai" },
41-
{ label: "Store", icon: ShoppingBag, path: "/ai/store" },
42-
{ label: "Packages", icon: Package, path: "/ai/packages" }
45+
{ label: "Store", icon: ShoppingBag, path: storeRelativePath },
46+
{ label: "Packages", icon: Package, path: packagesRelativePath },
47+
{ label: "Nexus", icon: Globe, path: nexusRelativePath }
4348
];
4449

4550
function getBreadcrumbItems(pathname: string): { label: string; to: string }[] {
@@ -182,6 +187,7 @@ export function AiLayout() {
182187
<Route path="install/:id/*" element={<InstallerPage />} />
183188
<Route path="packages" element={<PackagesPage />} />
184189
<Route path="packages/:id/*" element={<PackageDetailPage />} />
190+
<Route path="nexus" element={<NexusPage />} />
185191
</Routes>
186192
</div>
187193

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import * as React from "react";
2+
import { TypographyH1, TypographyMuted } from "components/primitives/typography";
3+
import { Button } from "components/primitives/button";
4+
import { nexusExternalUrl } from "./data";
5+
6+
export function NexusPage() {
7+
return (
8+
<div className="tw:flex tw:flex-col tw:gap-section tw:px-page-x tw:py-page-y">
9+
<header>
10+
<TypographyH1 className="tw:border-none tw:pb-0">Nexus</TypographyH1>
11+
<TypographyMuted className="tw:mt-header-gap">
12+
Dappnode Nexus is a privacy-first AI gateway that routes your prompts to the best cloud model while protecting
13+
your data.
14+
</TypographyMuted>
15+
<TypographyMuted className="tw:mt-header-gap">
16+
To use it navigate directly to{" "}
17+
<Button variant="link" onClick={() => window.open(nexusExternalUrl, "_blank")} className="tw:px-0">
18+
Nexus Dashboard
19+
</Button>
20+
.
21+
</TypographyMuted>
22+
</header>
23+
</div>
24+
);
25+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
const nexusRelativePath = "/ai/nexus";
2+
const nexusExternalUrl = "https://nexus.dappnode.com/";
3+
4+
export { nexusRelativePath, nexusExternalUrl };

0 commit comments

Comments
 (0)