From 0b9cb62bb227422c02748f4d1ab432e5c562e1aa Mon Sep 17 00:00:00 2001 From: krasi Date: Sat, 16 May 2026 19:50:46 +0200 Subject: [PATCH] feat: YouTube transcripts library UI - VideoTranscriptCard: title/channel/duration/summary (expandable)/key points/delete dialog - VideoLibrary: grid layout with skeleton loading and empty state - useYoutube: user-scoped TanStack Query hooks (useVideoTranscripts, useDeleteTranscript) - api.ts: listVideoTranscripts + deleteVideoTranscript (Zod UUID validation) - /youtube page with back-to-chat header - ChatWindow: Video icon link to /youtube in toolbar --- frontend/app/(dashboard)/youtube/page.tsx | 27 +++ .../features/chat/components/ChatWindow.tsx | 9 + .../youtube/components/VideoLibrary.tsx | 48 +++++ .../components/VideoTranscriptCard.tsx | 178 ++++++++++++++++++ frontend/features/youtube/hooks/useYoutube.ts | 44 +++++ frontend/features/youtube/types.ts | 11 ++ frontend/lib/api.ts | 16 ++ 7 files changed, 333 insertions(+) create mode 100644 frontend/app/(dashboard)/youtube/page.tsx create mode 100644 frontend/features/youtube/components/VideoLibrary.tsx create mode 100644 frontend/features/youtube/components/VideoTranscriptCard.tsx create mode 100644 frontend/features/youtube/hooks/useYoutube.ts create mode 100644 frontend/features/youtube/types.ts diff --git a/frontend/app/(dashboard)/youtube/page.tsx b/frontend/app/(dashboard)/youtube/page.tsx new file mode 100644 index 0000000..6ef0ad4 --- /dev/null +++ b/frontend/app/(dashboard)/youtube/page.tsx @@ -0,0 +1,27 @@ +import Link from 'next/link'; +import { ArrowLeft } from 'lucide-react'; +import VideoLibrary from '@/features/youtube/components/VideoLibrary'; + +const YouTubePage = () => { + return ( +
+
+
+ + + +

+ YouTube Transcripts +

+
+ +
+
+ ); +}; + +export default YouTubePage; diff --git a/frontend/features/chat/components/ChatWindow.tsx b/frontend/features/chat/components/ChatWindow.tsx index 00f3828..81fb76a 100644 --- a/frontend/features/chat/components/ChatWindow.tsx +++ b/frontend/features/chat/components/ChatWindow.tsx @@ -12,6 +12,7 @@ import { Bookmark, Volume2, Headphones, + Video, Menu, X, } from 'lucide-react'; @@ -216,6 +217,14 @@ const ChatWindow = () => { > + +