diff --git a/src/components/guide-elements/SubPages.tsx b/src/components/guide-elements/SubPages.tsx
new file mode 100644
index 0000000..f765971
--- /dev/null
+++ b/src/components/guide-elements/SubPages.tsx
@@ -0,0 +1,80 @@
+import ErrorText from "@component/ErrorText.tsx";
+import Link from "next/link";
+import { CustomGuideElementProps } from "@component/CustomGuideElementProps.ts";
+import { NavigationNode } from "../../build-data/Guide.ts";
+import { getPagePath } from "../../build-data";
+
+export interface SubPagesProps extends CustomGuideElementProps {
+ id?: string;
+ icons?: boolean;
+ alphabetical?: boolean;
+}
+
+function findNavigationNodeForPage(
+ pageId: string,
+ nodes: NavigationNode[],
+): NavigationNode | undefined {
+ for (const node of nodes) {
+ if (node.hasPage && node.pageId === pageId) {
+ return node;
+ }
+ }
+ for (const node of nodes) {
+ const matchingNode = findNavigationNodeForPage(pageId, node.children);
+ if (matchingNode) {
+ return matchingNode;
+ }
+ }
+ return undefined;
+}
+
+function SubPages({
+ id,
+ icons = false,
+ alphabetical = false,
+ guide,
+ currentPageId,
+}: SubPagesProps) {
+ // Find the page in the tree, if it's explicitly set to empty, show the root nav
+ let navNodes: NavigationNode[];
+ if (id == "") {
+ navNodes = guide.index.navigationRootNodes;
+ } else {
+ const pageNodeInNav = findNavigationNodeForPage(
+ currentPageId ?? "",
+ guide.index.navigationRootNodes,
+ );
+ if (!pageNodeInNav) {
+ return (
+