Settings: Title Case for every section name (registry-level rule + guard test) #474

Open
opened 2026-09-30 04:10:59 +00:00 by kayg · 4 comments
Owner

Request (owner, 2026-09-30)

"let's use title case for settings sections"

Scope

Every Settings section and sub-section label uses Title Case: the sidebar entries, the page titles, the section headers inside pages and the deep-link titles. For example: Connected Accounts, App Passwords, Hidden Files, Server Configuration, Saved Searches.

  • Use one shared rule: Title Case with short prepositions, articles and conjunctions in lower case (a, an, the, and, or, for, to, in, on, of) unless first. Brand and product names keep their own casing (iCloud, WebDAV, CalDAV, MCP).
  • Apply it in ONE place if the section registry allows it. Otherwise fix the strings at the source and add a unit test that walks the settings section registry and fails on any label that is not Title Case under that rule, so new sections cannot drift.
  • Field labels, help text and buttons inside sections stay in sentence case. Only section names change.
  • Update DESIGN §34 (chrome and type) with the rule.
  • Screenshots of Settings at 390 and 1440 in both themes.

Order

Launch after #407 (Connected Accounts) merges: it touches the same settings sidebar files.

## Request (owner, 2026-09-30) "let's use title case for settings sections" ## Scope Every Settings section and sub-section label uses Title Case: the sidebar entries, the page titles, the section headers inside pages and the deep-link titles. For example: Connected Accounts, App Passwords, Hidden Files, Server Configuration, Saved Searches. - Use one shared rule: Title Case with short prepositions, articles and conjunctions in lower case (a, an, the, and, or, for, to, in, on, of) unless first. Brand and product names keep their own casing (iCloud, WebDAV, CalDAV, MCP). - Apply it in ONE place if the section registry allows it. Otherwise fix the strings at the source and add a unit test that walks the settings section registry and fails on any label that is not Title Case under that rule, so new sections cannot drift. - Field labels, help text and buttons inside sections stay in sentence case. Only section names change. - Update DESIGN §34 (chrome and type) with the rule. - Screenshots of Settings at 390 and 1440 in both themes. ## Order Launch after #407 (Connected Accounts) merges: it touches the same settings sidebar files.
Author
Owner

