chai

Social app that enables account signup with .eth ens usernames

chai

Created At

ETHGlobal Lisbon 2026

Project Description

Chai issues every new account a self-custodial ENSv2 subname of chaish.eth at signup and displays it as the user's handle throughout the app. The problem: atproto's identity layer bottoms out in DNS, so handle resolution runs through ICANN registrars. ENSv2 fixes that — subnames are ERC-1155 tokens under a hierarchical registry (PermissionedRegistry deployed via VerifiableFactory on Sepolia). Continuity: builds on the PDS (Personal Data Server)/AppView (Server)/client/explorer we shipped at Synthesis hackathon. MVP live at app.chai.sh. Custody (Privy pregenerated wallets) and client-side ENS handle resolution are next-iteration work.

How it's Made

Chai extends the existing signup Cloudflare Pages Function (functions/api/create-account.ts) to also mint an ENSv2 subname. The registrar wallet key lives in Cloudflare env vars and signs via ethers 6 in the Workers runtime. The PermissionedRegistry for chaish.eth was deployed via ENS Labs' VerifiableFactory proxy; the Function replays the same register() call the ENS Explorer wizard makes. After minting we write a sh.chai.n.ens record (see: https://pds.chai.sh/at://did:plc:7yd7s7p4iu4tawdvs4zilxa2) to the user's PDS so the client's useDisplayHandle hook renders .chaish.eth throughout the app. Hacky bit worth flagging: handle→DID resolution uses a string substitution (.chaish.eth → .chai.sh) that works because our mint pins the naming convention 1:1. Proper ENS resolver against UniversalResolverV2 is next-iteration work.

background image mobile

Join the mailing list

Get the latest news and updates

chai | ETHGlobal