Skip to content

🚸 app: improve card creation timeout ux#1105

Open
dieguezguille wants to merge 1 commit into
fixesfrom
timeout
Open

🚸 app: improve card creation timeout ux#1105
dieguezguille wants to merge 1 commit into
fixesfrom
timeout

Conversation

@dieguezguille

@dieguezguille dieguezguille commented Jun 19, 2026

Copy link
Copy Markdown
Member

closes #1098

Summary by CodeRabbit

Summary

  • New Features

    • Added a delayed setup modal to the Exa Card activation flow when setup takes longer than expected, with “Keep waiting” or a “Contact support” option.
    • The app now remembers whether support has already been contacted to adjust the prompts shown later.
  • Bug Fixes

    • Improved activation behavior during repeated attempts by updating the stored support-contacted state and guiding users to either card details or the delayed setup flow.
  • Localization

    • Updated Spanish and Portuguese strings for the new setup status and support messaging.
  • Release

    • Patch release for the mobile card setup UX improvement.

@dieguezguille dieguezguille self-assigned this Jun 19, 2026
@changeset-bot

changeset-bot Bot commented Jun 19, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: b855fb5

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@exactly/mobile Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitai Bot commented Jun 19, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds a delayed setup modal for card creation, wires it into card generation and activation flows, records support-contact state in React Query, and adds matching translations plus release metadata.

Changes

Card Setup Timeout UX

Layer / File(s) Summary
Query defaults
src/utils/queryClient.ts
Registers ["settings","card-support-contacted"] defaults with false initial data, no retries, infinite cache timing, and a cache-backed query function.
SetupDelaySheet component
src/components/card/SetupDelaySheet.tsx
Implements the delayed setup modal, prompt dismissal tracking, support-contact branching, staged Intercom messaging, and cache updates after message send.
Card.tsx integration
src/components/card/Card.tsx
Adds delayed refetch behavior during pending card generation, resets support-contact state on mutation outcomes, and renders SetupDelaySheet with mutation state.
ActivateCard.tsx integration
src/components/home/card-upgrade/ActivateCard.tsx
Extends activation mutation state, resets support-contact state on outcomes, and renders SetupDelaySheet with activation state.
Translations and release metadata
src/i18n/es.json, src/i18n/pt.json, .changeset/heavy-worms-cheer.md
Adds Spanish and Portuguese strings for the new setup-delay messages and adds the patch changeset entry.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested reviewers

  • franm91
  • cruzdanilo
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately describes the main user-facing change: improving card creation timeout UX.
Linked Issues check ✅ Passed The PR adds a timeout modal after 5 attempts, with support chat, a prefilled message, and a keep-waiting dismiss action.
Out of Scope Changes check ✅ Passed The changes stay focused on the slow card-creation timeout flow and supporting i18n/query state updates; no unrelated scope is evident.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch timeout
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch timeout

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@gemini-code-assist gemini-code-assist 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.

Code Review

This pull request improves the card creation timeout user experience by introducing a SetupDelaySheet component that prompts users to contact support or keep waiting when setup takes longer than expected. Feedback highlights a critical issue in Card.tsx where refetchCard() resolves instead of rejecting on error, causing standard errors to incorrectly trigger the delay signal. Additionally, it is recommended to refactor SetupDelaySheet.tsx to handle the support message trigger via a useEffect hook in the parent component rather than relying on the unmount lifecycle of a separate helper component, which can be removed to simplify the code.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread src/components/card/Card.tsx
Comment thread src/components/card/SetupDelaySheet.tsx
Comment thread src/components/card/SetupDelaySheet.tsx
Comment thread src/components/card/SetupDelaySheet.tsx

@coderabbitai coderabbitai 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.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 32e6c724-042e-4cea-b2f2-5f9264de488f

📥 Commits

Reviewing files that changed from the base of the PR and between 66180c0 and e02a86f.

📒 Files selected for processing (7)
  • .changeset/heavy-worms-cheer.md
  • src/components/card/Card.tsx
  • src/components/card/SetupDelaySheet.tsx
  • src/components/home/card-upgrade/ActivateCard.tsx
  • src/i18n/es.json
  • src/i18n/pt.json
  • src/utils/queryClient.ts

