The gate goes first, and it looks like the game - #224
Merged
Conversation
Two things the owner found by opening the real thing in a private window, both of them mine. PLACEMENT. The gate was rendered BELOW `phase === 'menu'`, and 'menu' is what draws the world map. Sequential early returns mean order in the file *is* the behaviour: the map won, and the login could not appear until something moved the phase off it — so it turned up AFTER the map instead of before it. Owner: *"harusnya sebelum user membuka maps, jd di awal banget persis setelah user klik Play game di landing page."* The block now sits ahead of every phase, which is what its own comment claimed all along. STYLING. It used `ns-signin-card` and `ns-signin-sub`, which this app does not define anywhere, so it rendered as unstyled text on a black rectangle. Owner: *"halaman login nya jelek banget."* Nothing caught it and nothing could have: tsc does not know about CSS, and check:cssvars only validates custom properties. It now uses the markup and stylesheet SignInScreen already had — the bracket frame, the plate fill, the white Google button, the bevelled clips — and the test suite gained a check that every ns- class the gate names is really declared in signin.css. THE THREE METHODS ARE ON THE SCREEN. One button that opened a modal to ask which method you wanted hid the offer behind a press: a player who wants Google could not see that Google was on offer. Each method is its own button now, and each opens Privy already narrowed to that one method, so the choice is made on a screen that looks like this game and Privy only handles the mechanics. The three marks moved to components/game/SignInMarks.tsx rather than being copied. Two Google marks is two chances for one to be quietly recoloured until the screens diverge — and Google's guidelines make that a compliance problem rather than a matter of taste. Verified: tsc clean, build unchanged at 142/242 kB, 22/22 test:privy, check:copy, check:cssvars, check:market and audit pass, lint 35 (one below the baseline). The screen was rendered in a real browser at 390x844 and the screenshot sent for approval before merge. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017A764RdnwpyWnG7uCNhMiQ
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
OWNER: *"itu kalo aku klik google, ga muncul 2x pop up kan? layar privy juga
maksudku."* It did, and checking rather than answering from memory is what
found it: `login({loginMethods:['google']})` opens Privy's modal holding a
single Google button — the same question this screen just asked, asked again —
and only then hands off to Google's account chooser.
useLoginWithOAuth().initOAuth() goes straight to Google with no Privy UI at all,
so the tap on "Continue with Google" is now the last thing before Google's own
screen. It is a full-page redirect rather than a popup, which is the right shape
on a phone anyway: popups are what mobile browsers block.
Privy marks that hook @experimental, so it is not the only path. A throw falls
back to the modal — one extra screen is a worse login, an unrecoverable one is
no login at all.
Email and wallet stay on Privy's modal on purpose. There the modal is doing real
work rather than repeating a question: typing an address, or choosing which of
several wallets. Nothing about the screen itself changed, so the approved
screenshot still stands.
Verified: tsc clean, build unchanged at 142/242 kB, 24/24 test:privy, check:copy
clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017A764RdnwpyWnG7uCNhMiQ
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.
Two bugs the owner found by opening the real thing in a private window. Both were mine.
Placement
The gate was rendered below
phase === 'menu', and'menu'is what draws the world map. These are sequential early returns, so order in the file is the behaviour: the map won, and the login could not appear until something moved the phase off it — so it turned up after the map instead of before it.The block now sits ahead of every phase, which is what its own comment claimed all along.
Styling
It used
ns-signin-cardandns-signin-sub. This app defines neither, so the screen rendered as unstyled text on a black rectangle.Nothing caught it and nothing could have:
tscdoes not know about CSS, andcheck:cssvarsonly validates custom properties. It now uses the markup and stylesheetSignInScreenalready had — the bracket frame, the plate fill, the white Google button, the bevelled clips — and the suite gained a check that everyns-class the gate names is really declared insignin.css, which would have failed loudly on the version that shipped.The three methods are on the screen
One button that opened a modal to ask which method you wanted hid the offer behind a press — a player who wants Google could not see that Google was on offer. Each method is its own button now, and each opens Privy already narrowed to that one method, so the choice is made on a screen that looks like this game and Privy only handles the mechanics of whichever was chosen.
The wallet button still avoids the phrase
check:copybans, and says the true thing: it is for people who already have one, not an instruction to go get one.The three marks moved to
components/game/SignInMarks.tsxrather than being copied into a second file. Two Google marks is two chances for one to be quietly recoloured until the screens diverge, and Google's brand guidelines make that a compliance problem rather than a matter of taste.Testing
The screen was rendered in a real browser at 390×844 against a build carrying the production app id, and the screenshot was sent to the owner for approval before merge. Privy's own modal still is not covered — it needs an allowed origin this sandbox cannot be.
Generated by Claude Code