Social — Profile & Follows
Connect-owned identity: an account (owning N wallets) with a global-unique username, mirrored connectors, and a polymorphic follow graph (users · events · series · topics). All keyed on the account, never a raw wallet.
Live on testnet, signed in with your real Privy account (both environments share the Privy app), so this is the exact login path a venue ships.
// ONE ConnectAuth per app — share it with both providers
const auth = new ConnectAuth({ apiKey: null })
await auth.ensureSession({ venueId, address, getToken }) // deduped, wallet-switch-safe
<ConnectProvider auth={auth}> // writes ride the session; a 401 re-mints + retries once
await c.social.updateProfile({ username: 'satoshi' })
await c.social.follow('topic', 'politics')
const me = await c.social.me() // owner read — never redacted, even when private
// drop-in components
<UserBadge wallet={addr} />
<FollowButton subjectType="topic" subjectRef="politics" />
<FollowerCount subjectType="event" subjectRef={conditionId} label="followers" />