Comment thread src/components/card/Card.tsx
@codecov

codecov Bot commented Jun 19, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 42.85714% with 28 lines in your changes missing coverage. Please review.
✅ Project coverage is 75.89%. Comparing base (6f345f6) to head (00c45eb).
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
src/components/card/SetupDelaySheet.tsx 53.12% 15 Missing ⚠️
src/components/card/Card.tsx 25.00% 9 Missing ⚠️
src/components/home/card-upgrade/ActivateCard.tsx 0.00% 3 Missing ⚠️
src/utils/queryClient.ts 50.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##            fixes    #1105      +/-   ##
==========================================
- Coverage   76.00%   75.89%   -0.12%     
==========================================
  Files         247      248       +1     
  Lines       11974    12020      +46     
  Branches     4240     4259      +19     
==========================================
+ Hits         9101     9122      +21     
- Misses       2556     2581      +25     
  Partials      317      317              
Flag Coverage Δ
e2e 75.17% <42.85%> (-0.13%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@coderabbitai coderabbitai 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.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 02848a35-bd5f-41bc-a7ac-235407d3f409

📥 Commits

Reviewing files that changed from the base of the PR and between e02a86f and f3e417c.

📒 Files selected for processing (7)
  • .changeset/heavy-worms-cheer.md
  • src/components/card/Card.tsx
  • src/components/card/SetupDelaySheet.tsx
  • src/components/home/card-upgrade/ActivateCard.tsx
  • src/i18n/es.json
  • src/i18n/pt.json
  • src/utils/queryClient.ts

Comment thread src/utils/queryClient.ts

@coderabbitai coderabbitai 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.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 4dd8c961-0b53-4d8b-8501-49293c62e5be

📥 Commits

Reviewing files that changed from the base of the PR and between 6c0671e and 0f4a343.

📒 Files selected for processing (7)
  • .changeset/heavy-worms-cheer.md
  • src/components/card/Card.tsx
  • src/components/card/SetupDelaySheet.tsx
  • src/components/home/card-upgrade/ActivateCard.tsx
  • src/i18n/es.json
  • src/i18n/pt.json
  • src/utils/queryClient.ts

Comment thread src/components/card/SetupDelaySheet.tsx

@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: 0f4a343f81

ℹ️ 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 src/components/card/SetupDelaySheet.tsx

@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: 2bc9a4ec0e

ℹ️ 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".

refetchCard()
.then(({ data, error }) => {
if (error) reportError(error);
else if (data) queryClient.setQueryData(["card-details-open"], true);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Clear the create mutation after the card is found

When a card-creation request times out after the server has already inserted the card, this new tap path can find the card with refetchCard(), but it only opens the details sheet. The original create-card mutation is still pending and retries every APIError (for example, the next POST returns already created), so isGeneratingCard stays true and the card keeps showing the loading/delay UX even though the card now exists. Treat this branch as a completed activation or stop the retry instead of only opening details.

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai 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.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 161326f3-f02d-440b-b0cf-90ed3cf1a721

📥 Commits

Reviewing files that changed from the base of the PR and between 0f4a343 and b855fb5.

📒 Files selected for processing (7)
  • .changeset/heavy-worms-cheer.md
  • src/components/card/Card.tsx
  • src/components/card/SetupDelaySheet.tsx
  • src/components/home/card-upgrade/ActivateCard.tsx
  • src/i18n/es.json
  • src/i18n/pt.json
  • src/utils/queryClient.ts

Comment thread src/components/card/Card.tsx

@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: 00c45eb31e

ℹ️ 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".

</Text>
)}
</YStack>
<SetupDelaySheet failureCount={activateFailures} pending={isActivating} submittedAt={activateSubmittedAt} />

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Add a reopen trigger for upgrade support prompts

In the upgrade activation flow, once the delay sheet is dismissed with “Keep waiting”, SetupDelaySheet records the current ${submittedAt}:0 prompt and will not open again until either submittedAt or openSignal changes. This screen never passes an openSignal, and the activation button is disabled while isActivating, so a user stuck in the same long-running upgrade cannot get back to the support action after dismissing the first prompt; the card screen avoids this by incrementing openSignal on card taps.

Useful? React with 👍 / 👎.

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