diff --git a/src/lib/components/DifficultyLabel.svelte b/src/lib/components/DifficultyLabel.svelte
new file mode 100644
index 0000000..2208efc
--- /dev/null
+++ b/src/lib/components/DifficultyLabel.svelte
@@ -0,0 +1,22 @@
+
+
+
+ {modeName} ·
+
+ {diffName}
+
+
+
diff --git a/src/lib/components/MapActionButtons.svelte b/src/lib/components/MapActionButtons.svelte
new file mode 100644
index 0000000..ba4d69e
--- /dev/null
+++ b/src/lib/components/MapActionButtons.svelte
@@ -0,0 +1,147 @@
+
+
+
+
+
+{#if showToast}
+
+ {toastMessage}
+
+{/if}
+
+
+
diff --git a/src/lib/components/SongCard.svelte b/src/lib/components/SongCard.svelte
new file mode 100644
index 0000000..99fd533
--- /dev/null
+++ b/src/lib/components/SongCard.svelte
@@ -0,0 +1,43 @@
+
+
+
+ {#if coverURL}
+

+ {:else}
+
No cover
+ {/if}
+
+
+
+ {songName ?? hash}
+
+ {#if mapper}
+
+
+ {mapper}
+ {#if stars !== undefined}
+ ★ {stars.toFixed(2)}
+ {/if}
+
+ {#if timeset !== undefined}
+ {new Date(timeset * 1000).toLocaleDateString()}
+ {/if}
+
+ {/if}
+
+
+
+
+
diff --git a/src/routes/tools/beatleader-compare/+page.svelte b/src/routes/tools/beatleader-compare/+page.svelte
index c3b4c47..84c3af8 100644
--- a/src/routes/tools/beatleader-compare/+page.svelte
+++ b/src/routes/tools/beatleader-compare/+page.svelte
@@ -1,6 +1,9 @@