Skip to content

feat(dashboard): add the latest finding ticker to the panel - #2124

Closed
brunod-e wants to merge 7 commits into
feat/panel-v2.1-herofrom
feat/panel-v2.1-ticker
Closed

feat(dashboard): add the latest finding ticker to the panel#2124
brunod-e wants to merge 7 commits into
feat/panel-v2.1-herofrom
feat/panel-v2.1-ticker

Conversation

@brunod-e

Copy link
Copy Markdown
Collaborator

Part 2/6 of the Panel v2.1 stack (DEV-1148). Base: feat/panel-v2.1-hero (#2123).

What changes

Section 2 of the spec — a one-line strip between the hero and the Monitored DAOs table: the LATEST FINDING label, the finding sentence, and Read the case →.

  • LatestFindingTicker.tsx (new) — surfaces/default, px-4 py-3, label in text-alternative-sm mono, sentence in 14px secondary, link right-aligned (DefaultLink highlight/sm). Stacks on mobile.
  • mocked-latest-finding.ts (new) — the finding sentence + case URL.

Figma: 3633:96681 (annotated "Show the latest blog post").

Mocked, on purpose

The spec wants this fed by the Paragraph API ("links to the Paragraph last publication, use API") and there is no Paragraph integration in the repo yet. Per Bruno's call, the content is mocked: the ticker reads exactly two fields (finding, caseUrl), so swapping in a server-side fetch of the newest post is a drop-in replacement. TODO(DEV-1148) marks it.

The link currently points at the publication root (paragraph.com/@blockful) rather than a specific post.

Verification

tsc --noEmit clean · eslint clean · 527 tests / 54 suites pass · rendered locally at 1440px.

@vercel

vercel Bot commented Aug 13, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
anticapture-storybook Ready Ready Preview Aug 18, 2026 11:57pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
anticapture Ignored Ignored Aug 18, 2026 11:57pm

Request Review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6f275fea24

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/dashboard/shared/services/paragraph/latestPost.ts

Copy link
Copy Markdown
Collaborator

🎨 UI Review

Automated review · Figma: 🛰️ Product Design — Spotlight / Latest finding · Spec: DEV-1148
⚠️ ClickUp is rate-limited for this run (~19h cooldown) — spec text cross-check and task image attachments were skipped. ⚠️ The anticapture (dashboard) Vercel preview is Ignored for this PR stack — only Storybook deployed. Review is grounded in Figma + diff only.


Latest Finding Ticker

Desktop

  • No truncation on the finding sentence — Figma's mock sets whitespace-nowrap on the label+sentence row (single-line intent), but LatestFindingTicker.tsx's <p> has no truncate/line-clamp-1. The mock's test string is short; real Paragraph post titles will vary in length and, unlike the design, can wrap the row onto a second line next to the "Read the case" link, breaking the compact one-line strip the design shows. Add truncate (plus min-w-0 on the flex-1 wrapper so it can actually shrink) or line-clamp-1. (LatestFindingTicker.tsx:15) [Figma-confirmed]

Validated against Figma — no change needed

  • Row padding (px-4 py-3 = 16/12px) and gap (lg:gap-3.5 = 14px) match the Figma frame exactly.
  • Label typography (mono, 13px/20/6% tracking, uppercase) and sentence typography (Inter 14px/20, text-secondary) match the Figma type styles.
  • Layout — label+sentence as a growing flex item, Read the case link pinned to the end — matches the Figma structure (Latest Finding Container flex-1 + trailing Link/Default).
  • Uses the DS DefaultLink (highlight, small, with ChevronRight) rather than a hand-rolled link — matches the Figma Code Connect mapping.

Mobile

No dedicated mobile Figma frame was provided. The row stacks (flex-col, gap-2) with the link falling below the sentence — a reasonable responsive treatment given no spec frame to check against.


Generated by Claude Code

Copy link
Copy Markdown
Collaborator

🎨 UI Review

Automated review · Spec: DEV-1148 (Panel v2.1) · Figma frame referenced: 3633:96681
⚠️ Same config gap as the rest of this stack — Figma MCP couldn't resolve this file's frames and ClickUp was rate-limited this run. Reviewed via diff + repo conventions + UX-expert evaluation only.


Latest Finding ticker

  • Description vs. diff mismatch: the PR description says this ships mocked (mocked-latest-finding.ts with two static fields). The actual diff has no mock file — LatestFindingTicker is an async Server Component that fetches Paragraph's live public RSS feed (shared/services/paragraph/latestPost.ts). Looks like a (nice) upgrade over the plan, but worth confirming so reviewers know real content ships, not a placeholder.
  • No loading/error state for the live fetch: since the component is an async Server Component with no <Suspense> boundary and the fetch call has no timeout guard, a slow/unresponsive Paragraph feed will stall the whole panel's initial render rather than degrading straight to the PARAGRAPH_PUBLICATION fallback that's already coded for HTTP failures. Consider wrapping in Suspense with a skeleton, and adding AbortSignal.timeout(...) to the fetch so a hung request can't block the page. (apps/dashboard/shared/services/paragraph/latestPost.ts)

Validated — no change needed

  • Label styling (text-alternative-sm mono uppercase) matches the pattern already established by the hero card in part 1/6 — consistent.

Findings: 2 total — 0 must-fix, 2 nice-to-have (one worth a quick author confirmation)


Generated by Claude Code

Copy link
Copy Markdown
Collaborator

🎨 UI Review

Automated review · Figma: 🛰️ Product-Design — Spotlight / Latest finding · Spec (DEV-1148) · Preview: only anticapture-storybook deployed for this branch — no live dashboard preview, diff + Figma review only.
⚠️ ClickUp API is rate-limited for this run, so the task's attachments/comments weren't pulled independently.


Panel — Latest Finding ticker

Validated against Figma — no change needed

  • px-4 py-3 (16/12px) and gap-3.5 (14px) between label/finding/link match the Figma frame's padding and gap exactly.
  • Label styling (text-alternative-sm tracking-alternative-sm font-mono uppercase) matches the "LATEST FINDING" mono/13px/0.78px-tracking style used elsewhere in this stack.
  • Finding sentence at text-sm text-secondary matches Figma's Inter Regular 14px on text/secondary.
  • "Read the case" renders uppercase via DefaultLink's highlight styling, same as the Hero's "How the framework works" — consistent with the sentence-case-in-JSX / uppercase-via-CSS pattern already in this codebase, not a copy mismatch.

Question for author

  • The PR description says the finding sentence is mocked pending a Paragraph API integration, but the diff ships a real RSS reader (shared/services/paragraph/latestPost.ts) hitting api.paragraph.com with a documented fallback. Worth updating the description so reviewers aren't evaluating against a stale plan — not a UI issue, just flagging so it doesn't cause confusion in review.

Generated by Claude Code

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c54f5815e5

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread .changeset/panel-v21-ticker.md Outdated
brunod-e and others added 7 commits August 18, 2026 20:55
A one-line strip between the hero and the Monitored DAOs table: the LATEST
FINDING label, the finding sentence, and a link out to the case write-up.

The sentence and its URL come from a mock for now — swapping in a fetch of
the newest Paragraph publication only has to replace the two fields the
ticker reads.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Same one-step-off letter-spacing as the hero card title: `tracking-wider`
resolves to a fixed 0.72px, which is the 12px value, not the 0.78px the
13px Alternative/Small style calls for.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The ticker shipped a hardcoded finding pointing at the publication index, so
"Read the case" never opened the post it described. Paragraph exposes no JSON
API for a blog's posts, so the newest publication now comes off the public RSS
feed, revalidated hourly, falling back to the publication index whenever the
feed is unreachable.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The homepage awaits this ticker while it renders, so the feed sits on the
critical path of the whole page. The fallback only covers a request that fails;
a host that accepts the connection and then goes quiet would hold the render
open until the transport itself gave up, which can be minutes. Three seconds
is the cap, after which the publication index ships instead.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Figma draws the label, the finding and the link on a single row, and the mock
was measured against a short test string. Real feed titles are longer than
that, and the sentence would push the row onto a second line next to the link.
It ellipsizes on desktop now and still wraps on mobile, where the link already
sits on its own line.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…eset

The changeset still said the finding sentence was mocked pending a Paragraph
integration, but the same diff ships `getLatestParagraphPost()` reading the
publication's RSS feed server-side with a timeout and a publication-index
fallback. Changesets copies this text verbatim into the published CHANGELOG, so
leaving it would ship a release note telling readers the feature is a placeholder
when it is already live.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@brunod-e

Copy link
Copy Markdown
Collaborator Author

Superseded by #2137, which combines the whole panel v2.1 stack into a single PR against dev.

@brunod-e brunod-e closed this Aug 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants