feat(shared): add streak progression system and milestone claim UX#5613
feat(shared): add streak progression system and milestone claim UX#5613tomeredlich wants to merge 52 commits intomainfrom
Conversation
Align social Twitter repost cards across grid and list by moving repost identity to metadata, improving embedded tweet presentation, and standardizing the Read on X CTA for clearer feed UX. Co-authored-by: Cursor <cursoragent@cursor.com>
Align social X repost presentation across grid, list, and modal so author metadata, embed typography, and CTA behavior are consistent and clearer. This also improves embedded avatar handling with better fallbacks and repost labeling to reduce confusing placeholders. Co-authored-by: Cursor <cursoragent@cursor.com>
Unify social Twitter repost metadata presentation and sizing across grid/list cards and post modal so identity, iconography, and spacing remain consistent. Co-authored-by: Cursor <cursoragent@cursor.com>
…erList The metadataBottomLabel variable was being inferred as string from metadata.bottomLabel, but was then assigned JSX elements in conditional blocks, causing a TypeScript compilation error. Added explicit type annotation (ReactElement | string | undefined) to match the PostMetadataProps['bottomLabel'] type and allow both string and JSX element assignments. Co-authored-by: Chris Bongers <rebelchris@users.noreply.github.com>
Match social repost metadata height/order and align quote preview header avatar, typography, and spacing with shared preview styles across list and card layouts. Co-authored-by: Cursor <cursoragent@cursor.com>
Extract shared social Twitter text/handle/avatar helpers into a single lib module and reuse them across list, grid, markdown, and share post components to remove duplicated logic and keep behavior consistent. Co-authored-by: Cursor <cursoragent@cursor.com>
Apply prettier formatting for the getSocialPostText call in SharePostContent to satisfy lint_shared and keep CI green. Co-authored-by: Cursor <cursoragent@cursor.com>
…ew' into feat/social-twitter-repost-preview
Unify social tweet/repost card and modal metadata presentation, spacing, and fallback behavior so repost-like content renders consistently in grid/list and modal views. Co-authored-by: Cursor <cursoragent@cursor.com>
Use canonical share-like checks, align sanitization between grid/list rendering, and update grid tests to match repost metadata and link behavior. Co-authored-by: Cursor <cursoragent@cursor.com>
…tone timeline Introduce a tier-based streak progression system with animated counter, milestone timeline, urgency nudges, and debug controls (?debugStreak). Co-authored-by: Cursor <cursoragent@cursor.com>
…tions, and calendar view Enhance the streak progression system with visual feedback for streak changes (increment popover, broken popover), full-screen milestone celebrations, a monthly calendar view, and new high-tier milestones (Phoenix, Titan, Godflame). Replace notification image with SVG component. Co-authored-by: Cursor <cursoragent@cursor.com>
Add subtle white sparkle animation on achieved milestone icons and randomize sparkle placement per milestone for a more lively reward feel. Co-authored-by: Cursor <cursoragent@cursor.com>
Improve the streak popup with richer milestone interactions, including a sponsored coupon claim flow with reusable reveal modal and updated debug/testing controls to make milestone behavior easier to verify. Co-authored-by: Cursor <cursoragent@cursor.com>
…verlays Improve streak UI experimentation by adding a debug-toggleable right drawer variant, refreshed streak popup content, and milestone animations that stay open with explicit close/share actions. Co-authored-by: Cursor <cursoragent@cursor.com>
Hide the milestones heading when nothing is achieved and add a float-style share action button for achieved milestone tooltips. Co-authored-by: Cursor <cursoragent@cursor.com>
Make 0-1 reward milestones more compact and improve sponsored milestone gradient visibility while removing stripe overlays for a cleaner look. Co-authored-by: Cursor <cursoragent@cursor.com>
Refine the streak recover and streak popup UI with updated spacing, animation layering, drawer behavior on tablet, and calendar/milestone visual tweaks while aligning feed tab header background styling with themed surfaces. Co-authored-by: Cursor <cursoragent@cursor.com>
Unify the reminder popover structure with the +1 animation layout, show daily step progress as current-to-next day with full completion animation, and restore total days left context for the active milestone. Made-with: Cursor
Keep the streak popup width stable and update the 30-day grid to a rolling 10x3 window with elevator-style row transitions, while improving debug controls for day-by-day streak simulation. Made-with: Cursor
Promote reward summaries to the primary milestone headline, move day chips to their own top line, and simplify subtext/details while updating milestone reward definitions and sponsored visuals. Made-with: Cursor
Make milestone rewards explicitly claimable, restore cores claim animation behavior, and remove post-claim share/confirmation popovers to keep the flow focused and consistent across tooltip and drawer views. Made-with: Cursor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
|
Document a production-ready session animation flow for the updated streak milestone experience so teammates can quickly record or generate a consistent feature demo. Made-with: Cursor
…on-system Made-with: Cursor # Conflicts: # packages/shared/src/components/MainFeedLayout.tsx # packages/shared/src/components/cards/socialTwitter/EmbeddedTweetPreview.tsx # packages/shared/src/components/cards/socialTwitter/SocialTwitterGrid.tsx # packages/shared/src/components/cards/socialTwitter/SocialTwitterList.spec.tsx # packages/shared/src/components/cards/socialTwitter/SocialTwitterList.tsx # packages/shared/src/components/cards/socialTwitter/socialTwitterHelpers.tsx # packages/shared/src/components/post/SocialTwitterPostContent.tsx # packages/shared/src/components/utilities/DateFormat.tsx
Add Jest asset mocks and restore streak milestone icon mapping so shared and extension suites can load streak UI assets, then update streak lint/test regressions introduced in the branch. Made-with: Cursor
Avoid accessing a non-existent LoggedUser.streak field by deriving preview old streak length from useReadingStreak, unblocking webapp type-check on Vercel. Made-with: Cursor
Ensure the greeting hero is truly transparent in light mode by gating decorative backgrounds to dark themes, and improve mobile streak drawer behavior with fixed float actions and consistent milestone row sizing. Made-with: Cursor
Unify streak reminder/increment nudges on the toast system while tightening hero/session gating and milestone visibility rules. This also aligns drawer defaults, milestone celebration flow, and icon/text polish across streak UI touchpoints. Made-with: Cursor
Improve FeedGreetingHero visuals and messaging with dynamic user-facing text while keeping effects behind content, and align reminder toast/portal styling tweaks for consistent UX. Made-with: Cursor
Use typo-mega2 for the FeedGreetingHero greeting so longer usernames fit more comfortably without overwhelming the hero layout. Made-with: Cursor
…aces Bring the reminder back to in-context popover UX and keep milestone celebration behavior stable across devices by using drawer flow on mobile while preserving popover flow on desktop. Made-with: Cursor
Use the same background treatment for morning and afternoon variants, and tune the dark evening palette to better match the app's main background tokens. Made-with: Cursor
Remove the debug shortcut strip from the shared FeedGreetingHero so shortcut links stay extension-only and never leak into production/web hero previews. Made-with: Cursor
Stabilize streak-related shared changes and add smoke E2E coverage plus release quality gates so pre-push validation is faster and less brittle in CI and local runs. Made-with: Cursor
Change the day-7 Flame milestone reward from a cosmetic flair to 25 Cores to match the revised progression rewards plan. Made-with: Cursor
Disable the sponsored streak milestone by default while keeping a single source-of-truth toggle so it can be restored without reworking the timeline logic. Made-with: Cursor
|
@claude check pr |
|
Claude finished @tomeredlich's task in 2m 17s —— View job PR Review: feat(shared): add streak progression system and milestone claim UX
This is a substantial feature PR (~70 files, +5723/-316). The core streak progression system is well-structured overall. Here are the issues found, grouped by severity. 🔴 Bugs / Broken Logic1. Dead code — tooltip path is completely unreachable const shouldOpenInDrawer = true; // always trueThe 2. Hard-coded "Day 4 Milestone!" label for sponsored reward <Typography ...>Day 4 Milestone!</Typography>This text is hardcoded and will be wrong if 🟡 Issues Worth Addressing3. Brittle wallet DOM selector const WALLET_BUTTON_SELECTOR = 'a[href="/wallet"]';This will silently fail (animation stays center-screen) if the wallet href changes (e.g., locale prefixes, route changes). A 4. No visual feedback when claiming non-cores rewards (Perks/Cosmetics) When 5. const activeStreak = Math.max(streakOverride ?? currentStreak ?? 1, 1);
const initialStreakRef = useRef(activeStreak);
const streakDelta = activeStreak - initialStreakRef.current;
6. Claim state is purely local/ephemeral const [claimedDays, setClaimedDays] = useState<Set<number>>(new Set());Closing and reopening the drawer resets all "Claimed" buttons back to "Claim". If rewards are genuinely tracked backend-side, the claimed state should be fetched from there; if not, consider persisting in sessionStorage at minimum so the state survives re-opens within the same session. 🟡 Non-Production Assets in Source Tree7. Automation prompt/storyboard files in These three files don't belong in the production source:
These are AI video generation assets and should live in a 🟢 Minor / Nits8. Both 9. 10. ✅ What's Done Well
· Preview |
Remove the unreachable tooltip branch now that the streak UI always opens in a drawer, and derive the sponsored reward copy from the milestone day instead of a hardcoded value. Made-with: Cursor
Refresh shared test fixtures, mocks, and asset declarations to match current provider contracts and form types so the shared package typecheck passes in quality gates. Made-with: Cursor
Summary
Test plan
Claimuntil clickedResetand verify claimed milestones are resetMade with Cursor
Preview domain
https://feat-streak-progression-system.preview.app.daily.dev