Skip to content

feat(webapp): your brief homepage mockup#6076

Open
tsahimatsliah wants to merge 51 commits into
mainfrom
feat/briefing-mockup
Open

feat(webapp): your brief homepage mockup#6076
tsahimatsliah wants to merge 51 commits into
mainfrom
feat/briefing-mockup

Conversation

@tsahimatsliah
Copy link
Copy Markdown
Member

@tsahimatsliah tsahimatsliah commented May 19, 2026

Summary

Mockup of a new daily-brief homepage at /brief, gated behind a briefing_home feature flag and surfaced via a new "Your brief" sidebar entry. Hybrid data — real user/streak/explore-feed, mocked briefing items lifted from the v10 design.

Try it

  1. Enable the briefing_home flag in GrowthBook (already defaults to true in dev).
  2. Visit /brief while logged in.

Page anatomy

  • Hero — time-of-day greeting from real useAuthContext, real streak from useReadingStreak, read-time pill.
  • Lead story — community quote pulled forward as the subhead, source avatar stack, inline-expand to TL;DR + top 3 comments + related posts rail (View Transitions API + CSS grid-row fallback).
  • Reads — 4 medium discussion items in the same shape.
  • On your topics — 2x2 grid (Databases / AI & Agents / Web Development / Backend) with the v10 color map; slide-down long-form HTML body.
  • Quick hits — 6 single-line items, click-through to post.
  • Closing card — two states: "That's the brief." (in progress) / "You're current." (complete) with sparkle + gradient and a Share popover (Copy / Email / System share).
  • Explore bridge — real useFeed(FEED_V2_QUERY) slice of 8 posts in a responsive grid + "Open the full feed" CTA to /my-feed.
  • Footer — editorial "Edition #N · daily.dev · brief".

Editorial voice

All visible copy lives in copy.ts. Direct address, declarative sentences, real numbers, "permission to leave" closer — no "Trends" / "Highlights" / "Happening now" labels. Section eyebrows read as instructions, not taxonomy.

State

  • Read tracking persisted to localStorage (briefing-home-read), strikethrough + dim on read.
  • Read progress drives the closing card's in-progress vs complete state.

Validation

  • pnpm --filter webapp exec eslint pages/brief.tsx components/briefingHome clean
  • node ./scripts/typecheck-strict-changed.js passed
  • pnpm --filter webapp build compiled successfully

Test plan

  • Sidebar shows "Your brief" entry (flag-on, logged in)
  • /brief renders with real name + streak in hero
  • Click a story row → inline expand reveals TL;DR + comments + related posts rail
  • Topic cards expand into long-form HTML
  • Quick hits link out and mark as read
  • Closing card flips to "You're current." once all items are read; share popover works
  • Explore bridge loads real posts and links to /my-feed
  • Mobile (<= mobileL) layout is readable end-to-end

Made with Cursor

Preview domain

https://feat-briefing-mockup.preview.app.daily.dev

Adds a new /brief route as a community-first, hybrid-data daily briefing
experience: hero greeting + streak, lead story with a community quote pull,
inline-expandable reads, 2x2 topical digests, quick-hit one-liners, a
two-state closing card, and a bridge into a real useFeed slice of the
explore feed.

Gated behind a new featureBriefingHome flag and surfaced via a "Your brief"
sidebar entry.

Co-authored-by: Cursor <cursoragent@cursor.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 19, 2026

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

Project Deployment Actions Updated (UTC)
daily-webapp Building Building Preview May 19, 2026 9:59pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
storybook Ignored Ignored May 19, 2026 9:59pm

Request Review

Co-authored-by: Cursor <cursoragent@cursor.com>
idoshamun and others added 2 commits May 19, 2026 11:54
Big restructure based on review feedback:

- Brief is no longer a separate /brief route or sidebar item; it now mounts
  inside MainFeedLayout above the existing home strips, gated by the
  briefing_home flag. Users land directly on it and scroll past into the
  real tags strip + feed they already know.
- Cover has explicit top controls: Collapse (-> 1-line pill), Hide for
  today (-> reshow link), and Skip to feed anchor. All states persisted
  in localStorage.
- Magazine 70/30 layout: image-led lead with quote pull and a stat block
  (stories / minutes / saved / streak / progress bar).
- "Worth your attention" 3-col grid of reads.
- "On your topics" chip strip with a single inline slim digest card; the
  full HTML body opens in a reading panel.
