Repository navigation
Open the web's achievements dialog from a profile's badges - #4
Merged
Merged
Conversation
Tapping the rank, the unlocked count or a badge on a profile's shelf opens the web's achievements dialog as a sheet: the rank and XP, the bar to the next rank, every badge with its progress, and the Unix ranks on a second tab. A badge opens it with that badge outlined in the owner's lane. EDGE can't scroll to a child, so a badge in the second half of the list opens the sheet at the end of the list, where the badge is in view. The shelf's badge labels read part of a Blade expression, because a double quoted string inside a native attribute ends the attribute. They now come from Badge::statusLabel(). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
simonhamp
force-pushed
the
feat/badge-panel
branch
from
October 18, 2026 18:24
b944b82 to
ad56fd3
Compare
This was referenced Oct 18, 2026
Merged
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.
Tapping the achievements shelf on a profile now opens the web's achievements dialog as a bottom sheet, like the commit sheet. Tapping a badge opens it with that badge outlined in the profile's lane colour.
The sheet follows
achievements-dialog.tsx: the title with the rank chip, the handle with XP and how many badges are unlocked, the bar to the next rank, then the Badges and Unix Ranks tabs. Each badge shows its icon, name, description, a tick once unlocked or its progress, and a bar under a locked badge that takes more than one step. The ranks tab lists every rank with its XP and marks the current one. The XP formula line closes it, as on the web. The shelf also gets the web's chevron after the unlocked count.No API change was needed. The signed profile already carries everything the dialog shows: rank names, levels, thresholds, descriptions and whether each is reached. The web dialog shows no unlock dates or categories. The app was dropping rank descriptions and
achieved, soAchievementsnow reads ranks into a smallRankclass.Things to look at:
ScrollView::autoScrollTo()exists, but the Blade collector doesn't map an attribute to it and the mobile-ui renderers ignoreauto_scroll_to. So a badge in the second half of the list opens the sheet withscroll-anchor="bottom", which brings the end of the list, and that badge, into view. On an iPhone 17 Pro every badge ends up on screen this way. On a phone as short as an SE, badges 5 and 6 could sit just below the fold. The jump to the end also happens while the sheet is still sliding up, so you can see the list move for a frame or two. A real scroll-to would need changes in mobile-air and mobile-ui.Badge::statusLabel()replaces it.progress-barpartial that the shelf and the sheet share.OpensAchievementsis a trait soProfile.phponly gains auseline, since other open work touches that screen too.How I checked it:
php artisan testpasses (637 tests) and Pint is clean. Then on an iPhone 17 Pro simulator against a local devnull running nunomaduro/dev-null.sh#130's API, signed in as local_dev. On my own profile I opened the sheet from the shelf, scrolled to the end, tapped "uptime" (in progress, first half) and saw it outlined, and switched to Unix Ranks. On someone else's profile I scrolled the badge row and tapped "pipe" (unlocked, second half), and the sheet opened at the end with it outlined in their lane. Dismissing and reopening started on Badges again. Both tabs checked in dark mode too. I compared each against the web dialog at phone width. Screenshots and a recording are kept locally.🤖 Generated with Claude Code