feat(signals): add a clickable inbox redesign demo at /v2 urls - #86671
feat(signals): add a clickable inbox redesign demo at /v2 urls#86671cvolzer3 wants to merge 14 commits into
Conversation
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.
|
Merging to
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 |
🦔 Hogbox preview · ✅ ready▶ Open the preview
commit |
🤖 CI report
|
| 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 →
- 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!
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], |
There was a problem hiding this 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)
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.| cache.disposables.add(() => { | ||
| const timer = window.setTimeout(() => actions.navigate(1), AUTO_ADVANCE_MS) | ||
| return () => clearTimeout(timer) | ||
| }, 'autoAdvance') |
There was a problem hiding this 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)
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.|
👋 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. |
|
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 |
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
/v2/inbox,/v2/inbox/focus,/v2/report/:id,/v2/report/:id/monitorand/v2/report/:id/resolved.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 av2-report:option prefix and lazy-loads the demo chat. Every other file lives underproducts/signals/frontend/v2/.How did you test this code?
Scenes-App/Inbox v2stories.pnpm --filter=@posthog/frontend typescript:checkreports no errors in the changed files. The errors it does report are on master and unrelated.oxfmt --checkpasses on every changed file.hogli ci:preflight --strictpasses with zero failures.Automatic notifications
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. DoeandA. Roe. The scenarios are invented bugs written against PostHog's own public product surfaces, not derived from real reports.