feat: skip onboarding and fix UI for redirect apps#23115
feat: skip onboarding and fix UI for redirect apps#23115anikdhabal merged 9 commits intocalcom:mainfrom
Conversation
|
@keerthikumanduri is attempting to deploy a commit to the cal Team on Vercel. A member of the Team first needs to authorize it. |
WalkthroughThe PR adds a redirect-app utility (REDIRECT_APPS and isRedirectApp). AppCard.tsx and AppPage.tsx now check isRedirectApp(slug) and, for redirect apps, render a "Visit" button with an external-link icon that triggers the existing install mutation ({ type, variant, slug }) and returns early, bypassing the normal onboarding/install flow. Adds "visit": "Visit" to the English locales. Assessment against linked issues
📜 Recent review detailsConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro 💡 Knowledge Base configuration:
You can enable these sources in your CodeRabbit configuration. 📒 Files selected for processing (3)
🚧 Files skipped from review as they are similar to previous changes (3)
⏰ Context from checks skipped due to timeout of 180000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
✨ Finishing Touches
🧪 Generate unit tests
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
Status, Documentation and Community
|
|
Hey there and thank you for opening this pull request! 👋🏼 We require pull request titles to follow the Conventional Commits specification and it looks like your proposed title needs to be adjusted. Details: |
Graphite Automations"Add consumer team as reviewer" took an action on this PR • (08/15/25)1 reviewer was added to this PR based on Keith Williams's automation. "Add community label" took an action on this PR • (08/15/25)1 label was added to this PR based on Keith Williams's automation. |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (4)
packages/app-store/_utils/redirectApps.ts (2)
1-20: Centralize and optimize redirect app lookup (optional)Current approach is fine for a small list. For readability/maintainability and O(1) lookup, consider freezing the list and using a Set.
Apply this diff:
-export const REDIRECT_APPS = [ +export const REDIRECT_APPS = [ "amie", "autocheckin", "bolna", "chatbase", "clic", "deel", "elevenlabs", "granola", "greetmate-ai", "lindy", "linear", "millis-ai", "monobot", "retell-ai", "synthflow", "telli", "vimcal", "wordpress", -]; +] as const; + +const REDIRECT_APPS_SET = new Set<string>(REDIRECT_APPS); export const isRedirectApp = (slug: string): boolean => { - return REDIRECT_APPS.includes(slug); + return REDIRECT_APPS_SET.has(slug); };
1-20: Consider documenting the source of truthA brief comment on why these slugs are “redirect apps” and how they’re updated (code vs. config vs. backend) will help future contributors.
apps/web/components/apps/AppPage.tsx (1)
193-205: Consistent “Visit” UX with external-link iconRendering a dedicated Visit button with an external-link icon meets the “rename Install to Visit and make it an external link” requirement. Consider reusing InstallAppButtonChild (if feasible) for consistent styles/behavior with cards, but not strictly necessary.
packages/features/apps/components/AppCard.tsx (1)
204-221: Add a test id to the Visit button for E2E stability (optional)Adding a data-testid helps keep UI tests robust when asserting redirect-app behavior.
Apply this diff:
if (isRedirect) { return ( <Button color="secondary" className="[@media(max-width:260px)]:w-full [@media(max-width:260px)]:justify-center" StartIcon="external-link" + data-testid="visit-app-button" {...props} size="base"> {t("APPSTORE_VISIT")} </Button> ); }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (4)
apps/web/components/apps/AppPage.tsx(3 hunks)apps/web/public/static/locales/en/common.json(1 hunks)packages/app-store/_utils/redirectApps.ts(1 hunks)packages/features/apps/components/AppCard.tsx(5 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/*.ts
📄 CodeRabbit Inference Engine (.cursor/rules/review.mdc)
**/*.ts: For Prisma queries, only select data you need; never useinclude, always useselect
Ensure thecredential.keyfield is never returned from tRPC endpoints or APIs
Files:
packages/app-store/_utils/redirectApps.ts
**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/review.mdc)
Flag excessive Day.js use in performance-critical code; prefer native Date or Day.js
.utc()in hot paths like loops
Files:
packages/app-store/_utils/redirectApps.tsapps/web/components/apps/AppPage.tsxpackages/features/apps/components/AppCard.tsx
**/*.tsx
📄 CodeRabbit Inference Engine (.cursor/rules/review.mdc)
Always use
t()for text localization in frontend code; direct text embedding should trigger a warning
Files:
apps/web/components/apps/AppPage.tsxpackages/features/apps/components/AppCard.tsx
🧠 Learnings (2)
📓 Common learnings
Learnt from: Anshumancanrock
PR: calcom/cal.com#22570
File: apps/web/modules/signup-view.tsx:253-253
Timestamp: 2025-07-21T21:33:23.371Z
Learning: In signup-view.tsx, when checking if redirectUrl contains certain strings, using explicit && checks (redirectUrl && redirectUrl.includes()) is preferred over optional chaining (redirectUrl?.includes()) to ensure the result is always a boolean rather than potentially undefined. This approach provides cleaner boolean contracts for downstream conditional logic.
📚 Learning: 2025-07-21T21:33:23.371Z
Learnt from: Anshumancanrock
PR: calcom/cal.com#22570
File: apps/web/modules/signup-view.tsx:253-253
Timestamp: 2025-07-21T21:33:23.371Z
Learning: In signup-view.tsx, when checking if redirectUrl contains certain strings, using explicit && checks (redirectUrl && redirectUrl.includes()) is preferred over optional chaining (redirectUrl?.includes()) to ensure the result is always a boolean rather than potentially undefined. This approach provides cleaner boolean contracts for downstream conditional logic.
Applied to files:
apps/web/components/apps/AppPage.tsx
🧬 Code Graph Analysis (2)
apps/web/components/apps/AppPage.tsx (1)
packages/app-store/_utils/redirectApps.ts (1)
isRedirectApp(22-24)
packages/features/apps/components/AppCard.tsx (2)
packages/app-store/_utils/redirectApps.ts (1)
isRedirectApp(22-24)apps/web/components/apps/InstallAppButtonChild.tsx (1)
InstallAppButtonChild(7-46)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Install dependencies / Yarn install & cache
🔇 Additional comments (4)
apps/web/public/static/locales/en/common.json (1)
3475-3475: LGTM: Added APPSTORE_VISIT keyThe new translation key is correctly added above the sentinel to avoid merge conflicts and is used via t("APPSTORE_VISIT").
apps/web/components/apps/AppPage.tsx (1)
115-121: Redirect apps: correctly bypass onboardingEarly-returning for redirect apps and invoking the mutation satisfies “skip onboarding” for these apps. isLoading is set to provide feedback—nice.
packages/features/apps/components/AppCard.tsx (2)
59-63: Redirect apps: correctly bypass onboarding from cardsThe early return path triggers the mutation and exits, skipping the standard flow as intended.
156-158: Propagating isRedirect to the button child keeps rendering logic cleanPassing isRedirect to InstallAppButtonChild centralizes the label/icon logic. Good separation of concerns.
Also applies to: 180-182
E2E results are ready! |
What does this PR do?
Before:

This PR changes the Install Button in the app store page to Visit for redirect apps, and skips onboarding.
After:
https://www.loom.com/share/1c6aa8e7279b4e3faf62dd47f3811159?sid=3bdcdc93-7e69-4a2a-8181-37871a073847
Mandatory Tasks (DO NOT REMOVE)
How should this be tested?
Checklist