Repository navigation
Mobile: a night scene on the welcome screen, plus a polish pass - #89
Conversation
Signed-out users now land on a record sliding out of its sleeve among the clouds, drawn through a pixel mesh, with the headline, one primary action and one quiet link below it. It replaces the bubble parade, its purple glow and the hopping title. The scene is night in dark mode and morning in light mode. The art is rendered by scripts/render-welcome-art.py and the mesh is a Skia shader, so its lines land on whole device pixels on every phone. If Skia can't read the art or compile the shader, the plain image shows instead. The auth screens' primary buttons fill with the text color, and their titles stop at weight 600. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Color: purple now only means Favorites. The Favorites header loses its wash, swipe-to-favorite matches the tab's purple, and the account avatar is flat. Replay's chart and genre bars are neutral with one accent on the busiest bucket and top genre. Quiet rows stop using the accent. Type: no uppercase tracked labels, weights stop at 600, nothing is under 11pt. The Favorites large title keeps 700 to match native large titles. Icons: the waveform replaces sparkles, since nothing here is AI. Spacing and shape: off-grid values move onto the 4pt grid, cards share a 16 radius and padding, and primary and secondary buttons share a 48pt height. Copy: labels use sentence case, `...` becomes an ellipsis, one-sentence captions lose their period, and filler eyebrows and repeated figures are gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A TIDAL-only artist has no library page, but the tile always opened one. It now follows core's topArtistAction like desktop: open the page if there is one, else play their top tracks, else do nothing. Tiles show a cover from the artist's top tracks instead of a random color, with a person glyph when there's none. Also drops Replay's filler eyebrows, in the same file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Important Review skippedToo many files! This PR contains 112 files, which is 12 over the limit of 100. To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch. Upgrade to a paid plan to raise the limit. This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.
|
- Clamp the welcome art, so cells cut off by the screen's edge stay opaque. - Drop the sampling prop on the art. RN Skia 2.6.2 reads its values as cubic coefficients, and leaving it out takes the same path. - A shelf tile with nothing to do is plain, not "dimmed" for VoiceOver. - Finish the labels: "Auto-download new tracks" and "New playlist". - Finish the weights: lyric section labels and the language selector stop at 600. - Declare canvaskit-wasm, which the mesh test imports directly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The fixture's only active invite expired on 2026-11-01, so /admin/invites showed no Revoke button and "revoke invite confirmation" failed on every viewport, on any branch. Its expiry now sits far in the future. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
If the phone switched between light and dark while Welcome was up, the old scene drew with the new scheme's colors until the new one decoded, then snapped in. The hero now draws nothing until the new scene is ready, and that scene fades in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
What changed
Welcome screen. Signed-out users land on a record sliding out of its sleeve among the clouds, drawn through a pixel mesh, with a left-aligned headline, one primary action and one quiet link. It replaces the bubble parade, its purple glow and the hopping title. The scene is night in dark mode and morning in light mode.
scripts/render-welcome-art.pyrenders the art, which keeps it reproducible.lib/welcome-mesh.tsholds a Skia shader that draws the mesh in whole device pixels. A mesh baked into the image would shimmer on any phone that scales it.Polish pass.
lib/favorites-header.tsdepends on. Cards share a 16 radius and padding, and primary and secondary buttons share a 48pt height.…instead of..., no period on one-sentence captions, and filler eyebrows and repeated figures removed.Replay artist tiles. These followed the audit and are a behavior fix. A TIDAL-only artist has no library page, but the tile always opened one. It now follows core's
topArtistAction, like desktop: open the page if there is one, else play their top tracks, else do nothing. Tiles show a cover from the artist's top tracks, with a person glyph when there's none.One change outside
mobile/.frontend/tests/ui/fixtures.tsgets a later expiry on its active invite. The old date, 2026-11-01, has passed, sorevoke invite confirmationinfrontend-uifailed on every viewport regardless of the branch. It's a one-line test fixture change in its own commit, because nothing can merge while that job is red.Why
The
/unslopaudit ofmobile/found the app mostly designed, with slop concentrated on Welcome and Replay plus leftover purple and label styling. The welcome layout follows a reference the owner supplied.How it was verified
npm run lint,npm run typecheck,npm test(59 files, 509 tests) andsync:core --checkall pass inmobile/. Therevoke invite confirmationandadmin invitesUI tests pass locally with the fixture fix.react-native-weband CanvasKit in Chromium, in dark and light for Welcome and Replay and on several phone sizes for Welcome, and checked by eye. The fullReplayScreenwouldn't mount in that harness, so its wiring is covered by the unit tests only.Not verified: nothing has run on an iOS device or simulator, including the shader through RN Skia's native runtime, Liquid Glass surfaces, and SF Symbols, which were placeholders in the harness. Please check it on a phone.
🤖 Generated with Claude Code