diff --git a/src/components/header-user-identity.test.tsx b/src/components/header-user-identity.test.tsx
new file mode 100644
index 00000000..0789e9a6
--- /dev/null
+++ b/src/components/header-user-identity.test.tsx
@@ -0,0 +1,21 @@
+import { renderToStaticMarkup } from "react-dom/server";
+import { describe, expect, it } from "vitest";
+import { HeaderUserIdentity } from "./header-user-identity";
+
+describe("HeaderUserIdentity", () => {
+ it("keeps the 40px head separated from the username", () => {
+ const html = renderToStaticMarkup(
+ ,
+ );
+
+ expect(html).toContain("gap-2");
+ expect(html).toContain('width="40"');
+ expect(html).toContain('height="40"');
+ expect(html).toContain(">Life");
+ expect(html).not.toContain("-ml-");
+ });
+});
diff --git a/src/components/header-user-identity.tsx b/src/components/header-user-identity.tsx
new file mode 100644
index 00000000..80f25641
--- /dev/null
+++ b/src/components/header-user-identity.tsx
@@ -0,0 +1,25 @@
+import { UserAvatarThumbnail } from "@/components/shared/user-avatar-thumbnail";
+
+interface HeaderUserIdentityProps {
+ figure: string;
+ username: string;
+ textColor: string;
+}
+
+export function HeaderUserIdentity({
+ figure,
+ username,
+ textColor,
+}: HeaderUserIdentityProps) {
+ return (
+
+
+
+ {username}
+
+
+ );
+}
diff --git a/src/components/shared/public-avatar-contract.test.ts b/src/components/shared/public-avatar-contract.test.ts
index 8d2563ed..de5681e8 100644
--- a/src/components/shared/public-avatar-contract.test.ts
+++ b/src/components/shared/public-avatar-contract.test.ts
@@ -3,7 +3,7 @@ import { resolve } from "node:path";
import { describe, expect, it } from "vitest";
const compactCallSites = new Map([
- ["src/components/top-header.tsx", 2],
+ ["src/components/top-header.tsx", 1],
["src/app/(site)/friends/page.tsx", 1],
["src/app/(site)/guilds/[id]/page.tsx", 1],
["src/app/(site)/leaderboard/page.tsx", 1],
diff --git a/src/components/top-header.tsx b/src/components/top-header.tsx
index f8df6397..646a7a67 100644
--- a/src/components/top-header.tsx
+++ b/src/components/top-header.tsx
@@ -3,6 +3,7 @@ import Image from "next/image";
import Link from "next/link";
import type { Session } from "next-auth";
import { getTranslations } from "next-intl/server";
+import { HeaderUserIdentity } from "@/components/header-user-identity";
import { RoomQuickEntry } from "@/components/room-quick-entry";
import { UserAvatarThumbnail } from "@/components/shared/user-avatar-thumbnail";
import { signOut } from "@/lib/auth";
@@ -317,17 +318,11 @@ export async function TopHeader({ session }: { session: Session | null }) {
aria-label="User menu"
className="list-none cursor-pointer flex items-center [&::-webkit-details-marker]:hidden"
>
-
-
- {session.user.name}
-