diff --git a/frontend/src/routes/admin/tags/+layout.svelte b/frontend/src/routes/admin/tags/+layout.svelte
index 190f5e29..9409e20f 100644
--- a/frontend/src/routes/admin/tags/+layout.svelte
+++ b/frontend/src/routes/admin/tags/+layout.svelte
@@ -8,7 +8,7 @@ const isAtListRoot = $derived(page.url.pathname === '/admin/tags');
-
+
diff --git a/frontend/src/routes/admin/tags/TagTreeNode.svelte b/frontend/src/routes/admin/tags/TagTreeNode.svelte
new file mode 100644
index 00000000..e6e9c28d
--- /dev/null
+++ b/frontend/src/routes/admin/tags/TagTreeNode.svelte
@@ -0,0 +1,84 @@
+
+
+
+
+
+ {#if hasChildren && !isCollapsed}
+
+ {#each node.children! as child (child.id)}
+
+ {/each}
+
+ {/if}
+
diff --git a/frontend/src/routes/admin/tags/TagsListPanel.svelte b/frontend/src/routes/admin/tags/TagsListPanel.svelte
index a8bd95bc..c7dcc164 100644
--- a/frontend/src/routes/admin/tags/TagsListPanel.svelte
+++ b/frontend/src/routes/admin/tags/TagsListPanel.svelte
@@ -1,48 +1,42 @@