Conversation
NOVUS-357 Adds a "View Report" button on the Dashboard that opens a styled preview modal for OKR markdown reports. Users can view a pretty-rendered report with progress bars or export the .md file directly from the modal. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Novus Diff AnalysisThe PR Analysis Summary — NOVUS-357: Add in-app Markdown report viewerUpdated
Created
No changes needed
Skipped
No code gen requiredNo new Artifacts Managed
|
There was a problem hiding this comment.
Novus UX Review
Three UX concerns: the custom markdown renderer silently drops plain text lines (including the "No objectives" fallback text from generateMarkdown), the UI now has two buttons that trigger the same export action from the same screen which muddies the preview-then-export intent, and the new modal Export button repeats the same no-feedback pattern that Pendo's high-priority signal already flagged as causing dead-click frustration on the original Export button.
| ); | ||
| } else if (line.trim() === '') { | ||
| elements.push(<div key={key++} className="h-1" />); | ||
| } |
There was a problem hiding this comment.
[warning] Plain text lines are silently dropped — the renderer only handles #, ##, ###, -, and empty lines, with no fallback. generateMarkdown() emits "No objectives in this category.\n" for empty sections, which is a plain text line and will disappear entirely in the preview. Users will see a blank gap where that message should appear with no indication content is missing. Add an else clause that renders unrecognized lines as a <p> element.
| <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" /> | ||
| <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" /> | ||
| </svg> | ||
| View Report |
There was a problem hiding this comment.
[warning] There are now two ways to trigger the exact same export from the same screen — this "Export .md" button and the "Export" button inside the modal. The modal was presumably introduced to let users preview before exporting, but keeping a direct export button alongside it undercuts that intent and creates ambiguity: is "View Report" a prerequisite step, or a parallel path? Consider removing this direct export button so the flow is clear: View Report → Export.
| <h2 className="text-xl font-semibold text-gray-900">{title}</h2> | ||
| <div className="flex items-center gap-2"> | ||
| <button | ||
| onClick={onExport} |
There was a problem hiding this comment.
[warning] A high-priority Pendo signal flagged that the existing Export button on the Dashboard has dead-click frustration — "session oFkGVZZwQykbocLM shows the Export button triggers dead click frustration within the first second of the session, suggesting the button may lack immediate visual feedback on click" (Export to Markdown: 11% adoption, 3 events/2 visitors in 30 days). This new modal Export button has the same pattern: clicking it silently triggers a download with no loading state, success toast, or confirmation. The root frustration isn't being addressed — consider adding a brief visual confirmation (e.g., button label briefly changes to "Exported!") to signal the action completed.
Novus Diff AnalysisNo Novus-relevant changes detected in this PR. All done. Here's a summary of everything completed for PR #8: PR Analysis Summary — NOVUS-357: Add in-app Markdown report viewerDiff AnalysisThis PR adds a
No new pages, track events, metadata fields, or agents were introduced. Artifact StatusAlready existed (verified correct, no changes needed):
Created
Code GenNone required — no new track events, metadata, or agents were added by this PR. |
There was a problem hiding this comment.
Novus UX Review
Two UX concerns: the modal's progress bars break the app's green/yellow/red color convention by using blue for 70–99%, which will confuse users; and the direct Export .md button still lacks click feedback despite a documented dead-click frustration signal on that exact button.
| percent >= 100 ? 'bg-green-500' : percent >= 70 ? 'bg-blue-500' : percent >= 40 ? 'bg-yellow-500' : 'bg-red-400' | ||
| }`} | ||
| style={{ width: `${Math.min(percent, 100)}%` }} | ||
| /> |
There was a problem hiding this comment.
[warning] The modal progress bars use bg-blue-500 for 70–99% completion, but the app's established color system uses green for >70% (as documented in OKR Management and visible in the existing ProgressBar component). Users who've learned "green = on track" in every other OKR view will misread blue as a neutral or unknown state in the report preview. Change the 70% threshold branch from bg-blue-500 to bg-green-500 to stay consistent.
| </button> | ||
| <button | ||
| onClick={exportToMarkdown} | ||
| className="inline-flex items-center gap-2 px-4 py-2 bg-blue-600 text-white text-sm font-medium rounded-lg hover:bg-blue-700 transition-colors" |
There was a problem hiding this comment.
[info] A high-priority Pendo signal (2026-03-14) flagged the Export button as a dead-click source — session oFkGVZZwQykbocLM recorded dead clicks on it within the first second, with only 11.1% adoption (2 visitors, 3 clicks) against a 25% goal. The new "View Report" modal is a good step toward making the feature feel more substantial, but the direct "Export .md" button still fires a silent file download with no visual acknowledgment. A brief toast ("Report downloaded") or a momentary button state change would close the feedback loop that's currently generating the dead-click signal.
There was a problem hiding this comment.
Novus UX Review
Two UX concerns: (1) the modal's progress bar uses blue for 70–99% completion, breaking the red/yellow/green color system used everywhere else in the app; (2) keeping a direct "Export .md" button alongside the new modal export path fragments an already-underperforming feature (10% adoption vs. 25% target) without a clear strategy for which path should drive the metric.
| percent >= 100 ? 'bg-green-500' : percent >= 70 ? 'bg-blue-500' : percent >= 40 ? 'bg-yellow-500' : 'bg-red-400' | ||
| }`} | ||
| style={{ width: `${Math.min(percent, 100)}%` }} | ||
| /> |
There was a problem hiding this comment.
[warning] The modal progress bar uses bg-blue-500 for 70–99% completion, but every other progress bar in the app (OKR Management pages) uses green for >70%. A user who sees a KR at 75% rendered green on the Team OKRs page will see the same KR colored blue in this modal — two different signals for the same state. Change bg-blue-500 to bg-green-500 to match the established red/yellow/green color system.
| <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" /> | ||
| </svg> | ||
| View Report | ||
| </button> |
There was a problem hiding this comment.
[info] Export adoption is well below target — 10% of visitors (2 of 20 accounts, 3 total clicks) over the last 30 days vs. a 25% account goal (active Pendo signal). This PR keeps the direct "Export .md" button in the header and adds a second export path inside the modal, splitting the funnel in two. If the preview modal is intended to build confidence and drive export adoption, consider removing the redundant top-level export button and routing all exports through View Report → Export — it creates a cleaner mental model and makes it easier to measure whether the modal is actually moving the adoption needle.
Novus Diff AnalysisHere's a summary of everything done for PR #8 — NOVUS-357: Add in-app Markdown report viewer: Inventory CheckAll key features introduced by this PR were already present in the artifact system:
No pages, metadata, or agents changed. Created
Code Gen PRs
Skipped
Artifacts Managed
|
There was a problem hiding this comment.
Novus UX Review
Two UX concerns: (1) the modal's progress bar color scale breaks the established red/yellow/green vocabulary by introducing blue for 70–99%, which will conflict with what users see on every OKR management page; (2) the okr_report_viewed track event is never fired, leaving no way to measure whether the new preview modal actually improves export adoption — a metric currently at 11.1% against a 25% goal.
| <div className="w-20 h-2 bg-gray-200 rounded-full overflow-hidden"> | ||
| <div | ||
| className={`h-full rounded-full transition-all ${ | ||
| percent >= 100 ? 'bg-green-500' : percent >= 70 ? 'bg-blue-500' : percent >= 40 ? 'bg-yellow-500' : 'bg-red-400' |
There was a problem hiding this comment.
[warning] The progress bar uses bg-blue-500 for 70–99% — but everywhere else in the product (OKR Management pages, Dashboard progress bars) the color vocabulary is explicitly red < 40%, yellow 40–70%, green > 70%. A user who sees a 75% KR as green on the Company OKRs page will see the same KR as blue in this modal, which will read as a different status. Change bg-blue-500 to bg-green-500 here to match the established scale, and drop the separate 100% green band (or keep it as bg-emerald-500 if you want to distinguish "complete").
| > | ||
| Export to Markdown | ||
| </button> | ||
| <div className="flex items-center gap-2"> |
There was a problem hiding this comment.
[warning] The okr_report_viewed track event exists in the system (defined to capture quarter + objective counts for adoption tracking) but is never fired here — only a Pendo click feature tag will fire. Export is currently at 11.1% account adoption against a 25% goal (signal from Mar 14–20, 2 of 18 accounts), and this modal is the explicit mechanism to close that gap. Without the track event, you can't measure whether the preview step actually increases export conversions. Add window.pendo?.track('okr_report_viewed', { quarter: selectedQuarter, ... }) alongside setShowPreview(true).
Novus Diff AnalysisNo Novus-relevant changes detected in this PR. All done. Here's a summary of everything executed for PR #8: PR Analysis Summary — NOVUS-357: Add in-app Markdown report viewerArtifact InventoryAll key artifacts for this PR were already pre-created and needed no changes:
Code Gen PR (Track Events)
Launch Created
Goals ConnectedThis launch directly supports the active goals around OKR Markdown Export adoption (
|
Novus Diff AnalysisNo Novus-relevant changes detected in this PR. Here's a summary of all actions taken for PR #8 (NOVUS-357 — Add in-app Markdown report viewer): AnalysisExisting artifacts already covered this PR's changes — no creates or archives were needed. All three new UI elements (View Report button, Report Modal Export button, Export .md button) and the Actions TakenCode Gen
Launch Created
Artifacts Linked to Launch
These artifacts directly support the active goals targeting Export MD feature adoption (
|
There was a problem hiding this comment.
Novus UX Review
Two UX concerns flagged: a color-coding inconsistency in the modal's progress bars (blue vs. the app-wide green for >70%) that breaks established visual semantics, and a missing okr_report_viewed tracking call that will prevent measuring whether the new preview path improves export adoption — which is already a high-priority signal at 10% vs. a 25% goal.
| <div className="w-20 h-2 bg-gray-200 rounded-full overflow-hidden"> | ||
| <div | ||
| className={`h-full rounded-full transition-all ${ | ||
| percent >= 100 ? 'bg-green-500' : percent >= 70 ? 'bg-blue-500' : percent >= 40 ? 'bg-yellow-500' : 'bg-red-400' |
There was a problem hiding this comment.
[warning] The modal uses bg-blue-500 for 70–99% progress, but the rest of the app uses green for >70% (the OKR management pages and Dashboard progress bars all follow red < 40%, yellow 40–70%, green > 70%). Users who open this report after viewing their OKRs will see the same objective — say, 75% complete — rendered green on the OKR page and blue in the modal, which contradicts the color coding they've internalized. Change bg-blue-500 to bg-green-500 to stay consistent with the existing semantic.
| </button> | ||
| <div className="flex items-center gap-2"> | ||
| <button | ||
| onClick={() => setShowPreview(true)} |
There was a problem hiding this comment.
[warning] Export adoption is at 10% (2 of 20 accounts), well below the 25% goal, and is flagged as a high-priority signal. The okr_report_viewed track event exists as an active artifact specifically to measure whether the preview path converts to exports — but this click handler only calls setShowPreview(true) with no window.pendo.track("okr_report_viewed", ...) call. Without it, you won't be able to tell how many users open the report vs. go on to export, making it impossible to evaluate whether this new flow moves the adoption needle.
NOVUS-357 Adds a "View Report" button on the Dashboard that opens a styled preview modal for OKR markdown reports. Users can view a pretty-rendered report with progress bars or export the .md file directly from the modal.