diff --git a/src/app/helpers/page.tsx b/src/app/helpers/page.tsx
index 1d51d3a..74fb656 100644
--- a/src/app/helpers/page.tsx
+++ b/src/app/helpers/page.tsx
@@ -114,12 +114,13 @@ export default function HelpersPage() {
if (!helpersData) return []
return helpersData.map((helper) => ({
id: helper.helper_id,
+ // Must match the helper profile page (/helpers/[id]) so avatar colors are consistent
+ avatarId: helper.user_id ?? helper.helper_id,
name: helper.user?.name || "Unknown",
initial: (helper.user?.name || "U")[0].toUpperCase(),
discordUser: helper.user?.username || "-",
githubAccount: helper.user?.username || "-",
category: helper.category || "Community",
- color: getAvatarColorHexForId(helper.user_id ?? helper.helper_id),
avatarUrl: helper.user?.avatar_url ?? null,
isRegistered: !!helper.user_id,
}))
@@ -663,7 +664,7 @@ export default function HelpersPage() {
diff --git a/src/app/reports/support/page.tsx b/src/app/reports/support/page.tsx
index 4e6f0a5..fdfff76 100644
--- a/src/app/reports/support/page.tsx
+++ b/src/app/reports/support/page.tsx
@@ -132,7 +132,7 @@ export default function ReportsSupportPage() {
let list = transfersData.map((transfer) => {
const helperName = getHelperDisplayName(transfer.helper)
- const { initial, color } = getHelperInitialAndColor(helperName, transfer.helper_id)
+ const { initial, color } = getHelperInitialAndColor(helperName, transfer.helper?.user_id ?? transfer.helper_id)
const dateStr = transfer.completed_at || transfer.created_at
return {
id: transfer.id,
diff --git a/src/app/slas/[id]/page.tsx b/src/app/slas/[id]/page.tsx
index a86a43b..da280c6 100644
--- a/src/app/slas/[id]/page.tsx
+++ b/src/app/slas/[id]/page.tsx
@@ -61,6 +61,7 @@ interface TicketRow {
interface HelperPublic {
helper_id: string
+ user_id: string | null
user: { name: string } | null
}
@@ -100,12 +101,13 @@ export default function SLADetailsPage({ params }: { params: Promise<{ id: strin
queryFn: async () => {
const { data, error } = await supabase
.from("projects_helpers")
- .select("helper_id, user:users_public(name)")
+ .select("helper_id, user_id, user:users_public(name)")
.eq("project_id", sla!.project_id)
if (error) throw error
// Supabase returns user as array when using foreign tables
return ((data ?? []) as any[]).map((h) => ({
helper_id: h.helper_id,
+ user_id: h.user_id ?? null,
user: Array.isArray(h.user) ? (h.user[0] ?? null) : (h.user ?? null),
})) as HelperPublic[]
},
@@ -152,6 +154,15 @@ export default function SLADetailsPage({ params }: { params: Promise<{ id: strin
return map
}, [projectHelpers])
+ // helper_id → avatar key (user_id, falling back to helper_id) so colors match the helpers list/profile
+ const helperAvatarKeyMap = useMemo(() => {
+ const map = new Map
()
+ projectHelpers.forEach((h) => {
+ map.set(h.helper_id, h.user_id ?? h.helper_id)
+ })
+ return map
+ }, [projectHelpers])
+
// ---- Compute stats ------------------------------------------------------
const stats = useMemo(() => {
const solved = filteredTickets.filter((t) => t.status === "completed" || t.status === "cancelled").length
@@ -497,7 +508,7 @@ export default function SLADetailsPage({ params }: { params: Promise<{ id: strin
{getInitial(helper.name)}
@@ -578,6 +589,9 @@ export default function SLADetailsPage({ params }: { params: Promise<{ id: strin
const claimedParticipant = ticket.tickets_participants.find((p) => p.claimed)
const primaryHelperId = claimedParticipant?.participant_id
const primaryHelperName = primaryHelperId ? (helperMap.get(primaryHelperId) ?? "Unknown") : "—"
+ const primaryHelperAvatarKey = primaryHelperId
+ ? (helperAvatarKeyMap.get(primaryHelperId) ?? primaryHelperId)
+ : null
const ticketMs = ticket.tickets_time_entries.reduce(
(sum, e) => sum + (e.time_milliseconds ?? 0), 0
@@ -600,7 +614,7 @@ export default function SLADetailsPage({ params }: { params: Promise<{ id: strin
{getInitial(primaryHelperName)}
diff --git a/src/hooks/usePayments.ts b/src/hooks/usePayments.ts
index d96d1ea..262dc8f 100644
--- a/src/hooks/usePayments.ts
+++ b/src/hooks/usePayments.ts
@@ -28,6 +28,7 @@ export interface PaymentTransfer {
created_at: string
completed_at: string | null
helper?: {
+ user_id?: string | null
user?: {
name: string
username: string | null
@@ -83,6 +84,7 @@ export function usePaymentTransfers(filters?: {
.select(`
*,
helper:projects_helpers(
+ user_id,
user:users_public(name, username, email)
),
ticket:tickets(id, title, sla:slas(name))