Custom room sections in the sidebar via u.* room tags #108

Closed
opened 2026-09-17 01:39:34 -04:00 by jared · 1 comment
Owner

User-defined room categories in the sidebar (e.g. "Raids", "Off-topic"), stored as standard u.<name> room tags so they sync across devices and interoperate with other clients.

Mirrors the Favourite / Low Priority category pattern (RoomNavItem context menu + home/Home.tsx categories). From LOTUS_TODO.md: "the only substantive client-only feature left" after the 2026-07 spec-gap survey.

Scope

  • Context menu: "Add to section → [existing sections] / New section…"; remove from section.
  • Sections render as collapsible groups in Home (order persisted; drag-to-reorder optional v2).
  • Tag order field used for in-section ordering per spec.
  • Empty sections disappear; rename section = retag members.

Acceptance

  • Unit tests for the tag → sections derivation.
  • Also remove the corresponding entry from LOTUS_TODO.md when done.
User-defined room categories in the sidebar (e.g. "Raids", "Off-topic"), stored as standard `u.<name>` room tags so they sync across devices and interoperate with other clients. Mirrors the Favourite / Low Priority category pattern (`RoomNavItem` context menu + `home/Home.tsx` categories). From LOTUS_TODO.md: "the only substantive client-only feature left" after the 2026-07 spec-gap survey. ### Scope - Context menu: "Add to section → [existing sections] / New section…"; remove from section. - Sections render as collapsible groups in Home (order persisted; drag-to-reorder optional v2). - Tag `order` field used for in-section ordering per spec. - Empty sections disappear; rename section = retag members. ### Acceptance - Unit tests for the tag → sections derivation. - Also remove the corresponding entry from LOTUS_TODO.md when done.
jared added this to the Features 2026-Q4 milestone 2026-09-17 01:39:34 -04:00
jared added the enhancementpriority: mediumarea: navigation labels 2026-09-17 01:39:34 -04:00
jared self-assigned this 2026-09-17 01:39:34 -04:00
Author
Owner

Done in 082b8fc8.

  • Context menu → "Add to Section ▸": every u.<name> tag in use across your rooms as a checkable item (✓ when this room is in it; click toggles), plus a "New section…" field (validated: non-empty, ≤ 40 chars, no dots, unique, case-insensitive). Writes/deletes the standard u.<name> room tag with order: 0.5, so it syncs across devices and interoperates. The menu row reads "Sections: Raids, Off-topic" once a room is in any.
  • Home: each section is a collapsible category between Favorites and Rooms, alphabetical; members ordered by the tag's order then name; collapsed sections show only unread/selected rooms like the built-in ones; the filter box applies. A sectioned room leaves the plain Rooms list but keeps a Favorite / Low Priority placement. Empty sections cannot exist (a section is its members' tags). Rename = retag members (left for v2, as was drag-to-reorder).
  • Unit tests for the derivation (utils/roomSections.test.ts). There's no LOTUS_TODO.md left to edit (migrated to issues).

Headless: right-click → Add to Section → "Raids" → header + room appear; API-tag another room u.Off-topic → second section appears live; reopen menu → "Sections: Off-topic, Raids" with both checked; uncheck Raids → section disappears.

sections

Done in 082b8fc8. - **Context menu → "Add to Section ▸"**: every `u.<name>` tag in use across your rooms as a checkable item (✓ when this room is in it; click toggles), plus a "New section…" field (validated: non-empty, ≤ 40 chars, no dots, unique, case-insensitive). Writes/deletes the standard `u.<name>` room tag with `order: 0.5`, so it syncs across devices and interoperates. The menu row reads "Sections: Raids, Off-topic" once a room is in any. - **Home**: each section is a collapsible category between Favorites and Rooms, alphabetical; members ordered by the tag's `order` then name; collapsed sections show only unread/selected rooms like the built-in ones; the filter box applies. A sectioned room leaves the plain Rooms list but keeps a Favorite / Low Priority placement. Empty sections cannot exist (a section *is* its members' tags). Rename = retag members (left for v2, as was drag-to-reorder). - Unit tests for the derivation (`utils/roomSections.test.ts`). There's no LOTUS_TODO.md left to edit (migrated to issues). Headless: right-click → Add to Section → "Raids" → header + room appear; API-tag another room `u.Off-topic` → second section appears live; reopen menu → "Sections: Off-topic, Raids" with both checked; uncheck Raids → section disappears. ![sections](https://code.lotusguild.org/attachments/62533bff-3b09-49aa-8949-ffd373af87d3)
jared closed this issue 2026-09-20 15:05:56 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#108