Skip to content

feat(ui): let the user choose and order the bottom bar destinations - #53

Merged
SiteRelEnby merged 2 commits into
mainfrom
feat/nav-pinnable-slots
Aug 1, 2026
Merged

feat(ui): let the user choose and order the bottom bar destinations#53
SiteRelEnby merged 2 commits into
mainfrom
feat/nav-pinnable-slots

Conversation

@SiteRelEnby

Copy link
Copy Markdown
Collaborator

Final piece of the navigation rework, after #49 (drawer) and #51 (Settings de-featuring). Part of #65.

Pinnable, reorderable bottom bar

Home keeps the first slot; the next three are the user's to pick and arrange. More still opens the drawer with everything in it. Defaults stay Members / Front history / Journals, so nobody's muscle memory moves without them asking.

The editor is in Settings > Appearance > Navigation bar, next to the theme, and applies changes immediately rather than hiding them behind a save button. Two sections:

  • In the bar - Home (locked, "Always first"), then each pin as Slot 2/3/4 with move up / move down / remove.
  • Under More - everything else, each with an add button. At capacity the header says so and the rows grey out rather than silently ignoring taps.

Ordering uses explicit buttons rather than drag-and-drop: the list is three items, and buttons stay operable with a screen reader or switch access, which a long-press drag does not.

Pins are per-device, like the theme override - which three things you want under your thumb is a fact about this phone, not the account - and they survive sign-out for the same reason. They are only reordered by the user, never by the app: a primary bar that rearranges itself by usage defeats the muscle memory it exists to serve.

Saved pins are read back by builds that may no longer have those destinations, so resolution treats them as untrusted: unknown routes are dropped rather than rendered as dead slots, duplicates collapse, over-long lists are capped. Short lists are deliberately left short - padding them would mean removing something in the editor silently swapped in a default, leaving the bar and the editor disagreeing about what is pinned.

Also here

Home's top bar loses its Board messages and Notifications icons. Both were there because the bottom bar couldn't hold them; the drawer lists them now, so it's back to just Settings.

Settings category subtitles now name what's actually inside them. Several had drifted - Appearance said "Theme, timezone" while also holding the palette picker and now this editor; System said "Custom fields" while holding tags and archived members too. Account also advertised "Email", which isn't a row on that screen, so that's gone rather than describing something that isn't there.

Testing

:app:assemblePlayRelease + :app:testPlayReleaseUnitTest green (rebased onto current main). 15 unit tests cover pin resolution (unknown routes, duplicates, over-long and short lists, never-set vs deliberately-empty) and the reorder helper's no-op cases at the list ends, plus a guard that every drawer route exists in Routes.

Device checklist:

  • Settings > Appearance > Navigation bar: pin, unpin, reorder; the bar updates immediately
  • Reset to defaults returns Members / Front history / Journals
  • Unpin everything: bar is Home + More, and it stays that way across a restart (not silently re-seeded)
  • Pins survive sign-out and sign-in
  • Home top bar shows only the Settings gear; Messages and Notifications still reachable from the drawer
  • Settings landing subtitles match what each category actually contains

Completes the navigation rework. Home keeps the first slot, the next three are
the user's to pick and arrange, and More still opens the drawer with everything
in it. Defaults stay Members / Front history / Journals, so nobody's muscle
memory moves without them asking.

The editor lives in Settings > Appearance > Navigation bar, next to the theme,
and applies changes immediately rather than hiding them behind a save button.
It has two sections, "In the bar" and "Under More", with move up/down and
remove/add controls. Ordering uses explicit buttons rather than drag-and-drop:
the list is short, and buttons stay operable with a screen reader or switch
access, which a long-press drag does not.

Pins are per-device, like the theme override: which three things you want under
your thumb is a fact about this phone, not about the account. They survive
sign-out for the same reason. They are only reordered by the user, never by the
app: a primary bar that rearranges itself by usage defeats the muscle memory it
exists to serve, so there is no frequency-based shuffling here and shouldn't be
later.

Saved pins are read back by builds that may no longer have those destinations,
so resolution treats them as untrusted: unknown routes are dropped rather than
rendered as dead slots, duplicates collapse, and over-long lists are capped.
Short lists are deliberately left short - padding them would mean removing
something in the editor silently swapped in a default, leaving the bar and the
editor disagreeing about what is pinned. Unit tests cover those cases and the
reorder helper, plus a guard that every drawer route exists in Routes.

Also drops the Board messages and Notifications icons from the Home top bar.
Both were there because the bottom bar couldn't hold them; the drawer lists
them now, so the top bar is back to just Settings.
The subtitles had drifted from the screens they describe: Appearance said
"Theme, timezone" while also holding the palette picker and now the navigation
bar editor, System said "Custom fields" while holding tags and archived members
too, and Notifications named only the two device toggles while holding
subscriptions, channels and devices above them.

Since the subtitle is what people scan to decide which category to open, each
now names its contents. Safety keeps its re-auth level, which is real state
worth surfacing, and gains a mention of revision retention.
@SiteRelEnby
SiteRelEnby enabled auto-merge August 1, 2026 01:46
@SiteRelEnby
SiteRelEnby merged commit 72969ca into main Aug 1, 2026
1 check passed
@SiteRelEnby
SiteRelEnby deleted the feat/nav-pinnable-slots branch August 1, 2026 01:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant