diff --git a/web/src/routes/settings/keys/+page.svelte b/web/src/routes/settings/keys/+page.svelte
new file mode 100644
--- /dev/null
+++ b/web/src/routes/settings/keys/+page.svelte
@@ -0,0 +1,5 @@
+
+
+
diff --git a/web/src/routes/settings/knots/+page.svelte b/web/src/routes/settings/knots/+page.svelte
new file mode 100644
--- /dev/null
+++ b/web/src/routes/settings/knots/+page.svelte
@@ -0,0 +1,5 @@
+
+
+
diff --git a/web/src/lib/components/settings/tabs/KeysTab.svelte b/web/src/lib/components/settings/tabs/KeysTab.svelte
new file mode 100644
--- /dev/null
+++ b/web/src/lib/components/settings/tabs/KeysTab.svelte
@@ -0,0 +1,180 @@
+
+
+
+
+
+
SSH keys
+ Add
+
+
+ SSH public keys added here will be broadcasted to knots that you are a member of, allowing you
+ to push to repositories there and verify commit signatures.
+
+
+
+
{
+ if ((e as ToggleEvent).newState === "closed") resetForm();
+ }}
+ class="m-auto w-96 max-w-[90vw] rounded border border-border-default bg-background-default p-4 text-foreground-default shadow-lg backdrop:bg-black/40"
+ >
+
popover?.hidePopover()}
+ />
+
+
+ {#if loadError}
+
+ {/if}
+
+ {#if loading}
+
+ Loading…
+
+ {:else}
+
+ {#each keys as k (k.rkey)}
+ remove(k)}
+ />
+ {/each}
+
+ {/if}
+
diff --git a/web/src/lib/components/settings/tabs/KnotsTab.svelte b/web/src/lib/components/settings/tabs/KnotsTab.svelte
new file mode 100644
--- /dev/null
+++ b/web/src/lib/components/settings/tabs/KnotsTab.svelte
@@ -0,0 +1,13 @@
+
+
Knots
+
+ Knots are lightweight headless servers that enable users to host Git repositories with ease.
+ When creating a repository, you can choose a knot to store it on.
+
+
+
+ Coming soon
+
+
diff --git a/web/src/lib/components/settings/tabs/SpindlesTab.svelte b/web/src/lib/components/settings/tabs/SpindlesTab.svelte
new file mode 100644
--- /dev/null
+++ b/web/src/lib/components/settings/tabs/SpindlesTab.svelte
@@ -0,0 +1,12 @@
+
+
Spindles
+
+ Spindles are servers that run continuous integration pipelines for your repositories.
+
+
+
+ Coming soon
+
+