From c07b09a4756134ad54ec40d32046b43a56a83ac3 Mon Sep 17 00:00:00 2001 From: Alex Soffronow Pagonidis <237136924+alex-clickhouse@users.noreply.github.com> Date: Sun, 9 Aug 2026 17:53:34 +0000 Subject: [PATCH] Give task titles the width the status select was holding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On a phone the status select sat beside the title in a shrink-0 column, holding ~110px of a ~330px card. The title wrapped inside what was left, so a normal task ran to three lines. Below `sm` the select drops to the meta line, where "5m ago · from manual" leaves room to spare, and the title takes the full card. Titles that took three lines now take two, and a screenful goes from five cards to six. The status badge is hidden at the same breakpoint: the select beside it names the status already, and one value is not worth two controls and a row of vertical space. Done by ordering rather than duplication — one DOM, no second copy of the select to keep in sync: phone title / meta + controls ≥ sm title + controls / meta Desktop keeps the badge, the select at the top right, and the meta line beneath, exactly as before. Refs #271 --- web/src/components/Tasks/TaskCard.tsx | 60 +++++++++++++++++---------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/web/src/components/Tasks/TaskCard.tsx b/web/src/components/Tasks/TaskCard.tsx index ea99a4d0..b7812a14 100644 --- a/web/src/components/Tasks/TaskCard.tsx +++ b/web/src/components/Tasks/TaskCard.tsx @@ -15,30 +15,46 @@ export function TaskCard({ task, onStatusChange }: { onClick={() => navigate(`/tasks/${task.id}`)} className="p-4 bg-surface border border-border-subtle rounded-lg hover:border-border transition-colors cursor-pointer" > -
-
-

{task.title}

-
+ {/* On a phone the status select held ~110px against a title that then + had to wrap inside ~200px. It drops to the meta line instead, where + there is room to spare, and the title gets the full card width. + Ordering does it without duplicating anything: + + phone title / meta + controls + ≥ sm title + controls / meta */} +
+

+ {task.title} +

+ +
+ {/* Hidden on a phone: the select sitting beside it already names + the status, and one value is not worth showing twice. */} + - {task.deadline && ( - - {task.deadline} - - )} - {task.updated_at && ( - - {formatTimeAgo(task.updated_at)} - - )} - {task.source && ( - from {task.source} - )} -
+ + {task.deadline && ( + + {task.deadline} + + )} + {task.updated_at && ( + + {formatTimeAgo(task.updated_at)} + + )} + {task.source && ( + from {task.source} + )}
-
e.stopPropagation()}> + +
e.stopPropagation()} + > {task.source_url && (