From ed55478599992c6a26e889dc5792dcee3dca5ddc Mon Sep 17 00:00:00 2001 From: Mattias Tall Date: Tue, 26 May 2026 17:01:50 +0200 Subject: [PATCH] Minimal UX pass: cut action clutter, more breathing room MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - VideoCard: actions now hover-only everywhere (was always-visible on mobile) - Watch: remove Good/Bad rating chips — Like covers positive signal, dismiss/skip covers negative. Fewer buttons, same data. - Watch: PiP and Theater are now icon-only (no label) - Watch: increase content gap to gap-4/gap-5 for more breathing room Co-Authored-By: Claude Sonnet 4.6 --- frontend/src/components/VideoCard.jsx | 4 +-- frontend/src/pages/Watch.jsx | 43 +++------------------------ 2 files changed, 6 insertions(+), 41 deletions(-) diff --git a/frontend/src/components/VideoCard.jsx b/frontend/src/components/VideoCard.jsx index 792c202..497a18c 100644 --- a/frontend/src/components/VideoCard.jsx +++ b/frontend/src/components/VideoCard.jsx @@ -318,8 +318,8 @@ export default function VideoCard({ video, size = "md", onDismiss, variant = "gr

)} - {/* Actions — always visible on mobile, fade on desktop */} -
+ {/* Actions — hover only everywhere */} +
{actions}
diff --git a/frontend/src/pages/Watch.jsx b/frontend/src/pages/Watch.jsx index e27c0b9..3538c18 100644 --- a/frontend/src/pages/Watch.jsx +++ b/frontend/src/pages/Watch.jsx @@ -4,7 +4,7 @@ import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { getVideoByYtId, updateProgress, createDownload, getDownload, deleteDownload, followChannelByUrl, toggleQueue, toggleLike, getChannelVideos, getChannel, - getSettings, updateSettings, getRelatedVideos, getDownloads, rateVideo, + getSettings, updateSettings, getRelatedVideos, getDownloads, getBookmarks, createBookmark, updateBookmark, deleteBookmark, importChapters, clearChapters, getCollections, addToCollection, getQueue, getVideoComments, refreshVideoComments, @@ -561,7 +561,6 @@ export default function Watch() { const [currentTime, setCurrentTime] = useState(0); const [queued, setQueued] = useState(null); const [liked, setLiked] = useState(null); - const [rating, setRating] = useState(null); const [selectedQuality, setSelectedQuality] = useState(null); const [speed, setSpeed] = useState(1); const [autoplay, setAutoplay] = useState(false); @@ -773,11 +772,6 @@ export default function Watch() { onSuccess: (res) => { setLiked(res.data.liked); qc.invalidateQueries({ queryKey: ["liked-videos"] }); }, }); - const rateMut = useMutation({ - mutationFn: (r) => rateVideo(video.id, r), - onSuccess: (res) => setRating(res.data.rating), - }); - const handlePiP = useCallback(async () => { if (!videoRef.current) return; try { @@ -793,7 +787,6 @@ export default function Watch() { const startAt = video?.watch_progress_seconds ?? 0; const isQueued = queued ?? video?.queued ?? false; const isLiked = liked ?? video?.liked ?? false; - const currentRating = rating ?? video?.rating ?? null; const dlComplete = dlStatus?.status === "complete" || video?.is_downloaded; const isFollowed = followMut.isSuccess || video?.channel_followed; const subs = formatSubs(channel?.subscriber_count); @@ -844,7 +837,7 @@ export default function Watch() {
{/* ── Left: video + info ───────────────────────────────────────────── */} -
+
{/* Player */}
@@ -981,32 +974,6 @@ export default function Watch() { )} - {video?.id && ( - <> - rateMut.mutate(currentRating === 1 ? 0 : 1)} - disabled={rateMut.isPending} - > - - - - - Good - - rateMut.mutate(currentRating === -1 ? 0 : -1)} - disabled={rateMut.isPending} - > - - - - - Not for me - - - )} {video?.id && ( queueMut.mutate()} disabled={queueMut.isPending}> @@ -1018,16 +985,15 @@ export default function Watch() { )} {fileReady && document.pictureInPictureEnabled && ( - + - Mini )} - setTheater(t => !t)}> + setTheater(t => !t)} title={theater ? "Exit theater" : "Theater mode"}> {theater ? ( @@ -1035,7 +1001,6 @@ export default function Watch() { )} - Theater