refactor: QR sheet manual pairing behind disclosure (#7472)#7476
Merged
Conversation
Co-Authored-By: Claude <noreply@anthropic.com>
6 tasks
ashleeradka
pushed a commit
that referenced
this pull request
May 21, 2026
Brings apps/web/src/domains/settings/ to feature parity with the platform repo's current end state for the billing, storage, and compute settings surfaces. Covers four "Web App Repo Move" drift issues that accumulated after settings paths were frozen on May 20: - LUM-1683: Billing UI reorder + referral stats (platform #7376) - LUM-1682: Pro billing machine resize + storage card + tier selection (platform #7310, #7312, #7323, #7338) - LUM-1761: Noa's billing UI polish (platform #7462, #7473, #7492) - LUM-1760: Shaarson's Pro storage/compute UX (platform #7389, #7390, #7392, #7395, #7399, #7400, #7403, #7404) The port targets feature parity, not 1:1 file translation: - Routing translated from platform's useAppNavigate / next/navigation to react-router (useNavigate, useSearchParams) per target conventions. - Feature flag reads translated from useAppFeatureFlags() context to the target's useFeatureFlagStore.use.X() Zustand pattern. - Component imports redirected to @vellum/design-library and @/generated/api. - Shared hooks/utils that already exist in the target (use-billing-portal-session, payment-method-brand) wired up rather than recreated. - Daemon-aware Assistant type from @/assistant/api.js used in place of platform's @/lib/assistants/api. New files: - assistant-storage-card.tsx (per-assistant Storage card) - compute-upgrade-card.tsx (rewritten with full machine-size range) - plan-feature-list.tsx (inline + checklist variants for AdjustPlanModal and PlanCard) - resize-errors.ts (extractResizeError envelope for friendly resize failure messaging) - tier-picker.tsx (Dropdown-driven tier selection for Pro upgrade) - lib/billing/machine-sizes.ts (TIER_TO_SIZES, SIZE_LABEL, SIZE_DESCRIPTION, machineSizeRank shared util) Deletions (functionality moved to general settings, per-assistant): - storage-card.tsx - machine-size-card.tsx - machine-size-modal.tsx Other changes: - onboarding-page.tsx: storage step replaces pvc-readiness polling; failures count now gates wizard progression. - billing-page.tsx: drops storage/machine card mounts; ReferralPanel renders unconditionally. - general-page.tsx: mounts AssistantStorageCard alongside ComputeUpgradeCard. - adjust-plan-modal.tsx: tier-picker + plan-feature-list, dynamic LOST_FEATURES via prop, copy and layout polish. - referralCodes and referralCodesAdmin flags removed from the store and dev panel (no longer gated upstream). - preferences-menu.tsx: drops referralCodes gating so Earn Credits always renders. - design-library dropdown.tsx: DropdownOption.disabled support + findEnabledIndex helper for keyboard/click guards (needed by tier-picker). Platform PR #7476 (unify per-assistant cards into a single ResizeCard) is not yet merged in platform and is therefore not included; the two-card layout is the current end state.
ashleeradka
added a commit
that referenced
this pull request
May 21, 2026
* chore(web): refresh platform.yaml for billing/storage/compute drift port Pulls the current platform OpenAPI bundle so the regenerated client picks up assistantsResize, AssistantResizeRequestRequest, provisioned_storage_gib, selected_storage_gib, and the onboarding/storage endpoint. Prerequisite for porting the Pro storage/compute UX cluster (LUM-1760) and selected storage state surfacing (LUM-1682 #7312) from platform to vellum-assistant. Refs LUM-1683, LUM-1682, LUM-1761, LUM-1760. * feat(web/settings): port billing/storage/compute drift from platform Brings apps/web/src/domains/settings/ to feature parity with the platform repo's current end state for the billing, storage, and compute settings surfaces. Covers four "Web App Repo Move" drift issues that accumulated after settings paths were frozen on May 20: - LUM-1683: Billing UI reorder + referral stats (platform #7376) - LUM-1682: Pro billing machine resize + storage card + tier selection (platform #7310, #7312, #7323, #7338) - LUM-1761: Noa's billing UI polish (platform #7462, #7473, #7492) - LUM-1760: Shaarson's Pro storage/compute UX (platform #7389, #7390, #7392, #7395, #7399, #7400, #7403, #7404) The port targets feature parity, not 1:1 file translation: - Routing translated from platform's useAppNavigate / next/navigation to react-router (useNavigate, useSearchParams) per target conventions. - Feature flag reads translated from useAppFeatureFlags() context to the target's useFeatureFlagStore.use.X() Zustand pattern. - Component imports redirected to @vellum/design-library and @/generated/api. - Shared hooks/utils that already exist in the target (use-billing-portal-session, payment-method-brand) wired up rather than recreated. - Daemon-aware Assistant type from @/assistant/api.js used in place of platform's @/lib/assistants/api. New files: - assistant-storage-card.tsx (per-assistant Storage card) - compute-upgrade-card.tsx (rewritten with full machine-size range) - plan-feature-list.tsx (inline + checklist variants for AdjustPlanModal and PlanCard) - resize-errors.ts (extractResizeError envelope for friendly resize failure messaging) - tier-picker.tsx (Dropdown-driven tier selection for Pro upgrade) - lib/billing/machine-sizes.ts (TIER_TO_SIZES, SIZE_LABEL, SIZE_DESCRIPTION, machineSizeRank shared util) Deletions (functionality moved to general settings, per-assistant): - storage-card.tsx - machine-size-card.tsx - machine-size-modal.tsx Other changes: - onboarding-page.tsx: storage step replaces pvc-readiness polling; failures count now gates wizard progression. - billing-page.tsx: drops storage/machine card mounts; ReferralPanel renders unconditionally. - general-page.tsx: mounts AssistantStorageCard alongside ComputeUpgradeCard. - adjust-plan-modal.tsx: tier-picker + plan-feature-list, dynamic LOST_FEATURES via prop, copy and layout polish. - referralCodes and referralCodesAdmin flags removed from the store and dev panel (no longer gated upstream). - preferences-menu.tsx: drops referralCodes gating so Earn Credits always renders. - design-library dropdown.tsx: DropdownOption.disabled support + findEnabledIndex helper for keyboard/click guards (needed by tier-picker). Platform PR #7476 (unify per-assistant cards into a single ResizeCard) is not yet merged in platform and is therefore not included; the two-card layout is the current end state. * fix(web/settings): drop stale eslint-disable for react-hooks/exhaustive-deps The directive was ported from platform, but apps/web's eslint config does not enable react-hooks/exhaustive-deps, so the unknown rule trips the report-unused-disable check. The useMemo dependency array still keys on clientSecret intentionally to retrigger appearance resolution on each new SetupIntent. --------- Co-authored-by: Claude <noreply@anthropic.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
Wraps the manual pairing section in PairingQRCodeSheet behind a DisclosureGroup, collapsed by default, so the QR modal feels focused on scanning rather than a second settings page.
Changes
@State private var manualPairingExpanded: Bool = falseDisclosureGroup("Manual Pairing")Key files
clients/macos/vellum-assistant/Features/Settings/PairingQRCodeSheet.swiftCloses #7472
🤖 Generated with Claude Code