Skip to content

feat(signals): add a clickable inbox redesign demo at /v2 urls - #86671

Open
cvolzer3 wants to merge 14 commits into
masterfrom
chris/investigations-inbox-redesign-demo
Open

feat(signals): add a clickable inbox redesign demo at /v2 urls#86671
cvolzer3 wants to merge 14 commits into
masterfrom
chris/investigations-inbox-redesign-demo

Conversation

@cvolzer3

@cvolzer3 cvolzer3 commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Problem

Anyone reviewing the inbox redesign has to imagine it from static mockups, because there is nothing to click. This PR makes the redesign a running surface so the team can try the triage flow and react to it.

The demo is mock-data only. Nothing calls the backend, and no real inbox report, customer, or account appears in it.

Changes

  • Five pages render the redesign at /v2/inbox, /v2/inbox/focus, /v2/report/:id, /v2/report/:id/monitor and /v2/report/:id/resolved.
  • The reports tab sorts reports into "Needs a decision", "Monitoring" and "Resolved". Each section collapses and pages behind "Show more".
  • A scope switch picks between the products you work on and the whole project. A product filter narrows further.
  • The report page opens a chat about that report in the side panel.
  • Focus mode triages one report at a time from the keyboard.
  • The routes have no sidebar entry. Reaching the demo takes a direct URL.
Screenshot 2026-08-20 at 12 42 19 PM Screenshot 2026-08-20 at 12 42 40 PM Screenshot 2026-08-20 at 12 42 47 PM Screenshot 2026-08-20 at 12 43 08 PM

Note

This ships demo code to production. It is inert: mock data, URL-only routes, no navigation entry, no API calls. The intent is to delete it once the redesign is decided.

The riskiest file is SidePanelMax.tsx, the one change outside the demo folder. It branches the Max side panel on a v2-report: option prefix and lazy-loads the demo chat. Every other file lives under products/signals/frontend/v2/.

How did you test this code?

  • The three screenshots above are Storybook renders of this branch, captured from the Scenes-App/Inbox v2 stories.
  • pnpm --filter=@posthog/frontend typescript:check reports no errors in the changed files. The errors it does report are on master and unrelated.
  • oxfmt --check passes on every changed file.
  • hogli ci:preflight --strict passes with zero failures.
  • No tests are added. The demo renders fixed mock data with no branching logic worth pinning.
  • Not done: no click-through of the running app. The scenes were rendered, not driven, so the side panel chat and the focus-mode keyboard shortcuts are unverified outside their unit of code.

Automatic notifications

  • Publish to changelog?

Docs update

None. The demo is internal and unlisted.

🤖 Agent context

Autonomy: Human-driven (agent-assisted)

Built with Claude Code across several sessions. Skills invoked: /writing-pr-descriptions.

Public artifact check. The mock data was audited before this branch was pushed, because a demo that imitates real reports is exactly the kind of thing that leaks. Verified: all 8 report headlines return zero matches against the live inbox; all 5 commit SHAs are invented and resolve to nothing in this repo; all 6 feature flag keys exist nowhere outside the demo folder; no emails, external URLs, secrets, customer names, or quoted text anywhere. Evidence counts are aggregate only, and the report chat composes replies from the mock fields rather than replaying a transcript. Two reviewer names read as plausible real people and were replaced with J. Doe and A. Roe. The scenarios are invented bugs written against PostHog's own public product surfaces, not derived from real reports.

The reports tab now sorts reports into "Needs a decision", "Monitoring"
and "Resolved" sections, each collapsible and paged behind "Show more".
A scope switch picks between the products you work on and the whole
project, and a product filter narrows further. Grouped rows carry a
volume sparkline and source chips.

Opening a report can now start a chat about it in the side panel, backed
by a mocked conversation.

Focus mode drops the progress dots and the shortcuts modal, renames
"Acknowledge" to "Archive", and opens the full report on cmd+enter.

Every mock report now ships full report-page content, so no row in the
inbox opens an empty page.
@cvolzer3 cvolzer3 self-assigned this Aug 20, 2026
@trunk-io

trunk-io Bot commented Aug 20, 2026

Copy link
Copy Markdown

Merging to master in this repository is managed by Trunk.

  • To merge this pull request, check the box to the left or comment /trunk merge below.

After your PR is submitted to the merge queue, this comment will be automatically updated with its status. If the PR fails, failure details will also be posted here

@cvolzer3 cvolzer3 added the hogbox-preview Spin up a per-PR PostHog preview on a hogland hogbox label Aug 20, 2026
@github-actions
github-actions Bot requested a deployment to preview-pr-86671 August 20, 2026 16:09 In progress
@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

🦔 Hogbox preview · ✅ ready

▶ Open the preview

