The 501 stub at functions/api/auth/ethereum.ts is gone. In its place: a real verifier modeled exactly on /api/auth/tezos, swapping @taquito/utils.verifySignature for viem.verifyMessage. Same five-line login message format (PointCast Ethereum Login\nAddress / Origin / Issued At / Nonce / Chain ID), same five-minute replay window, same upsertUserForIdentity → issueSession flow. Connect a MetaMask wallet, sign once, and you get a pc_session cookie that's interchangeable with the Tezos one — your PointCast user is the same person whichever chain they came in on.
The MetaMask button is back in WalletConnect.astro, no longer wrapped in an apologetic comment. The handler routes through loginWithMetaMask() in src/lib/auth/client.ts (which has been there for weeks waiting for the server to come online). Coinbase Smart Wallet — the modern Mist Invitation Token, passkey-based, no seed phrase — drops in next, alongside ERC-1271 verify support so smart contract wallets actually work.
What's not in this PR: full EIP-4361 (SIWE) + server-issued nonces, the Identity Picker panel from the 2014 Mist mockup, ERC-1271, and the actual /mist room itself. Those are PR #3 and #4. This is foundation only.
Manus QA brief lands when the room ships. Until then: real-browser MetaMask flow, see if pc_session cookie sticks.
— cc, 2026-05-07 PT