- "Also worth a glance" 2-col one-liner list.
- New ReadingPanel: right-side Drawer on desktop, full-screen on mobile,
  with prev/next + ESC/arrow keyboard nav. Replaces the old inline
  expand so the page no longer jumps.
- Feature folder moved from packages/webapp to packages/shared/src/
  features/briefingHome since MainFeedLayout lives in shared.

Co-authored-by: Cursor <cursoragent@cursor.com>
UX overhaul based on review feedback:

- Header: replaced 3-icon control row with an explicit segmented control
  ("Your brief" / "For you"). Active tab shows a hint underneath. "For you"
  smooth-scrolls to the feed anchor below the cover. Collapse and Dismiss
  moved into a discreet overflow menu on the right. Edition number + date
  shown as a small caption.
- Lead block: dropped the blurry hero image entirely (it carried no
  information). Replaced with a proper editorial card — eyebrow strip
  with "The big thing" tag and read time, headline, narrative deck, a
  source byline ("Covered by: Hacker News, Reddit, lobste.rs +N more"),
  upvotes/comments/contributor count, a real quote pull with avatar +
  username + score, and a primary CTA "Read the breakdown".
- Reading panel: replaced the giant Drawer with the shared Modal
  primitive (FlexibleTop + Large), matching the post-modal pattern.
  Drawer-on-mobile for full-screen on small viewports. Header gets named
  Previous/Next buttons (icon only on mobile) + close. Story body now
  uses framed comment cards and a 2-col thread post grid; topic body
  keeps the prose styling with a tinted TL;DR block.
- Cards: every section now has a consistent icon eyebrow with count
  (Hot / Trending / Eye / Star) and a one-line hint on desktop. Cards
  surface read time, primary source name, secondary source count.
- Quick hits: thinner rows, colored bullet (greys out when read), hover
  arrow, eyebrow tag.
- Closing: progress bar moved up with percentage, smaller more-balanced
  action row.

