Conversation
…ts the configured currency
The Price field in QuoteForm always showed `Price ($)` regardless of the
workspace's currency setting. The rest of the app (ExpenseForm, CategoryForm)
already uses `currency` as a label token, so QuoteForm now follows the same
pattern — accepting a `currency` prop (defaults to DEFAULT_CURRENCY) and
rendering `Price ({currency})` instead of the hardcoded dollar sign.
VendorDetailPanel already received `currency` from its parent; both
QuoteForm call sites in the panel now forward it.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ST4FAdpfv1douVDVhhCD8Y
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
1 task done
This branch had an error being deployed
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.
Daily Product Improvement
Summary
The
QuoteFormprice field always displayedPrice ($)regardless of the workspace's configured currency. For a British couple using GBP, the form showed a dollar sign — an obvious mismatch. The fix adds acurrencyprop toQuoteFormand updates both call sites inVendorDetailPanelto forward thecurrencyalready available there.Recommendations Reviewed
Area:
vendor/quote-form.tsx· Issue: Price label hardcoded toPrice ($)ignoring configured currency · Recommendation: Addcurrencyprop and display it like the rest of the app · Type: UX/UI · Priority: High · Effort: SmallArea:
checklist/_components/checklist-page-client.tsx· Issue: Category filter chips render raw enum values (VENDORS,STATIONERY) via{category}instead of usingTASK_CATEGORY_LABELS[category]· Recommendation: Replace{category}with{TASK_CATEGORY_LABELS[category]}in filter chips · Type: UX/UI · Priority: Medium · Effort: SmallArea:
guest-list/guests-view.tsx· Issue: Guest drawer "Save changes" button stays static during mutation — no "Saving…" text swap or spinner, unlike every other save in the app · Recommendation: Swap to "Saving…" whileupdateHouseholdMutation.isPending· Type: UX/UI · Priority: Medium · Effort: SmallArea:
budget/category-card.tsx· Issue: The expanded-section Edit and Delete trigger buttons are not disabled whiledeleteCategory.isPendingoreditCategory.isPending, allowing duplicate mutations · Recommendation: Adddisabledprop to both buttons when a mutation is in flight · Type: UX/UI · Priority: Medium · Effort: SmallArea:
guest-list/index.tsx· Issue: Inline error state uses raw<h1>withoutfont-serif/font-monostyling, no icon, no CTA — inconsistent with every other empty/error state in the app · Recommendation: Rebuild using the standard centered-icon + serif title + mono subtitle + Button CTA pattern · Type: UX/UI · Priority: Medium · Effort: SmallArea:
vendor/vendor-detail-panel.tsx· Issue: Whenvendor/vendorData/enrichedVendorare falsy, the component returns two headless no-op components instead ofnull· Recommendation: Replace with a plainreturn null· Type: Frontend cleanup · Priority: Low · Effort: SmallSelected Improvement
Add
currencyprop toQuoteFormand forward it fromVendorDetailPanelfor both create and edit modes.Why This Was Selected
Every other monetary label in the app —
ExpenseForm,CategoryForm,BudgetSummary— threads thecurrencycode through and displays it next to amounts.QuoteFormwas the one outlier, silently hardcoding$. The fix is small, safe, and directly visible to any non-USD user the moment they open the quote form.Changes Made
currency?: stringprop toQuoteFormPropswith a default ofDEFAULT_CURRENCYDEFAULT_CURRENCYfrom~/lib/budget/currencyPrice ($)toPrice ({currency})currency={currency}fromVendorDetailPanelto bothQuoteFormusages (create and edit modes)Files Changed
src/components/vendor/quote-form.tsxsrc/components/vendor/vendor-detail-panel.tsxVerification
npx tsc --noEmit— no new errorsnpx @biomejs/biome checkon both files — no errors, one pre-existing class-order warning in unrelated codeQuoteFormcall sites inVendorDetailPanel—currencynow forwarded correctly in both create and edit contextsQuoteFormused nowhere else in the codebase — confirmed with grepFuture Recommendations
Recommendation: Use
TASK_CATEGORY_LABELS[category]instead of raw{category}in checklist filter chips · Priority: Medium · Effort: Small · Reason not included: Separate focused area; CSSuppercasemakes the visual impact subtle (mainlyVENDORS→VENDOR) · Should become GitHub issue: NoRecommendation: Add "Saving…" label to guest drawer save button while mutation is pending · Priority: Medium · Effort: Small · Reason not included: Different module; keeping this PR focused · Should become GitHub issue: No
Recommendation: Disable Budget CategoryCard Edit/Delete trigger buttons during pending mutations · Priority: Medium · Effort: Small · Reason not included: Different module · Should become GitHub issue: No
Recommendation: Align
GuestListinline error state with the app design system (font-serif title, font-mono subtitle, icon, Button CTA) · Priority: Medium · Effort: Small · Reason not included: Separate module; error path only · Should become GitHub issue: NoRecommendation: Replace the
VendorDetailPanelfalsy-guard early return withreturn nullinstead of two headless no-op components · Priority: Low · Effort: Small · Reason not included: Code smell only, no user-visible impact · Should become GitHub issue: NoRecommendation:
guest-search-filter.tsxcustom RSVP/Tag/Country dropdowns lack Radix-backed keyboard navigation and ARIA semantics — replace withSelectfrom~/components/ui/select· Priority: High · Effort: Large · Reason not included: Large refactor touching three interlinked filter controls · Should become GitHub issue: Yes — accessibility regression vs the rest of the appRecommendation: Full i18n pass for authenticated dashboard (all hardcoded English strings) — next-intl is installed but only used in public-facing wedding website routes · Priority: Medium · Effort: Large · Reason not included: Cross-cutting, requires product/design alignment on locale scope · Should become GitHub issue: Yes
GitHub Issues Created or Proposed
Proposed: [Guest List] Replace custom filter dropdowns with accessible Radix-backed Select components
guest-search-filter.tsxare manually implemented withuseState+useOuterClick+ absolutely-positioned<div>, lacking keyboard navigation,role="listbox", and ARIA semantics. All other dropdowns in the app use~/components/ui/select.Selectcomponent from~/components/ui/select(Radix-backed), or a Combobox for the tag filter which supports typeahead.Escapecloses the dropdown;role="combobox"orrole="listbox"is present.🤖 Generated with Claude Code
https://claude.ai/code/session_01ST4FAdpfv1douVDVhhCD8Y
Generated by Claude Code