diff --git a/packages/web/src/app/sessions/[id]/loading.test.tsx b/packages/web/src/app/sessions/[id]/loading.test.tsx
new file mode 100644
index 000000000..da87ae0f6
--- /dev/null
+++ b/packages/web/src/app/sessions/[id]/loading.test.tsx
@@ -0,0 +1,17 @@
+import { render, screen } from "@testing-library/react";
+import { describe, it, expect } from "vitest";
+import SessionLoading from "./loading";
+
+describe("SessionLoading", () => {
+ it("renders the session loading text", () => {
+ render();
+ expect(screen.getByText("Loading session…")).toBeInTheDocument();
+ });
+
+ it("renders a spinning indicator", () => {
+ const { container } = render();
+ const spinner = container.querySelector(".animate-spin");
+ expect(spinner).toBeInTheDocument();
+ expect(spinner?.tagName.toLowerCase()).toBe("svg");
+ });
+});
diff --git a/packages/web/src/app/sessions/[id]/loading.tsx b/packages/web/src/app/sessions/[id]/loading.tsx
new file mode 100644
index 000000000..d81ee937a
--- /dev/null
+++ b/packages/web/src/app/sessions/[id]/loading.tsx
@@ -0,0 +1,20 @@
+export default function SessionLoading() {
+ return (
+
+
+
+
+ Loading session…
+
+
+
+ );
+}