diff --git a/internal_frontend/app/demo/kanzlei/bilanzbuchhalter/page.tsx b/internal_frontend/app/demo/kanzlei/bilanzbuchhalter/page.tsx
new file mode 100644
index 0000000..c47a85d
--- /dev/null
+++ b/internal_frontend/app/demo/kanzlei/bilanzbuchhalter/page.tsx
@@ -0,0 +1,7 @@
+export default function Home() {
+ return (
+
+ Bilanzbuchhalter
+
+ );
+}
diff --git a/internal_frontend/app/kanzlei/page.tsx b/internal_frontend/app/demo/kanzlei/page.tsx
similarity index 100%
rename from internal_frontend/app/kanzlei/page.tsx
rename to internal_frontend/app/demo/kanzlei/page.tsx
diff --git a/internal_frontend/app/demo/kanzlei/rechtsanwalt/page.tsx b/internal_frontend/app/demo/kanzlei/rechtsanwalt/page.tsx
new file mode 100644
index 0000000..cfda556
--- /dev/null
+++ b/internal_frontend/app/demo/kanzlei/rechtsanwalt/page.tsx
@@ -0,0 +1,7 @@
+export default function Home() {
+ return (
+
+ Rechtsanwalt
+
+ );
+}
diff --git a/internal_frontend/app/demo/kanzlei/steuer/page.tsx b/internal_frontend/app/demo/kanzlei/steuer/page.tsx
new file mode 100644
index 0000000..4ebdb39
--- /dev/null
+++ b/internal_frontend/app/demo/kanzlei/steuer/page.tsx
@@ -0,0 +1,7 @@
+export default function Home() {
+ return (
+
+ Steuer
+
+ );
+}
diff --git a/internal_frontend/app/demo/settings/page.tsx b/internal_frontend/app/demo/settings/page.tsx
new file mode 100644
index 0000000..3e25776
--- /dev/null
+++ b/internal_frontend/app/demo/settings/page.tsx
@@ -0,0 +1,10 @@
+import {SidebarGroupLabel} from "@/components/ui/sidebar";
+
+export default function Home() {
+ return (
+
+ Documents
+ Settings
+
+ );
+}
diff --git a/internal_frontend/app/layout.tsx b/internal_frontend/app/layout.tsx
index 3e07644..865c33e 100644
--- a/internal_frontend/app/layout.tsx
+++ b/internal_frontend/app/layout.tsx
@@ -1,9 +1,11 @@
import type {Metadata} from "next";
import "./globals.css";
import {ThemeProvider} from "@/components/theme-provider";
-import {SidebarProvider, SidebarTrigger} from "@/components/ui/sidebar"
+import {SidebarInset, SidebarProvider, SidebarTrigger} from "@/components/ui/sidebar"
import {AppSidebar} from "@/components/app-sidebar"
import React from "react";
+import {Separator} from "@/components/ui/separator";
+import {DynamicBreadcrumb} from "@/components/dynamic-breadcrumb";
export const metadata: Metadata = {
title: "Internal | Rhein Software",
@@ -16,7 +18,6 @@ export default function RootLayout({
children: React.ReactNode;
}>) {
return (
-
-
+
-
+
+
+
{children}
@@ -36,4 +56,4 @@ export default function RootLayout({
);
-}
+}
\ No newline at end of file
diff --git a/internal_frontend/components/app-sidebar.tsx b/internal_frontend/components/app-sidebar.tsx
index cb5dd4d..279084a 100644
--- a/internal_frontend/components/app-sidebar.tsx
+++ b/internal_frontend/components/app-sidebar.tsx
@@ -116,17 +116,17 @@ export function AppSidebar() {
-
+
Steuer
-
+
Rechtsanwalt
-
+
Bilanzbuchhalter
diff --git a/internal_frontend/components/dynamic-breadcrumb.tsx b/internal_frontend/components/dynamic-breadcrumb.tsx
new file mode 100644
index 0000000..623bb49
--- /dev/null
+++ b/internal_frontend/components/dynamic-breadcrumb.tsx
@@ -0,0 +1,42 @@
+// components/dynamic-breadcrumb.tsx
+'use client';
+
+import {usePathname} from 'next/navigation';
+import {
+ Breadcrumb,
+ BreadcrumbItem,
+ BreadcrumbLink,
+ BreadcrumbList,
+ BreadcrumbPage,
+ BreadcrumbSeparator,
+} from "@/components/ui/breadcrumb";
+import React from 'react';
+import {getBreadcrumbs} from "@/utils/BreadcrumbUtils";
+
+export function DynamicBreadcrumb() {
+ const pathname = usePathname();
+ const breadcrumbs = getBreadcrumbs(pathname);
+
+ return (
+
+
+ {breadcrumbs.map((breadcrumb, index) => (
+
+
+ {breadcrumb.isCurrentPage ? (
+ {breadcrumb.label}
+ ) : (
+
+ {breadcrumb.label}
+
+ )}
+
+ {index < breadcrumbs.length - 1 && (
+
+ )}
+
+ ))}
+
+
+ );
+}
\ No newline at end of file
diff --git a/internal_frontend/components/ui/breadcrumb.tsx b/internal_frontend/components/ui/breadcrumb.tsx
new file mode 100644
index 0000000..eb88f32
--- /dev/null
+++ b/internal_frontend/components/ui/breadcrumb.tsx
@@ -0,0 +1,109 @@
+import * as React from "react"
+import { Slot } from "@radix-ui/react-slot"
+import { ChevronRight, MoreHorizontal } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+function Breadcrumb({ ...props }: React.ComponentProps<"nav">) {
+ return
+}
+
+function BreadcrumbList({ className, ...props }: React.ComponentProps<"ol">) {
+ return (
+
+ )
+}
+
+function BreadcrumbItem({ className, ...props }: React.ComponentProps<"li">) {
+ return (
+
+ )
+}
+
+function BreadcrumbLink({
+ asChild,
+ className,
+ ...props
+}: React.ComponentProps<"a"> & {
+ asChild?: boolean
+}) {
+ const Comp = asChild ? Slot : "a"
+
+ return (
+
+ )
+}
+
+function BreadcrumbPage({ className, ...props }: React.ComponentProps<"span">) {
+ return (
+
+ )
+}
+
+function BreadcrumbSeparator({
+ children,
+ className,
+ ...props
+}: React.ComponentProps<"li">) {
+ return (
+ svg]:size-3.5", className)}
+ {...props}
+ >
+ {children ?? }
+
+ )
+}
+
+function BreadcrumbEllipsis({
+ className,
+ ...props
+}: React.ComponentProps<"span">) {
+ return (
+
+
+ More
+
+ )
+}
+
+export {
+ Breadcrumb,
+ BreadcrumbList,
+ BreadcrumbItem,
+ BreadcrumbLink,
+ BreadcrumbPage,
+ BreadcrumbSeparator,
+ BreadcrumbEllipsis,
+}
diff --git a/internal_frontend/lib/breadcrumb-map.ts b/internal_frontend/lib/breadcrumb-map.ts
new file mode 100644
index 0000000..4a06b70
--- /dev/null
+++ b/internal_frontend/lib/breadcrumb-map.ts
@@ -0,0 +1,8 @@
+// lib/breadcrumb-map.ts
+export const breadcrumbMap: Record = {
+ 'dashboard': 'Dashboard',
+ 'settings': 'Settings',
+ 'demo': 'Demo',
+ 'users': 'User Management',
+ // Add more mappings as needed
+};
\ No newline at end of file
diff --git a/internal_frontend/utils/BreadcrumbUtils.ts b/internal_frontend/utils/BreadcrumbUtils.ts
new file mode 100644
index 0000000..c10de82
--- /dev/null
+++ b/internal_frontend/utils/BreadcrumbUtils.ts
@@ -0,0 +1,28 @@
+// utils/getBreadcrumbs.ts
+import {breadcrumbMap} from '@/lib/breadcrumb-map';
+
+export type Breadcrumb = {
+ label: string;
+ href: string;
+ isCurrentPage?: boolean;
+};
+
+export function getBreadcrumbs(path: string): Breadcrumb[] {
+ const pathSegments = path.split('/').filter(Boolean);
+
+ return pathSegments.map((segment, index) => {
+ const href = `/${pathSegments.slice(0, index + 1).join('/')}`;
+ // Use the mapping if it exists, otherwise format the segment
+ const label = breadcrumbMap[segment.toLowerCase()] ||
+ segment
+ .split('-')
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
+ .join(' ');
+
+ return {
+ label,
+ href,
+ isCurrentPage: index === pathSegments.length - 1
+ };
+ });
+}
\ No newline at end of file