feat(THI-54): modernize settings page - #25
Merged
tdody merged 1 commit intoApr 19, 2026
Merged
Conversation
Rebuild the Settings page around the THI-45/46 design system and add the Appearance + VT tax defaults sections from the ticket. Header - Caps "Workspace" + serif 44px "Settings" + ink-3 subtitle explaining what persists where Appearance (live — applies immediately) - Theme: <Segmented> Light / Dark wired to existing ThemeContext - Accent swatches: 5 presets (Teal default / Forest / Amber / Rose / Violet) — selecting a swatch sets --accent on :root to the light-or-dark token value and persists to localStorage (settings.accent). Re-applies on theme flip. - Density: <Segmented> Comfortable / Compact — sets document.documentElement.dataset.density and persists (ready for future density-aware CSS; no visual change yet) - Properties view: <Segmented> Cards / Rows — persists the default dashboard view to localStorage (settings.propertiesView) for a future follow-up that reads it in Dashboard Seasonal defaults (backend-persisted) - Three <SliderField> for peak months / peak occupancy / off-peak occupancy - <SeasonalBars> preview keyed on the current values, with the same accent-vs-ink-3 legend pattern used in the Revenue & Expenses tab Vermont tax defaults (new, localStorage-persisted) - 4 Fields: VT Rooms Tax %, STR Surcharge %, Local Option Tax %, STR Registration Fee - Stored under settings.vtTax. Wiring these into the new-property flow is a separate follow-up. Lender packet branding (preserved) - Company name via <Field> + file upload for logo; file input restyled with caps buttons and border-rule-strong tokens Footer - Save changes / Reset buttons. Save writes seasonal + company to the backend and vtTax to localStorage; Reset reverts the form to the last loaded initial values. Both are disabled when the form is clean. Co-Authored-By: Claude Opus 4.7 (1M context) <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
Rebuilds
SettingsPage.tsxaround the THI-45/46 design system and adds the Appearance + VT tax defaults sections from the ticket.Header
Caps "Workspace" + serif 44px "Settings" + ink-3 subtitle explaining what persists where.
Appearance (live — applies immediately)
<Segmented>Light / Dark wired to existingThemeContext--accenton:rootto the light-or-dark token value and persists tolocalStorage["settings.accent"]. Re-applies when the theme flips so dark-mode variants are used.<Segmented>Comfortable / Compact — setsdocument.documentElement.dataset.densityand persists. Ready for density-aware CSS; no visual change yet.<Segmented>Cards / Rows — persists the default dashboard view tolocalStorage["settings.propertiesView"]for a follow-up that reads it inDashboard.Seasonal defaults (backend-persisted)
Three
<SliderField>(peak months / peak occupancy / off-peak occupancy) +<SeasonalBars>preview keyed on the current values, with the same accent-vs-ink-3 legend pattern used in the Revenue & Expenses tab.Vermont tax defaults (new, localStorage-persisted)
4 fields: VT Rooms Tax %, STR Surcharge %, Local Option Tax %, STR Registration Fee. Stored under
localStorage["settings.vtTax"]. Wiring them into the new-property flow is a separate follow-up.Lender packet branding (preserved)
Company name via
<Field>+ file upload for the logo; file input restyled with caps buttons andborder-rule-strongtokens.Footer
Save changes / Reset buttons. Save writes seasonal + company name to the backend and
vtTaxto localStorage. Reset reverts the form to the last loaded initial values. Both are disabled when the form is clean.Test plan
npm run lint— cleannpm run build— passes, CSS 46.90 kB, 118 modules--accentupdates on the fly; reload persists the choice; flipping theme recomputes the accent for that mode🤖 Generated with Claude Code