Rename 18+ to 19+ and redesign NSFW UI (#1209)#1222
Conversation
- Add circled "19" badge on story cards (top-right position) - Add 19+ toggle pill in NavBar next to logo - Remove inline NSFW toggle from desktop FilterBar - Rename all user-facing "18+" text to "19+" - Fix NavBar test mock for useSearchParams/useRouter Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
realproject7
left a comment
There was a problem hiding this comment.
RE2 Review: ✅ Approve
Well-structured rename + UI redesign. All user-facing 18+ → 19+ references covered.
Highlights:
NsfwBadgeextracted as a separate component positioned top-right — clean separation from the left-sideBadgescluster- Circled "19" design is distinctive and visually clear
- NavBar toggle pill uses localStorage + URL param sync on the home page
- FilterBar desktop inline toggle properly removed; mobile sheet retains it
- Test mocks updated for new next/navigation hooks
Minor non-blocking notes:
- Indentation on line ~112 of StoryCard.tsx:
NsfwBadgehas extra indentation vs its siblingBadges(cosmetic only, not functional) - On initial page load, if localStorage has
plotlink_nsfw=1but URL lacks?nsfw=1, the pill shows active but content may not show NSFW until toggled. This is likely pre-existing behavior from the old system — not introduced by this PR.
No blockers. CI pending at review time.
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: REQUEST CHANGES
Summary
The rename and discover-card badge work are mostly in place, but #1209 requires the circled 19 badge on the story detail cover as well, and the new global NavBar toggle does not actually apply the NSFW preference outside the home route.
Findings
-
[medium] Story detail cover does not show the circled
19badge for NSFW stories.- File:
src/app/story/[storylineId]/page.tsx:373 - Suggestion: Overlay the same top-right circled
19badge on the detail cover frame whenstoryline.is_nsfwis true, for both uploaded covers and fallback covers.
- File:
-
[medium] The NavBar 19+ toggle only updates the URL on
/, so it does not apply globally as required. For example, public profile story queries still hard-filteris_nsfw = false, and toggling the global pill while on/profile/...only writes localStorage without updating the visible list.- File:
src/components/NavBar.tsx:26 - Suggestion: make the shared preference observable by pages that filter NSFW content, or otherwise ensure profile/discover consumers react to the global preference. At minimum, profile story queries should honor the saved 19+ preference for non-owner views.
- File:
Decision
Requesting changes because both points are acceptance criteria in #1209. CI was still pending at review time.
#1209) - Export NsfwBadge and overlay on story detail cover (both uploaded and fallback) - Profile pages now respect global 19+ localStorage preference for non-owner views - Include showNsfw in query keys for proper cache invalidation Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: REQUEST CHANGES
Summary
The story detail cover badge is fixed, but the global 19+ preference still is not wired in a reactive way for profile pages. Reading localStorage during render and adding it to a query key does not make profile queries update when the NavBar toggle changes localStorage.
Findings
- [medium] Profile pages still do not react to the global NavBar 19+ toggle while already on a profile route.
- File:
src/app/profile/[address]/page.tsx:709 - Suggestion: store the 19+ preference in reactive client state and subscribe to a shared event/store, or have the NavBar dispatch an event after writing localStorage that profile tabs listen to and use to update state/query keys. As written,
const showNsfw = localStorage.getItem(...) === "1"is only read during renders that profile already happens to perform, so clicking the NavBar pill on/profile/...will not reliably refetch or reveal/hide NSFW stories.
- File:
Decision
Requesting changes because the remaining blocker is still part of #1209's “toggle applies globally” acceptance criterion. CI was pending at review time.
- Extract useNsfwPreference hook with custom event dispatch - NavBar toggle dispatches 'plotlink:nsfw-change' event on state change - Profile StoriesTab/PortfolioTab subscribe to the event and re-query - Query keys include showNsfw for proper cache invalidation Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: APPROVE
Summary
The requested fixes are in place. The story detail cover now uses the circled 19 badge, and the 19+ preference is reactive across NavBar/profile consumers through the shared useNsfwPreference hook and query keys.
Findings
- None blocking.
Decision
Approved. The prior RE1 findings are resolved, and both lint-and-typecheck and e2e are green on the updated commit.
realproject7
left a comment
There was a problem hiding this comment.
RE2 Re-review: ✅ Approve (maintained)
Both RE1 findings properly resolved:
- Story detail cover now shows circled "19" badge via exported
NsfwBadge useNsfwPreferencehook with custom event dispatch makes the toggle fully reactive across pages — profile tabs subscribe and includeshowNsfwin query keys for proper cache invalidation. Clean pattern.
No new concerns.
Summary
Test plan
🤖 Generated with Claude Code