From 8b371ae3c21346cdfff5824f3fcbe3f646149a72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gjermund=20H=C3=B8s=C3=B8ien=20Wiggen?= Date: Tue, 9 Jun 2026 22:47:00 +0200 Subject: [PATCH] =?UTF-8?q?redesign:=20ticket=20detail=20=E2=80=94=20clean?= =?UTF-8?q?er=20transaction=20cards,=20system=20events=20as=20timeline?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - System events now render as subtle timeline entries (icon dot + text) instead of heavy bordered boxes - Message cards are cleaner: rounded avatars, no card borders, just typography and spacing. Internal badge is subtler. - Removed border/shadow from message cards — cleaner, more modern Co-Authored-By: Claude Opus 4.8 --- web/src/app/tickets/[id]/page.tsx | 66 ++++++++++++------------------- 1 file changed, 25 insertions(+), 41 deletions(-) diff --git a/web/src/app/tickets/[id]/page.tsx b/web/src/app/tickets/[id]/page.tsx index 08fe172..7275da4 100644 --- a/web/src/app/tickets/[id]/page.tsx +++ b/web/src/app/tickets/[id]/page.tsx @@ -125,9 +125,8 @@ function TransactionCard({ if (isSystem) { let message = tx.transaction_type; - if (tx.transaction_type === "Create") { - message = "Ticket created"; - } else if (tx.transaction_type === "StatusChange") { + if (tx.transaction_type === "Create") message = "Ticket created"; + else if (tx.transaction_type === "StatusChange") { const oldLabel = tx.old_value ? statusLabel(tx.old_value) : "?"; const newLabel = tx.new_value ? statusLabel(tx.new_value) : "?"; message = `Status changed from ${oldLabel} to ${newLabel}`; @@ -135,60 +134,45 @@ function TransactionCard({ message = tx.new_value ? `Assigned to ${userLabel(users, tx.new_value)}` : "Unassigned"; } else if (tx.transaction_type === "CustomFieldChange") { const fieldName = tx.field ? customFieldLabels[tx.field] ?? "Custom field" : "Custom field"; - message = tx.new_value - ? `${fieldName} set to ${tx.new_value}` - : `${fieldName} cleared`; + message = tx.new_value ? `${fieldName} set to ${tx.new_value}` : `${fieldName} cleared`; } return ( -
-
- - - -
-
-
- {message} - {timeAgo} -
+
+
+
+ {message} + {timeAgo}
); } return ( -
-
- {getInitial(userLabel(users, tx.creator_id))} -
-
-
-
- {isMessage ? ( - - ) : ( - - )} - - {userLabel(users, tx.creator_id)} - +
+
+
+ {getInitial(userLabel(users, tx.creator_id))} +
+
+
+ {userLabel(users, tx.creator_id)} {isInternal && ( - + Internal )} + {timeAgo}
- {timeAgo} +

+ {body} +

-

- {body} -

-
+
); }