Copy file rewritten with editorial labels (The big thing, Worth your
attention, On your radar, Quick hits, Read the breakdown, Read the
digest, What the community's saying, etc.) and per-item read-time
helpers.

Co-authored-by: Cursor <cursoragent@cursor.com>
…pics grid, editorial endcap

Round 3 of UX revisions:

- New BriefFloatingTabs: a floating pill at bottom-center while the
  user reads the brief ("Your brief" active, "For you" secondary).
  Clicking "For you" smooth-scrolls to the feed sentinel; scrolling
  past it morphs the pill into a full-width top-anchored bar with
  [← Back to brief | separator | ExploreChipsBar]. Chips are sourced
  from the same useFeedTagsList hook as the existing strip.
- MainFeedLayout: when briefing_home is enabled on the logged-in
  homepage, the original ExploreChipsBar is suppressed so it does
  not duplicate the docked one above the feed.
- CoverHeader: dropped the redundant segmented tabs and the 3-dot
  collapse/dismiss menu (the floating dock replaces them). The header
  is now a single block: edition meta + greeting + 1-line deck. Top
  gap reduced.
- CoverGrid: "Worth your attention" is no longer a 3-col card grid;
  it is now a scannable numbered list (01, 02, 03 …) with source +
  read time meta on the top row, big title underneath, community
  quote below, and engagement counters right-aligned. Each row is
  one big clickable surface.
- CoverTopics: killed the oval chip selector. All four topic digests
  now render at once in a 2x2 card grid, each with a colored topic
  bar, read time, headline, and 3-line TL;DR — user gets the gist of
  every topic without clicking.
- CoverClosing: rebuilt from scratch as an editorial endcap. Centered
  layout, horizontal rule with "END OF BRIEF" tag, large sign-off
  headline + sub, progress bar only if still in progress, single
  strong CTA pointing to the feed, and a colophon line ("Edition #142
  · Tue, May 19 · Filed by daily.dev") at the bottom.

Co-authored-by: Cursor <cursoragent@cursor.com>
- Replace dual floating-pill + docked-bar with a single rectangular
  rounded-12 sticky tab bar rendered between the brief and the feed in
  MainFeedLayout. Bar scrolls with content, sticks to the top once it
  hits the offset, and inline-expands the tags strip only when stuck.
  Width matches the feed column.
- Trim CoverHeader to a single eyebrow + greeting line with the deck
  inlined; remove the secondary description block.
- Flatten CoverLead: drop pull-quote, drop gradient eyebrow strip,
  tighter padding, single source byline + small primary CTA.
- Convert CoverGrid rows to compact one-line titles + meta; drop
  per-row community quote to reduce visual noise.
- Flatten CoverTopics: remove colored top stripe and dot, click-through
  cards with 2-line tldr clamp, tighter padding.
- CoverQuick: drop hint line, wrap in subtle card container, tighter
  rows.
- Rebuild CoverClosing as a single horizontal endcap row with progress,
  share, and primary CTA; remove the large editorial sign-off block.
- Reduce section gaps from gap-7 to gap-5 and overall vertical padding
  for a ~20% shorter brief.

Co-authored-by: Cursor <cursoragent@cursor.com>
Restore dual-state floating tabs and visualize the brief.

Floating bar
- Bring back the bottom-center floating bar while reading the brief and
  a top-docked bar with the tags strip expanded once the user reaches
  the feed. Both states are rectangular rounded-12 (no more oval) and
  use position: fixed so parent overflow doesn't break sticking.
- Bottom pill: just the two tabs, elevated with shadow-3.
- Docked bar: tabs + separator + full personalized tags chip strip,
  aligned to the feed column width (min(64rem, 100vw - 1.5rem)) and
  horizontally scrollable when chips overflow.
- Driven by an IntersectionObserver-equivalent rAF measurement of
  #brief-feed-start.

Brief visuals
- Header trimmed to a single line: greeting + tiny meta.
- Lead is now a hero card with a 16:10 cover image (uses first post
  image) on tablet+, "The big thing" pill over the image, title +
  short deck + sources/meta + primary inline CTA on the right.
- Worth your attention is a 2-up image card grid (16:9 thumbs +
  2-line title + source/meta), replacing the dense numbered list.
- On your radar topic cards use topic-tinted backgrounds for
  immediate visual recognition.

Co-authored-by: Cursor <cursoragent@cursor.com>
- Portal BriefFloatingTabs to document.body and use z-popup so the bar
  always renders above feed cards regardless of parent stacking
  contexts.
- Clicking "For you" now immediately docks the bar (showing tabs +
  tags strip at full feed-column width) and clicking "Brief" undocks
  it. A short scroll-lock window prevents the scroll listener from
  fighting the click during the smooth scroll.
- Rework "Worth your attention" away from the image card grid which
  read as more articles. New treatment is a magazine-style numbered
  list inside a single bordered container: large ketchup-tinted rank,
  bold headline, top community quote with attribution as a pull-quote,
  source avatar stack + meta. No thumbnails, clear contrast with the
  hero lead above. Section relabeled "What devs are debating" to lean
  into the discussion angle that is unique to the brief.

Co-authored-by: Cursor <cursoragent@cursor.com>
…le morphing bar

Reset
- useReadTracker.reset is now wired through. CoverHeader shows a small
  ghost Reset button when any item has been opened so the design can be
  reviewed from a clean slate. Same Reset is mirrored in the new
  closing block.

Layout
- BriefCover restructured: full-width header + lead hero on top, then
  a 1fr | 18rem grid on laptop+. Main column hosts the stories list and
  topic digests; sidebar hosts compact Quick hits, "By the numbers"
  stats (stories, posts scanned, min saved, comments read), and a
  "Top sources today" list.

Stories list
- Removed the red left border and the big 01/02/03/04 ranks from
  "What devs are debating". Each row is now flat: bold title, optional
  community quote in muted text with attribution, and a small
  sources + meta row. Cleaner visual rhythm.

Closing
- Replaced the heavy "That's the brief" card with a light editorial
  endcap: thin horizontal rule with a "P.S. · Brief no. X" mark,
  one-line headline ("You're caught up." / "You opened X of Y."),
  one-line sub with tomorrow's next-brief time, and three ghost text
  actions (Open the feed, Share, Reset). Progress bar shown only when
  incomplete. No card chrome.

Floating tabs
- Collapsed the dual pill+docked-bar pair into a single morphing bar
  portaled to body. It animates top (viewport-bottom <-> 56px) and
  width (220px tabs-only <-> min(64rem, vw-24px)) with a 500ms ease.
  The tags strip is the same element's inner container animating
  max-width + opacity. Click "For you" docks it; click "Brief" undocks
  it; scroll past the brief-feed sentinel auto-docks it.

Co-authored-by: Cursor <cursoragent@cursor.com>
…ng main

Stop shrinking the main brief column when the sidebar appears. The
section container now grows to max-w-[83rem] on laptop+ while the
main column keeps its previous max-w-[64rem] reading width. The
sidebar (Quick hits + By the numbers + Top sources) lives in a
17rem aside positioned to the right with sticky top-20 so it stays
in view as the brief is read. Below laptop the sidebar hides and
the brief keeps the same single-column layout it had before.

Co-authored-by: Cursor <cursoragent@cursor.com>
…oundary

The bar's top is now computed per scroll frame as max(headerOffset,
min(floatingBottom, sentinelTop - barHeight)). While the brief→feed
sentinel is below the viewport the bar parks at the floating-bottom
position. As soon as the sentinel enters the viewport the bar follows
it 1:1, so it appears to sit in the gap between the brief and the
feed and get pushed up by the feed as you scroll. It clamps at the
header offset where it then docks; that moment is when the width
animates from the tabs-only pill to the full feed-column width with
the tags strip. Removes the previous scroll-lock + state-driven top
transition, since the position is now driven directly by scroll.

Co-authored-by: Cursor <cursoragent@cursor.com>
Drop the conditional "you opened X of Y" framing, the open-the-feed
CTA (the feed starts right below this card, so it's redundant), and
the heavy P.S. divider. Replace with an Instagram-style completion
moment: avocado check badge, single positive headline ("You're all
caught up"), one short line summarizing what the brief delivered, a
faint "Next brief drops <tomorrow>" line, and one secondary share
button (with copy-link fallback + 'Link copied' confirmation). Reset
progress remains as a ghost text action. A muted "Below: your
personalized feed" caption hints at the handoff without competing
with the celebration.

Co-authored-by: Cursor <cursoragent@cursor.com>
- Revert right sidebar back to single 64rem vertical column with gap-10
  between sections so the cover feels less busy.
- New header: "Your briefing is ready" with stats subtitle on the left,
  long date + reset on the right; remove time-of-day greeting.
- Drop uppercase tracking on section titles ("What devs are debating",
  "On your radar", "Quick hits"); keep uppercase only for colored
  category labels (topics, quick-hit eyebrows, lead pill).
- Rebuild Quick hits as a full-width 2-col scannable list with colored
  eyebrow chips (TOOL / RELEASE / etc.), tighter meta, and hover
  affordance; drop the now-unused CoverSources sidebar widget.

Co-authored-by: Cursor <cursoragent@cursor.com>
- HEADER_OFFSET 56 -> 80 so the bar sits clearly inside the brief area
  instead of touching the bottom edge of the global page header.
- Bump BriefCover top padding pt-16 -> pt-24 to keep ~16px breathing
  room between the bar and the H1.

Co-authored-by: Cursor <cursoragent@cursor.com>
tsahimatsliah and others added 8 commits May 19, 2026 23:52
- Chevron moves to the start (left) of the row as its own column,
  resting at rotate-90 (points right) when collapsed and rotate-180
  (points down) when expanded, with a 300ms transform transition.
- Remove the community quote display entirely. The mid-row text is now
  the story summary itself — line-clamp-2 when collapsed, full when
  expanded — so users see the TL;DR up front and read more by
  toggling.
- Drop the separate expand-below drawer; the TLDR grows in place so the
  meta strip (stats / sources) naturally moves down with it.
- "Read the full breakdown" button shows inline after the meta line
  when expanded, stopPropagation so it opens the modal without
  collapsing the row.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…eader

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…ts strip

Co-authored-by: Cursor <cursoragent@cursor.com>
…ft on expand

Co-authored-by: Cursor <cursoragent@cursor.com>
… for grid gap

Co-authored-by: Cursor <cursoragent@cursor.com>
…al timer icon

Co-authored-by: Cursor <cursoragent@cursor.com>
tsahimatsliah and others added 6 commits May 20, 2026 00:15
…cus states

Co-authored-by: Cursor <cursoragent@cursor.com>
…ry/full link

Co-authored-by: Cursor <cursoragent@cursor.com>
…tom-right

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
tsahimatsliah and others added 3 commits May 20, 2026 00:29
Co-authored-by: Cursor <cursoragent@cursor.com>
…rows

Co-authored-by: Cursor <cursoragent@cursor.com>
…ing H1

Co-authored-by: Cursor <cursoragent@cursor.com>
…tton, wider radar gaps

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
tsahimatsliah and others added 2 commits May 20, 2026 00:49
…breakdown pill

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…le gap

Co-authored-by: Cursor <cursoragent@cursor.com>
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.

2 participants