Skip to content

Commit 9418447

Browse files
authored
Inbox beta labeling + button spring cleaning (#1650)
## Changes Putting a _beta_ label on Inbox, _alpha_ on the Replay source, _internal_ on PostHog LLM evaluations (which are now only visible to staff users). We no longer show the full number of reports in the Inbox item in the navbar – instead, we show a more prominent counter which ONLY counts reports that are actionable and assigned to the current user. This way the count truly notifies of what's worth _your_ attention. <img width="1428" height="238" alt="Screenshot 2026-04-14 at 15 38 35@2x" src="https://github.com/user-attachments/assets/b5d45791-8398-41d6-b250-c2bc084f57c1" /> <img width="980" height="772" alt="CleanShot 2026-04-14 at 12 22 15@2x" src="https://github.com/user-attachments/assets/798af3fc-8bb7-4c3c-a1ff-4777491e1e44" /> Also a few tweaks around the positioning of buttons. And we no longer show "READY" on inbox items - "ACTIONABLE/NON-ACTIONABLE" already signifies research being done. --- *Created with [PostHog Code](https://posthog.com/code?ref=pr)*
1 parent 76f1383 commit 9418447

17 files changed

Lines changed: 281 additions & 291 deletions

apps/code/src/renderer/features/inbox/components/InboxSignalsTab.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,7 @@ export function InboxSignalsTab() {
481481
reports={reports}
482482
effectiveBulkIds={selectedReportIds}
483483
onToggleSelectAll={handleToggleSelectAll}
484+
onConfigureSources={() => setSourcesDialogOpen(true)}
484485
/>
485486
</Box>
486487
<ReportListPane
@@ -558,6 +559,7 @@ export function InboxSignalsTab() {
558559
pipelinePausedUntil={signalProcessingState?.paused_until}
559560
searchDisabledReason={searchDisabledReason}
560561
hideFilters
562+
onConfigureSources={() => setSourcesDialogOpen(true)}
561563
/>
562564
<SkeletonBackdrop />
563565
</Flex>
Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
1-
import { useInboxSourcesDialogStore } from "@features/inbox/stores/inboxSourcesDialogStore";
21
import { useSetHeaderContent } from "@hooks/useSetHeaderContent";
3-
import { EnvelopeSimpleIcon, GearSixIcon } from "@phosphor-icons/react";
4-
import { Box, Flex, Text } from "@radix-ui/themes";
2+
import { EnvelopeSimpleIcon } from "@phosphor-icons/react";
3+
import { Flex, Text } from "@radix-ui/themes";
54
import { useMemo } from "react";
65
import { InboxSignalsTab } from "./InboxSignalsTab";
76

87
export function InboxView() {
9-
const openSourcesDialog = useInboxSourcesDialogStore((s) => s.setOpen);
10-
118
const headerContent = useMemo(
129
() => (
1310
<Flex align="center" gap="2" className="w-full min-w-0">
@@ -20,24 +17,16 @@ export function InboxView() {
2017
>
2118
Inbox
2219
</Text>
23-
<button
24-
type="button"
25-
onClick={() => openSourcesDialog(true)}
26-
className="no-drag ml-auto flex cursor-pointer items-center gap-1 border-0 bg-transparent p-0 text-[12px] text-gray-10 transition-colors hover:text-gray-12"
27-
>
28-
<GearSixIcon size={12} />
29-
<span>Configure sources</span>
30-
</button>
3120
</Flex>
3221
),
33-
[openSourcesDialog],
22+
[],
3423
);
3524

3625
useSetHeaderContent(headerContent);
3726

3827
return (
39-
<Box style={{ height: "100%" }}>
28+
<div style={{ height: "100%" }}>
4029
<InboxSignalsTab />
41-
</Box>
30+
</div>
4231
);
4332
}

apps/code/src/renderer/features/inbox/components/SignalSourceToggles.tsx

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ import {
99
VideoIcon,
1010
} from "@phosphor-icons/react";
1111
import {
12+
Badge,
1213
Box,
1314
Button,
1415
Flex,
1516
Link,
1617
Spinner,
1718
Switch,
1819
Text,
20+
Tooltip,
1921
} from "@radix-ui/themes";
2022
import type {
2123
Evaluation,
@@ -34,6 +36,7 @@ export interface SignalSourceValues {
3436
interface SignalSourceToggleCardProps {
3537
icon: React.ReactNode;
3638
label: string;
39+
labelSuffix?: React.ReactNode;
3740
description: string;
3841
checked: boolean;
3942
onCheckedChange: (checked: boolean) => void;
@@ -47,6 +50,7 @@ interface SignalSourceToggleCardProps {
4750
const SignalSourceToggleCard = memo(function SignalSourceToggleCard({
4851
icon,
4952
label,
53+
labelSuffix,
5054
description,
5155
checked,
5256
onCheckedChange,
@@ -77,9 +81,16 @@ const SignalSourceToggleCard = memo(function SignalSourceToggleCard({
7781
<Flex align="center" gap="3">
7882
<Box style={{ color: "var(--gray-11)", flexShrink: 0 }}>{icon}</Box>
7983
<Flex direction="column" gap="1">
80-
<Text size="2" weight="medium" style={{ color: "var(--gray-12)" }}>
81-
{label}
82-
</Text>
84+
<Flex align="center" gap="2">
85+
<Text
86+
size="2"
87+
weight="medium"
88+
style={{ color: "var(--gray-12)" }}
89+
>
90+
{label}
91+
</Text>
92+
{labelSuffix}
93+
</Flex>
8394
<Text size="1" style={{ color: "var(--gray-11)" }}>
8495
{description}
8596
</Text>
@@ -90,13 +101,12 @@ const SignalSourceToggleCard = memo(function SignalSourceToggleCard({
90101
) : requiresSetup ? (
91102
<Button
92103
size="1"
93-
variant="soft"
94104
onClick={(e) => {
95105
e.stopPropagation();
96106
onSetup?.();
97107
}}
98108
>
99-
Connect
109+
Enable
100110
</Button>
101111
) : (
102112
<Switch
@@ -174,9 +184,25 @@ export const EvaluationsSection = memo(function EvaluationsSection({
174184
<BrainIcon size={20} />
175185
</Box>
176186
<Flex direction="column" gap="1" style={{ flex: 1, minWidth: 0 }}>
177-
<Text size="2" weight="medium" style={{ color: "var(--gray-12)" }}>
178-
LLM evaluations
179-
</Text>
187+
<Flex align="center" gap="2">
188+
<Text
189+
size="2"
190+
weight="medium"
191+
style={{ color: "var(--gray-12)" }}
192+
>
193+
PostHog LLM Analytics
194+
</Text>
195+
<Tooltip content="This is only visible to staff users of PostHog">
196+
<Badge
197+
color="blue"
198+
size="1"
199+
variant="surface"
200+
className="!py-0 !text-[9px] !leading-tight uppercase"
201+
>
202+
Internal
203+
</Badge>
204+
</Tooltip>
205+
</Flex>
180206
<Text size="1" style={{ color: "var(--gray-11)" }}>
181207
Ongoing evaluation of how your AI features are performing based on
182208
defined criteria
@@ -295,9 +321,27 @@ export function SignalSourceToggles({
295321

296322
return (
297323
<Flex direction="column" gap="2">
324+
<SignalSourceToggleCard
325+
icon={<BugIcon size={20} />}
326+
label="PostHog Error Tracking"
327+
description="Surface new issues, reopenings, and volume spikes"
328+
checked={value.error_tracking}
329+
onCheckedChange={toggleErrorTracking}
330+
disabled={disabled}
331+
/>
298332
<SignalSourceToggleCard
299333
icon={<VideoIcon size={20} />}
300334
label="PostHog Session Replay"
335+
labelSuffix={
336+
<Badge
337+
color="orange"
338+
size="1"
339+
variant="surface"
340+
className="!py-0 !text-[9px] !leading-tight uppercase"
341+
>
342+
Alpha
343+
</Badge>
344+
}
301345
description="Analyze session recordings and event data for UX issues"
302346
checked={value.session_replay}
303347
onCheckedChange={toggleSessionReplay}
@@ -311,14 +355,6 @@ export function SignalSourceToggles({
311355
) : undefined
312356
}
313357
/>
314-
<SignalSourceToggleCard
315-
icon={<BugIcon size={20} />}
316-
label="PostHog Error Tracking"
317-
description="Surface new issues, reopenings, and volume spikes"
318-
checked={value.error_tracking}
319-
onCheckedChange={toggleErrorTracking}
320-
disabled={disabled}
321-
/>
322358
{evaluations && evaluationsUrl && onToggleEvaluation && (
323359
<EvaluationsSection
324360
evaluations={evaluations}

apps/code/src/renderer/features/inbox/components/detail/ReportDetailPane.tsx

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ import {
1818
Cloud as CloudIcon,
1919
CommandIcon,
2020
EyeIcon,
21-
GithubLogoIcon,
2221
KeyReturnIcon,
2322
WarningIcon,
2423
XIcon,
2524
} from "@phosphor-icons/react";
2625
import {
2726
AlertDialog,
27+
Badge,
2828
Box,
2929
Button,
3030
Flex,
@@ -469,9 +469,12 @@ export function ReportDetailPane({ report, onClose }: ReportDetailPaneProps) {
469469
gap="2"
470470
wrap="wrap"
471471
>
472-
<GithubLogoIcon
473-
size={14}
474-
className="shrink-0 text-gray-10"
472+
<img
473+
src={`https://github.com/${reviewer.github_login}.png?size=28`}
474+
alt=""
475+
className="github-avatar shrink-0 rounded-full"
476+
style={{ width: 18, height: 18 }}
477+
onLoad={(e) => e.currentTarget.classList.add("loaded")}
475478
/>
476479
<Text size="1" className="text-[12px]">
477480
{reviewer.user?.first_name ??
@@ -480,16 +483,18 @@ export function ReportDetailPane({ report, onClose }: ReportDetailPaneProps) {
480483
</Text>
481484
{isMe && (
482485
<Tooltip content="You are a suggested reviewer">
483-
<span
484-
className="inline-flex shrink-0 items-center rounded-sm px-1 py-px"
485-
style={{
486-
color: "var(--amber-11)",
487-
backgroundColor: "var(--amber-3)",
488-
border: "1px solid var(--amber-6)",
489-
}}
486+
<Badge
487+
color="amber"
488+
size="1"
489+
variant="surface"
490+
className="!py-1 !text-[8px] !leading-tight"
490491
>
491-
<EyeIcon size={10} weight="bold" />
492-
</span>
492+
<EyeIcon
493+
size={8}
494+
weight="bold"
495+
className="shrink-0"
496+
/>
497+
</Badge>
493498
</Tooltip>
494499
)}
495500
<a

apps/code/src/renderer/features/inbox/components/list/GitHubConnectionBanner.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ export function GitHubConnectionBanner() {
8080
}}
8181
>
8282
<GithubLogoIcon className="flex-none" size={12} />
83-
<span className="min-w-0 flex-1 basis-0">
84-
{`Connect your GitHub profile to highlight what's relevant to you`}
83+
<span className="min-w-0 flex-1 basis-0 text-balance">
84+
Connect your GitHub profile to highlight what's relevant to you
8585
</span>
8686
<ArrowSquareOutIcon className="flex-none" size={11} />
8787
</Button>

0 commit comments

Comments
 (0)