Skip to content

feat(feed): briefing widget for the feed widget rail - #6995

Merged
rebelchris merged 6 commits into
mainfrom
feat/feed-widget-briefing
Oct 22, 2026
Merged

rebelchris merged 6 commits into
mainfrom
feat/feed-widget-briefing

Conversation

@rebelchris

@rebelchris rebelchris commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Adds the Briefing widget (briefing) to the feed widget rail, behind the existing feed_widgets flag.
  • Shows the reader's newest presidential briefing, following the Briefing widget in the storybook exploration (docs(storybook): hero cover widget rail exploration #6943):
    • Tall: the feed's brief card (BriefCardReady, the pastel brief) fills the cell edge to edge.
    • Large: split in half, the brief card on the left and the Must know claims on the right, with "Read the brief".
    • Small: the label with the read time, the brief's title and its first three Must know claims.
    • With no brief yet, it links to /briefing, where the existing generate card lives.
  • Data: the existing briefingPosts connection with first: 1, through a new latestBriefingQueryOptions (batched secondary query). It's keyed under the briefing feed, so generating a brief clears it too. No API change.
  • Key points reuse the brief body helpers (getBriefSection and splitBriefBullet) through a new getBriefKeyPoints. When a brief has no Must know section, it falls back to all bullets. The Must know heading is now a shared constant.
  • Availability stays logged-in only, as the registry already had it. Briefs aren't Plus-gated for reading: the brief page shows its own upgrade alert. So there's no Plus gate or upsell in the widget.
  • Analytics: impression brief once and click brief, with origin: feed widgets, plus the usual post click.

Test plan

  • jest src/features/feedWidgets src/features/briefing: new BriefingWidget.spec.tsx covers the card at Tall, the split at Large, the Small list and its click event, the impression event, and the empty state
  • eslint on changed files, typecheck-strict-changed, webapp tsc --noEmit
  • Check visually on the rail at Small / Tall / Large, in light and dark themes

🤖 Generated with Claude Code

Preview domain

https://feat-feed-widget-briefing.preview.app.daily.dev

Shows the reader's newest presidential briefing on the rail: its date,
the TL;DR (summary) and, at Tall and Large, the Must know claims parsed
from contentHtml with the existing brief body helpers. The whole widget
opens the brief; with no brief yet it links to /briefing, where the
existing generate card lives.

Data comes from the existing briefingPosts connection (first: 1) through
a new latestBriefingQueryOptions, batched as a secondary query and keyed
under the briefing feed so generating a brief drops it too. Briefs are
readable without Plus (the brief page carries the upgrade alert), so the
widget keeps the registry's logged-in-only availability rather than a
Plus gate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
daily-webapp Ready Ready Preview Oct 22, 2026 8:32am UTC
storybook Ready Ready Preview Oct 22, 2026 8:32am UTC

Request Review

…fing

# Conflicts:
#	packages/shared/src/features/feedWidgets/components.ts
The widget drew its own text layout, which read as unfinished next to the
rail's other cards. It now follows the Briefing widget in the storybook
exploration (apps#6943):

- Tall: the feed's brief card (BriefCardReady, the pastel brief) fills the
  cell edge to edge, its outline and inner ring dropped. The kind is bare
  from Tall up, so no widget surface frames it.
- Large: split in half, the brief card on the left and the Must know
  claims on the right, with "Read the brief".
- Small: the label with the read time, the brief's title and its first
  three Must know claims.

The query also fetches what the card renders (savedTime, generatedAt and
the collection sources), and the card's own click event carries the new
TargetId.FeedWidgets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
rebelchris and others added 3 commits October 22, 2026 10:25
The surface class carried flex-col, which won over the flex-row added for
Large, so the brief card and the Must know list stacked: the card stopped
short at the top and the list collapsed under a label row. Large is now a
row, the card fills its half with square inner corners (the tile's own
corner clips it), and the list is headed "Must know" as in the design.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@rebelchris
rebelchris merged commit 9560e6b into main Oct 22, 2026
13 checks passed
@rebelchris
rebelchris deleted the feat/feed-widget-briefing branch October 22, 2026 08:37

This branch was successfully deployed

2 active deployments
Preview – daily-webapp — 474ce49c Deployed Oct 22, 2026 by vercel[bot]
Preview – storybook — 474ce49c Deployed Oct 22, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant