From 7c2de3c9e5d242094ac841447bbf1ac26a22f806 Mon Sep 17 00:00:00 2001 From: Ishaan Gupta Date: Sun, 31 May 2026 03:17:44 +0530 Subject: [PATCH 1/2] add web upgrade plans UI (#1022) --- apps/web/components/header.tsx | 32 ++ apps/web/components/settings/billing.tsx | 379 +++++++++++++++++++++-- apps/web/lib/url-helpers.ts | 18 ++ 3 files changed, 405 insertions(+), 24 deletions(-) diff --git a/apps/web/components/header.tsx b/apps/web/components/header.tsx index fd81bf52e..c70c62d07 100644 --- a/apps/web/components/header.tsx +++ b/apps/web/components/header.tsx @@ -19,6 +19,7 @@ import { import { Button } from "@ui/components/button" import { cn } from "@lib/utils" import { dmSansClassName } from "@/lib/fonts" +import { getBillingSettingsUrl } from "@/lib/url-helpers" import { GraphIcon, IntegrationsIcon } from "@/components/integration-icons" import { DropdownMenu, @@ -80,6 +81,7 @@ export function Header({ onAddMemory, onOpenSearch }: HeaderProps) { feedbackParam, ) const { viewMode, setViewMode } = useViewMode() + const billingSettingsUrl = getBillingSettingsUrl() const handleFeedback = () => setFeedbackOpen(true) @@ -352,6 +354,15 @@ export function Header({ onAddMemory, onOpenSearch }: HeaderProps) { "linear-gradient(180deg, #0A0E14 0%, #05070A 100%)", }} > + + + + Upgrade + + ) : ( <> + + + + + + Upgrade + + + ) + } + + if (isCurrentPlan) { + return ( + + ) + } + + if (isIncludedPlan) { + return ( + + ) + } + + if (plan.isContactSales) { + return ( + + Contact sales + + ) + } + + const checkoutPlanId = + plan.productId === "api_pro" || plan.productId === "api_scale" + ? plan.productId + : null + if (!checkoutPlanId) return null + + return ( + + ) + } + return (
@@ -671,32 +943,91 @@ export default function Billing() { : "Usage resets with your billing cycle"}

- - {!hasPaidPlan ? ( - - ) : null} +
+ + + + + ) : undefined + } + > + Plans + +
+
+
+ {PLAN_CARDS.map((plan) => ( + + ))} +
+
+ {ADVANCED_PLAN_CARDS.map((plan) => ( + + ))} +
+
+
+ {isPlanCarouselActive ? null : ( +
+ +
+ )} +
+ Date: Sun, 31 May 2026 03:26:51 +0530 Subject: [PATCH 2/2] fix settings/integrations responsiveness (#1003) --- apps/web/components/settings/integrations.tsx | 45 ++++++++++++------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/apps/web/components/settings/integrations.tsx b/apps/web/components/settings/integrations.tsx index 125cec90a..355a51e12 100644 --- a/apps/web/components/settings/integrations.tsx +++ b/apps/web/components/settings/integrations.tsx @@ -84,7 +84,7 @@ function PillButton({ className={cn( "relative flex items-center justify-center gap-2", "bg-[#0D121A]", - "rounded-full h-11 px-4 flex-1", + "rounded-full h-11 min-w-0 px-3 flex-1 sm:px-4", "cursor-pointer transition-opacity hover:opacity-80", "shadow-[inset_1.5px_1.5px_4.5px_rgba(0,0,0,0.7)]", "disabled:opacity-50 disabled:cursor-not-allowed", @@ -244,6 +244,15 @@ export default function Integrations() { analytics.extensionInstallClicked() } + const addShortcutLabel = + createApiKeyMutation.isPending && selectedShortcutType === "add" + ? "Creating..." + : "Add shortcut" + const searchShortcutLabel = + createApiKeyMutation.isPending && selectedShortcutType === "search" + ? "Creating..." + : "Search shortcut" + const handleDialogClose = (open: boolean) => { setShowApiKeyModal(open) if (!open) { @@ -331,7 +340,7 @@ export default function Integrations() { -
+
handleShortcutClick("add")} disabled={createApiKeyMutation.isPending} @@ -342,11 +351,14 @@ export default function Integrations() { ) : ( )} - - {createApiKeyMutation.isPending && - selectedShortcutType === "add" - ? "Creating..." - : "Add memory shortcut"} + + {addShortcutLabel} + + {createApiKeyMutation.isPending && + selectedShortcutType === "add" + ? "Creating..." + : "Add memory shortcut"} + )} - - {createApiKeyMutation.isPending && - selectedShortcutType === "search" - ? "Creating..." - : "Search memory shortcut"} + + {searchShortcutLabel} + + {createApiKeyMutation.isPending && + selectedShortcutType === "search" + ? "Creating..." + : "Search memory shortcut"} +
@@ -397,7 +412,7 @@ export default function Integrations() {
-
+
)} - + {createRaycastApiKeyMutation.isPending ? "Generating..." : "Get API key"} @@ -415,7 +430,7 @@ export default function Integrations() { - + Install extension