profile: reorder the tabs, fold in bookmarks and snippets !455

merged merged by cmc on 2026-09-21 23:46 UTC · krz/gitbay:profile-tabs into main

Discussion

cmc

Follow-up to !453, from your four points on the tab layout.

  1. Bookmarks tab. repo bookmarks takes no owner and lists the caller's, so the tab is offered on your own profile only; on anyone else's the URL is a 404. Making them public would be a capability and a privacy change, so I did not. /bookmarks redirects to the tab and the rail points at it, rather than two pages showing the same rows.
  2. Order. About · Repositories · Bookmarks · Snippets · People. /{owner} is About, so the first tab is the landing page the way a tab bar normally works. #242's finding still holds: what it asked for is that the sections be separate pages rather than one stack a long About pushes the repositories off the bottom of.
  3. Activity inside About, with a log of the newest 30 events under the graph. The log counts what the graph over it counts — UserPublicEvents keys on the actor for a user, matching ActivityByDay, while an org keeps OwnerPublicEvents, matching OrgActivityByDay. Both public repositories only. Keying a user's log on their repositories instead printed "3 in the last year" over "Nothing yet." activity.atom is still the feed that goes back further.
  4. Snippets render inside the profile with its header and tab bar, not on a page of their own. A snippet itself is still its own page.

owner.html's page struct is a named type now: the handler and the tests must agree on it field for field, and the anonymous struct in two places drifted three times while this was written.

Verified on a local instance with all four tabs populated, and the full e2e suite passes locally (238s).

Parity: the profile prose rewritten, a bookmarks-on-your-profile row.