🔑 Login test@posthog.com / 12345678 (demo data)
🧩 Running this PR's backend and frontend, on the PostHog :master base
🔗 Link stable across rebuilds — a re-push swaps the box underneath, the URL stays
🔒 Access tailnet only (PostHog VPN)
🛠️ Admin inspect & debug state in hogland
💤 Idle sleeps after ~30 min idle (snapshot to S3, zero node cost) and wakes on your next visit in ~30s, behind a brief "waking up" screen

commit 7ca24f5 · box box-2b43d34ebc89 · ready in 1134s (push → usable) · build log · rebuilds on every push, torn down on close

@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

🤖 CI report

⚠️ Trunk lane — backend Python lane

This PR is assigned to the backend Python lane. It runs backend Python tests and may merge in parallel with PRs in other lanes.

⚠️ Bundle size — 🔺 +92.6 KiB (+0.1%)

Uncompressed size of every built .js bundle, compared against the base branch.

Total: 68.67 MiB · 🔺 +92.6 KiB (+0.1%)

File Size Δ vs base
posthog-app/_parent/products/signals/frontend/v2/V2ReportScene.js 27.1 KiB 🔺 +27.1 KiB (new)
posthog-app/_parent/products/signals/frontend/v2/V2InboxScene.js 21.3 KiB 🔺 +21.3 KiB (new)
posthog-app/_parent/products/signals/frontend/v2/V2ResolvedScene.js 10.5 KiB 🔺 +10.5 KiB (new)
posthog-app/_parent/products/signals/frontend/v2/V2MonitorScene.js 10.3 KiB 🔺 +10.3 KiB (new)
posthog-app/_parent/products/signals/frontend/v2/V2FocusScene.js 9.2 KiB 🔺 +9.2 KiB (new)
posthog-app/_parent/products/signals/frontend/v2/components/ReportChatSidebar.js 5.0 KiB 🔺 +5.0 KiB (new)

Posted automatically by build-bundle-size-report · uncompressed bytes from dist-report

Eager graph — within budget

How much code each root ships on the eager path — downloaded and parsed before the surface is interactive. Measured from the esbuild output chunks (post-tree-shake, static imports only); lazy import() / React.lazy chunks are not counted.

Root Eager (shipped) Δ vs base Budget
entry (logged-out pages, app bootstrap)
src/index.tsx
1.35 MiB · 22 files 🔺 +1.8 KiB (+0.1%) ███░░░░░░░ 30.0% of 4.51 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
8.69 MiB · 3,214 files 🔺 +2.2 KiB (+0.0%) █████████░ 89.5% of 9.71 MiB

🟢 node_modules/monaco-editor/ stays out of src/index.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 node_modules/monaco-editor/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx

Largest files eagerly shipped from src/index.tsx
Size File
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
24.6 KiB ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js
6.3 KiB ../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js
4.5 KiB ../node_modules/.pnpm/@jspm+core@2.1.0/node_modules/@jspm/core/nodelibs/browser/process.js
3.9 KiB ../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js
1.4 KiB ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js
1.3 KiB src/RootErrorBoundary.tsx
912 B ../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js
789 B src/scenes/ChunkLoadErrorBoundary.tsx
762 B src/index.tsx
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
Size File
304.7 KiB ../node_modules/.pnpm/posthog-js@1.418.5/node_modules/posthog-js/dist/rrweb.js
267.7 KiB ../node_modules/.pnpm/@posthog+icons@0.38.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
250.7 KiB ../node_modules/.pnpm/posthog-js@1.418.5/node_modules/posthog-js/dist/module.js
246.9 KiB src/taxonomy/core-filter-definitions-by-group.json
154.2 KiB ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
104.4 KiB src/lib/api.ts
95.1 KiB ../packages/quill/packages/quill/dist/index.js
93.3 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js
90.6 KiB ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js

Posted automatically by check-eager-graph · sizes are eager output bytes (shipped, post-tree-shake) from the esbuild metafile · part of #32479

Toolbar bundle — eager 2.24 MiB within budget

What the toolbar ships to customer pages, measured from the esbuild output (minified, post-tree-shake). The eager set is the entry plus everything statically imported from it — fetched before any feature runs; deferred chunks load lazily. The eager guardrail is 5.72 MiB. Each output file must also stay below 10 MB, where CloudFront stops compressing it. The module boundary is enforced separately by check-toolbar-graph.

Metric Size Δ vs base Budget
Eager (shipped)
entry + static imports
2.24 MiB · 17 files 🔺 +1.5 KiB (+0.1%) ████░░░░░░ 39.1% of 5.72 MiB
Deferred (lazy) 2.09 MiB · 33 files no change n/a — loads on demand
Loader dist/toolbar.js 1.1 KiB no change █░░░░░░░░░ 5.8% of 19.5 KiB
Largest eagerly-shipped chunks
Size File
744.8 KiB dist/toolbar/toolbar-app-H5DJU5FN.css
574.5 KiB dist/toolbar/chunk-chunk-VXEEDYQS.js
484.6 KiB dist/toolbar/chunk-chunk-QYFXPLLF.js
133.6 KiB dist/toolbar/chunk-chunk-FTKXDK3B.js
131.8 KiB dist/toolbar/chunk-chunk-T5KY5WYR.js
71.2 KiB dist/toolbar/toolbar-app-SPUTTGWC.js
69.0 KiB dist/toolbar/chunk-chunk-27JL52RE.js
35.6 KiB dist/toolbar/chunk-chunk-ZNZAD6EW.js
20.9 KiB dist/toolbar/chunk-chunk-3D5VNREA.js
12.2 KiB dist/toolbar/chunk-chunk-PIK3PADE.js

Posted automatically by check-toolbar-size · sizes are toolbar output bytes (shipped, post-tree-shake) from the esbuild metafile

Dist folder size — 🔺 +11.79 MiB (+0.8%)

Total size of the built frontend/dist folder (all assets), compared against the base branch.

Total: 1475.68 MiB · 🔺 +11.79 MiB (+0.8%)

⚠️ Playwright — 1 flaky

🎭 Playwright report · View test results →

⚠️ 1 flaky test:

  • Creating a SQL insight with a variable and overriding it on a dashboard (chromium)

These issues are not necessarily caused by your changes.
Annoyed by this section? Help fix flakies and failures and it will go green!

@greptile-apps

greptile-apps Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor
Prompt To Fix All With AI
### Issue 1
products/signals/frontend/v2/v2FocusLogic.ts:159
**Completed reports remain queued**

When a reviewer acts on every report, this selector continues returning the complete `FOCUS_REPORTS` array while the actions only record statuses and navigation clamps to the last index, causing the final report to remain on screen and making the “Nothing left to triage” state unreachable.

### Issue 2
products/signals/frontend/v2/v2FocusLogic.ts:171-174
**Delayed navigation skips reports**

When a reviewer archives or dismisses a report and manually moves forward within the 320 ms delay, the pending callback advances the queue again, causing the immediately following report to be skipped.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Reviews (1): Last reviewed commit: "chore(signals): use placeholder reviewer..." | Re-trigger Greptile

],
}),
selectors({
reports: [() => [], (): DemoReport[] => FOCUS_REPORTS],

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Completed reports remain queued

When a reviewer acts on every report, this selector continues returning the complete FOCUS_REPORTS array while the actions only record statuses and navigation clamps to the last index, causing the final report to remain on screen and making the “Nothing left to triage” state unreachable.

Knowledge Base Used: Frontend app (frontend/src)

Prompt To Fix With AI
This is a comment left during a code review.
Path: products/signals/frontend/v2/v2FocusLogic.ts
Line: 159

Comment:
**Completed reports remain queued**

When a reviewer acts on every report, this selector continues returning the complete `FOCUS_REPORTS` array while the actions only record statuses and navigation clamps to the last index, causing the final report to remain on screen and making the “Nothing left to triage” state unreachable.

**Knowledge Base Used:** [Frontend app (`frontend/src`)](https://app.greptile.com/posthog-org-19734/-/custom-context/knowledge-base/posthog/posthog/-/docs/frontend-app.md)

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Comment on lines +171 to +174
cache.disposables.add(() => {
const timer = window.setTimeout(() => actions.navigate(1), AUTO_ADVANCE_MS)
return () => clearTimeout(timer)
}, 'autoAdvance')

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Delayed navigation skips reports

When a reviewer archives or dismisses a report and manually moves forward within the 320 ms delay, the pending callback advances the queue again, causing the immediately following report to be skipped.

Knowledge Base Used: Frontend app (frontend/src)

Prompt To Fix With AI
This is a comment left during a code review.
Path: products/signals/frontend/v2/v2FocusLogic.ts
Line: 171-174

Comment:
**Delayed navigation skips reports**

When a reviewer archives or dismisses a report and manually moves forward within the 320 ms delay, the pending callback advances the queue again, causing the immediately following report to be skipped.

**Knowledge Base Used:** [Frontend app (`frontend/src`)](https://app.greptile.com/posthog-org-19734/-/custom-context/knowledge-base/posthog/posthog/-/docs/frontend-app.md)

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

@posthog

posthog Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

👋 Visual changes detected for this PR.

Review and approve in PostHog Visual Review

If these changes are unexpected, they may be caused by a flaky test or a broken snapshot on master. Don't approve — rerun the job or wait for a fix.

@trunk-io

trunk-io Bot commented Aug 20, 2026

Copy link
Copy Markdown

Static BadgeStatic BadgeStatic Badge

View Full Report ↗︎Docs

@scheduled-actions-posthog

Copy link
Copy Markdown
Contributor

This PR hasn't seen activity in a week! Should it be merged, closed, or further worked on? If you want to keep it open, please remove the stale label – otherwise this will be closed in another week. If you want to permanently keep it open, use the waiting label.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

hogbox-preview Spin up a per-PR PostHog preview on a hogland hogbox stale

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant