Repository navigation
Conversation
…ilders#661) - profile auth variable: up to 5 sections, each { id, title, description?, url } - each section fetches its app path and renders items, an empty text, an incomplete note and a header link - a failed or invalid section shows an error with Retry; the rest of the page keeps working
Contributor
Author
|
@elliotBraem ready for review when you get a chance, City Node #400 needs this |
elliotBraem
requested changes
Nov 2, 2026
elliotBraem
left a comment
Contributor
There was a problem hiding this comment.
Blocking in preference of another pattern
This branch has not been deployed
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.
Child apps can now add their own sections to Settings → Profile without claiming
/settings/profilelocally.How it works
profileauth variable:profile.sections, up to 5 entries of{ id, title, description?, url }.urlis an app path;idis kebab-case and unique.urlwith the user's session and renders the sections below the profile fields, in config order. The response is{ items: [{ title, description?, meta?, href? }], empty?, incomplete?, link?: { href, label } }. Hrefs must be app paths orhttps://URLs, the same rule asonboard.profileconfig shows no sections.I went with data from an endpoint rather than a remote component. Plugin UIs are grafted routes, so loading a component from the child's UI remote inside the auth page would be a much bigger runtime change. This follows the same pattern as
onboard.community.urlfrom #662.City Node will use it for a member's attendance record across communities (NEARBuilders/citynode.app#400): one section with event, community and date per row, plus an incomplete note when upstream listings may be truncated.
The redeem hook mentioned in the issue isn't part of this PR.
Tested
ui/src/lib/profile-sections.test.ts) and component tests on the Profile page: items, links, incomplete note, one failing section next to a working one, retry, invalid response, empty text, and no fetch when nothing is configuredplugins/authvitest: 464 passedpnpm typecheckandbiome checkpass.lint:effect(oxlint) doesn't run locally: it fails to parse its own preset config (Unknown plugin: 'effecttsgo') before linting anything, so CI is the check for that oneNot tested: not checked in a browser or at 375px yet.
Closes #661