diff --git a/src/app/page.tsx b/src/app/page.tsx
index 54fcd40b..79300ddd 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -22,6 +22,7 @@ import {
MonitorIcon,
PolkadotIcon,
RelayersIcon,
+ RoleManagerIcon,
StarknetIcon,
StellarIcon,
SuiIcon,
@@ -170,6 +171,13 @@ export default function HomePage() {
title="UI Builder"
description="Spin up user interfaces for any deployed contract. Select the function, auto-generate a React UI with wallet-connect and multi-network support, and export a complete app."
/>
+
+ }
+ title="Role Manager"
+ description="Manage contract permissions from one interface to define role-based access, set multi-level hierarchies, and assign granular admin controls for any team or governance model."
+ />
diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts
index fb4f2b00..6c20c5eb 100644
--- a/src/components/icons/index.ts
+++ b/src/components/icons/index.ts
@@ -12,6 +12,7 @@ export { MidnightIcon } from "./midnight-icon";
export { MonitorIcon } from "./monitor-icon";
export { PolkadotIcon } from "./polkadot-icon";
export { RelayersIcon } from "./relayers-icon";
+export { RoleManagerIcon } from "./role-manager-icon";
export { StarknetIcon } from "./starknet-icon";
export { StellarIcon } from "./stellar-icon";
export { SuiIcon } from "./sui-icon";
diff --git a/src/components/icons/role-manager-icon.tsx b/src/components/icons/role-manager-icon.tsx
new file mode 100644
index 00000000..ba9c25b3
--- /dev/null
+++ b/src/components/icons/role-manager-icon.tsx
@@ -0,0 +1,42 @@
+export function RoleManagerIcon({ className }: { className: string }) {
+ return (
+
+ );
+}
diff --git a/src/components/layout/docs-layout-client.tsx b/src/components/layout/docs-layout-client.tsx
index a4721ce1..b6083827 100644
--- a/src/components/layout/docs-layout-client.tsx
+++ b/src/components/layout/docs-layout-client.tsx
@@ -54,6 +54,7 @@ export function DocsLayoutClient({ children }: DocsLayoutClientProps) {
pathname.startsWith("/monitor") ||
pathname.startsWith("/relayer") ||
pathname.startsWith("/ui-builder") ||
+ pathname.startsWith("/role-manager") ||
pathname.startsWith("/ecosystem-adapters") ||
pathname.startsWith("/tools");
@@ -65,6 +66,7 @@ export function DocsLayoutClient({ children }: DocsLayoutClientProps) {
"/monitor",
"/relayer",
"/ui-builder",
+ "/role-manager",
"/ecosystem-adapters",
"/tools",
])
@@ -103,6 +105,7 @@ export function DocsLayoutClient({ children }: DocsLayoutClientProps) {
"/relayer",
"/monitor",
"/ui-builder",
+ "/role-manager",
"/upgrades",
]);
if (
diff --git a/src/hooks/use-navigation-tree.ts b/src/hooks/use-navigation-tree.ts
index f1de9ffc..4932dd59 100644
--- a/src/hooks/use-navigation-tree.ts
+++ b/src/hooks/use-navigation-tree.ts
@@ -57,7 +57,8 @@ export function useNavigationTree() {
) {
sessionStorage.setItem("lastEcosystem", "ethereum");
} else {
- // Shared paths (/ui-builder, /monitor, /relayer, /ecosystem-adapters, /tools)
+ // Shared paths (/ui-builder, /monitor, /relayer, /role-manager,
+ // /ecosystem-adapters, /tools)
// have no ecosystem in their prefix. If the specific page is uniquely owned
// by one ecosystem (e.g. /relayer/.../guides/stellar-channels-guide -> Stellar),
// persist that so later navigation to ambiguous shared pages (quickstart, api/*)
@@ -105,6 +106,7 @@ export function useNavigationTree() {
pathname.startsWith("/monitor") ||
pathname.startsWith("/relayer") ||
pathname.startsWith("/ui-builder") ||
+ pathname.startsWith("/role-manager") ||
pathname.startsWith("/ecosystem-adapters") ||
pathname.startsWith("/tools")
) {