Folded into the Better Settings build (#407, DESIGN §50 S8).

Folded into the Better Settings build (#407, DESIGN §50 S8).
Author
Owner

Copy audit evidence for this issue. The Settings labels below do not use Title Case under the rule in #474. Use the replacements here, except where #407 requires the shared name “Connected Accounts”.

Registry labels in apps/web/src/routes/settings/sections.ts:

  • Line 27: “Single sign-on” → “Single Sign-On”.
  • Line 29: “Recovery key” → “Recovery Key”.
  • Line 38: “App access” → “App Access”.
  • Line 39: “Calendar feeds” → “Calendar Feeds”.
  • Line 48: “Background work” → “Background Work”.
  • Line 73: “This device” → “This Device”.
  • Line 74: “Quiet hours” → “Quiet Hours”.
  • Line 87: “Calendar accounts” → “Connected Accounts” under #407.
  • Line 88: “Connect a calendar account” → “Connected Accounts” under #407.
  • Line 89: “External calendars” → “External Calendars”.
  • Line 98: “Mail accounts” → “Connected Accounts” under #407.
  • Line 99: “Connect a mail account” → “Connected Accounts” under #407.
  • Line 111: “Turn history” → “Turn History”.
  • Line 119: “Library folders” → “Library Folders”.
  • Line 126: “Hidden files” → “Hidden Files”.
  • Lines 135 and 152: “Optional plugins” → “Optional Plugins” or the plain name chosen for #860.
  • Line 143: “Server configuration” → “Server Configuration”.
  • Line 154: “Job queues” → “Job Queues”.
  • Line 156: “App access” → “App Access”.

Settings card headings also need the same rule:

  • apps/web/src/routes/settings/apps/AppsSection.svelte:57: “Instance app access” / “App access” → “Instance App Access” / “App Access”.
  • apps/web/src/routes/settings/files/FilesSection.svelte:62: “Hidden files” → “Hidden Files”.
  • apps/web/src/routes/settings/notifications/NotificationsSection.svelte:112,141: “This device” / “Quiet hours” → “This Device” / “Quiet Hours”.
  • apps/web/src/routes/settings/calendars/CalendarsSection.svelte:345,408: “Calendar accounts” / “Connect a calendar account” → “Connected Accounts” under #407.
  • apps/web/src/routes/settings/calendars/ExternalCalendarsGroup.svelte:103: “External calendars” → “External Calendars”.
  • apps/web/src/routes/settings/apps/CalendarFeedsGroup.svelte:160: “Calendar feeds” → “Calendar Feeds”.
  • apps/web/src/routes/settings/mail/MailSection.svelte:544,619,631: “Mail accounts” / “Read marking” / “Connect a Mail account” → “Connected Accounts” under #407 / “Read Marking” / “Connected Accounts” under #407.
  • apps/web/src/routes/settings/jobs/MyJobsGroup.svelte:108,129: “Background work” / “In progress” → “Background Work” / “In Progress”.
  • apps/web/src/routes/settings/admin/ConfigGroup.svelte:156: “Server configuration” → “Server Configuration”.
  • apps/web/src/routes/settings/admin/JobsGroup.svelte:226: “Job queues” → “Job Queues”.
  • apps/web/src/routes/settings/ai/AiSection.svelte:202: “Turn history” → “Turn History”.
  • apps/web/src/routes/settings/plugins/PluginsSection.svelte:143: “Optional plugins” → “Optional Plugins” or the plain name chosen for #860.
  • apps/web/src/routes/settings/account/RecoveryGroup.svelte:40,44: “Recovery key” → “Recovery Key”.
  • apps/web/src/routes/settings/photos/PhotosSection.svelte:124: “Library folders” → “Library Folders”.
  • apps/web/src/routes/settings/account/AppPasswordsGroup.svelte:334: “App password ready” → “App Password Ready”.
  • apps/web/src/routes/settings/admin/BackupsGroup.svelte:174,198: “Scheduled backups” / “File integrity” → “Scheduled Backups” / “File Integrity”.
  • apps/web/src/routes/settings/editor/EditorSection.svelte:13: “Child blocks” → “Child Blocks”.
  • apps/web/src/routes/settings/account/LocationGroup.svelte:267: “Saved places” → “Saved Places”.
  • apps/web/src/routes/settings/photos/PhotosSection.svelte:108: “Pasted screenshots” → “Pasted Screenshots”.

Expected behaviour: keep section and page names in Title Case. Keep short words such as “and” and “a” lower-case, as the issue requests. Keep the account and client names from #407 and #860.

Test idea: extend the Settings copy guard to check every registry label and every Settings card heading. Keep field labels and help text in sentence case.

Copy audit evidence for this issue. The Settings labels below do not use Title Case under the rule in #474. Use the replacements here, except where #407 requires the shared name “Connected Accounts”. Registry labels in `apps/web/src/routes/settings/sections.ts`: - Line 27: “Single sign-on” → “Single Sign-On”. - Line 29: “Recovery key” → “Recovery Key”. - Line 38: “App access” → “App Access”. - Line 39: “Calendar feeds” → “Calendar Feeds”. - Line 48: “Background work” → “Background Work”. - Line 73: “This device” → “This Device”. - Line 74: “Quiet hours” → “Quiet Hours”. - Line 87: “Calendar accounts” → “Connected Accounts” under #407. - Line 88: “Connect a calendar account” → “Connected Accounts” under #407. - Line 89: “External calendars” → “External Calendars”. - Line 98: “Mail accounts” → “Connected Accounts” under #407. - Line 99: “Connect a mail account” → “Connected Accounts” under #407. - Line 111: “Turn history” → “Turn History”. - Line 119: “Library folders” → “Library Folders”. - Line 126: “Hidden files” → “Hidden Files”. - Lines 135 and 152: “Optional plugins” → “Optional Plugins” or the plain name chosen for #860. - Line 143: “Server configuration” → “Server Configuration”. - Line 154: “Job queues” → “Job Queues”. - Line 156: “App access” → “App Access”. Settings card headings also need the same rule: - `apps/web/src/routes/settings/apps/AppsSection.svelte:57`: “Instance app access” / “App access” → “Instance App Access” / “App Access”. - `apps/web/src/routes/settings/files/FilesSection.svelte:62`: “Hidden files” → “Hidden Files”. - `apps/web/src/routes/settings/notifications/NotificationsSection.svelte:112,141`: “This device” / “Quiet hours” → “This Device” / “Quiet Hours”. - `apps/web/src/routes/settings/calendars/CalendarsSection.svelte:345,408`: “Calendar accounts” / “Connect a calendar account” → “Connected Accounts” under #407. - `apps/web/src/routes/settings/calendars/ExternalCalendarsGroup.svelte:103`: “External calendars” → “External Calendars”. - `apps/web/src/routes/settings/apps/CalendarFeedsGroup.svelte:160`: “Calendar feeds” → “Calendar Feeds”. - `apps/web/src/routes/settings/mail/MailSection.svelte:544,619,631`: “Mail accounts” / “Read marking” / “Connect a Mail account” → “Connected Accounts” under #407 / “Read Marking” / “Connected Accounts” under #407. - `apps/web/src/routes/settings/jobs/MyJobsGroup.svelte:108,129`: “Background work” / “In progress” → “Background Work” / “In Progress”. - `apps/web/src/routes/settings/admin/ConfigGroup.svelte:156`: “Server configuration” → “Server Configuration”. - `apps/web/src/routes/settings/admin/JobsGroup.svelte:226`: “Job queues” → “Job Queues”. - `apps/web/src/routes/settings/ai/AiSection.svelte:202`: “Turn history” → “Turn History”. - `apps/web/src/routes/settings/plugins/PluginsSection.svelte:143`: “Optional plugins” → “Optional Plugins” or the plain name chosen for #860. - `apps/web/src/routes/settings/account/RecoveryGroup.svelte:40,44`: “Recovery key” → “Recovery Key”. - `apps/web/src/routes/settings/photos/PhotosSection.svelte:124`: “Library folders” → “Library Folders”. - `apps/web/src/routes/settings/account/AppPasswordsGroup.svelte:334`: “App password ready” → “App Password Ready”. - `apps/web/src/routes/settings/admin/BackupsGroup.svelte:174,198`: “Scheduled backups” / “File integrity” → “Scheduled Backups” / “File Integrity”. - `apps/web/src/routes/settings/editor/EditorSection.svelte:13`: “Child blocks” → “Child Blocks”. - `apps/web/src/routes/settings/account/LocationGroup.svelte:267`: “Saved places” → “Saved Places”. - `apps/web/src/routes/settings/photos/PhotosSection.svelte:108`: “Pasted screenshots” → “Pasted Screenshots”. Expected behaviour: keep section and page names in Title Case. Keep short words such as “and” and “a” lower-case, as the issue requests. Keep the account and client names from #407 and #860. Test idea: extend the Settings copy guard to check every registry label and every Settings card heading. Keep field labels and help text in sentence case.
Author
Owner

Correction to my earlier casing list: apps/web/src/routes/settings/sections.ts:135,152 and PluginsSection.svelte:143 should not become Optional Plugins. The owner rule says use plugin only when needed and explain it. Please use a plain Title Case label such as Optional Features; see the copy finding for the Settings feature list.

Correction to my earlier casing list: `apps/web/src/routes/settings/sections.ts:135,152` and `PluginsSection.svelte:143` should not become `Optional Plugins`. The owner rule says use `plugin` only when needed and explain it. Please use a plain Title Case label such as `Optional Features`; see the copy finding for the Settings feature list.
Author
Owner

One more registry label is not in Title Case: apps/web/src/routes/settings/sections.ts:65 has Make a note, and :84 has Date and time. Use Make a Note and Date and Time. The article and conjunction stay lower-case; the final nouns use capitals.

One more registry label is not in Title Case: `apps/web/src/routes/settings/sections.ts:65` has `Make a note`, and `:84` has `Date and time`. Use `Make a Note` and `Date and Time`. The article and conjunction stay lower-case; the final nouns use capitals.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal#474
No description provided.