Index: frontend/src/utils/types.ts
===================================================================
--- frontend/src/utils/types.ts	(revision 27660af8b50619221470b2bbb054bcc3db8ed385)
+++ frontend/src/utils/types.ts	(revision 92db381e21eb0f44de317188e162a4362d50faf0)
@@ -15,4 +15,6 @@
 	entityType: string;
 	isLikedByCurrentUser: boolean;
+	cover?: string | null;
+	link?: string | null;
 }
 
Index: frontend/src/utils/utils.ts
===================================================================
--- frontend/src/utils/utils.ts	(revision 92db381e21eb0f44de317188e162a4362d50faf0)
+++ frontend/src/utils/utils.ts	(revision 92db381e21eb0f44de317188e162a4362d50faf0)
@@ -0,0 +1,21 @@
+export const toEmbedUrl = (url: string): string => {
+	try {
+		const parsed = new URL(url);
+		// youtube.com/watch?v=ID
+		if (
+			(parsed.hostname === "www.youtube.com" ||
+				parsed.hostname === "youtube.com") &&
+			parsed.searchParams.has("v")
+		) {
+			return `https://www.youtube.com/embed/${parsed.searchParams.get("v")}`;
+		}
+		// youtu.be/ID
+		if (parsed.hostname === "youtu.be") {
+			return `https://www.youtube.com/embed${parsed.pathname}`;
+		}
+		// already an embed URL or other provider – return as-is
+		return url;
+	} catch {
+		return url;
+	}
+};
