feat: streak-triggered ask-for-review strip#6084
Open
tsahimatsliah wants to merge 8 commits into
Open
Conversation
Adds an inline strip at the top of the post modal that asks long-streak users for a store review (Yes routes to the right Chrome/Edge/Firefox/App Store/Play Store URL by platform, falls back to X share for Firefox/Safari desktop). No routes them into the existing Feedback modal with a UX-issue category. Step-1 dismissal triggers a 14-day cooldown loop; any engagement past step 1 is permanent. Threshold and rollout are GrowthBook-controlled via featureAskForReview. Covered by unit specs for the destination helper, visibility hook (including the cooldown loop), and the strip UI. Storybook DemoPanel exposes every state for design review. Co-authored-by: Cursor <cursoragent@cursor.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Co-authored-by: Cursor <cursoragent@cursor.com>
Adds a floating QA panel mounted in MainLayout, gated on ?ask-for-review-qa=1, that bypasses all visibility gates and lets you trigger the real strip + real handlers on any post page. Includes state inspector, destination override, session/cooldown reset, and manual Feedback modal/action-complete triggers. Co-authored-by: Cursor <cursoragent@cursor.com>
…d modal - Portal the strip to document.body with fixed top + z-max so it sits above the post modal, navigation, and X button - Simplify to a single step (Yes / No / dismiss); fill stars in yellow - Yes now opens a centered AskForReviewConfirmModal (star cover image, production-style review CTA) instead of a second inline step - No still opens the prefilled Feedback modal - Update tests + Storybook story labels to match the new flow Co-authored-by: Cursor <cursoragent@cursor.com>
Use the shared cover-image success modal for the review ask and tighten the floating strip so it reads as part of the post modal instead of a full-width page banner. Co-authored-by: Cursor <cursoragent@cursor.com>
…rompt Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # packages/shared/src/lib/featureManagement.ts
Replace the generic cover-image review modal with the compact dark review card that mirrors the production ask, including generated rating artwork and destination-specific platform icon. Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Inline strip rendered at the top of the post modal that asks long-streak users for a store review. Two inline steps; happy users go to the right platform's review URL, unhappy users land in the existing Feedback modal.
[Yes][No][ x ][Leave a review]CTA opening the platform URL in a new tab.LazyModal.FeedbackwithFeedbackCategory.UxIssueprefilled.Behavior
streak.current >= streakThreshold, GrowthBook variant enabled, destination available for the user's platform, no streak-milestone modal pending, not yet shown this session.localStorage[askForReview:dismissedAt]and the strip stays hidden forcooldownDays. After the cooldown elapses, the next 3-day streak shows it again. Engagement past step 1 (Leave a review, No, step-2 dismiss) is permanent viaActionType.AskedForReviewComplete.sessionStorage[askForReview:shownThisSession]prevents re-mounting on subsequent posts.getReviewDestination):GrowthBook
Recommend rolling out at low percentage first: the day the flag flips on, every existing user with
streak.current >= 3becomes eligible.Out of scope
BasePostContentonly renders in the post page / article modal)Test plan
pnpm --filter shared lintcleanpnpm --filter shared testclean (incl. newAskForReviewStrip,useAskForReviewVisibility,askForReviewspecs)node ./scripts/typecheck-strict-changed.jscleanComponents/AskForReviewStrip/Demo paneland exercise each destination + dismissNotes for reviewers
completeUserActionmutation accepts an arbitrary actiontype: String!(packages/shared/src/graphql/actions.ts). The two-action cooldown model in the original spec was replaced with localStorage becauseuseActions().completeActionshort-circuits on duplicate completion (line 96-98), so we cannot refreshcompletedAtfor a cooldown loop without backend changes.FeedbackModalgains adefaultCategoryprop; the No path passesFeedbackCategory.UxIssue.Made with Cursor
Preview domain
https://feat-ask-for-review-prompt.preview.app.daily.dev