Single-page app that lets a Kuest wallet owner mint API credentials (L1 signature) and manage keys (L2 HMAC) against https://clob.kuest.com. Built with Next.js 14 (App Router), TypeScript, Tailwind CSS, wagmi, and Supabase.
- Next.js 14 App Router, React 19, Tailwind CSS
- wagmi (EIP-712 signing) + MetaMask / injected wallets
- Supabase JS SDK for optional email capture
- Web Crypto HMAC for L2 auth
Configure these before running locally or deploying to Vercel:
| Variable | Description |
|---|---|
NEXT_PUBLIC_SUPABASE_URL |
Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
Supabase anon service key |
NEXT_PUBLIC_REOWN_APPKIT_PROJECT_ID |
Reown / WalletConnect v2 project id (enables QR wallets) |
NEXT_PUBLIC_APP_URL |
Public base URL of this app (used for WalletConnect metadata) |
NEXT_PUBLIC_APP_ICON |
Absolute URL to an app icon (WalletConnect metadata) |
Use .env.example as a starting point and create a .env.local file (Next.js automatically loads it):
NEXT_PUBLIC_SUPABASE_URL=...
NEXT_PUBLIC_SUPABASE_ANON_KEY=...
NEXT_PUBLIC_REOWN_APPKIT_PROJECT_ID=...
NEXT_PUBLIC_APP_URL=https://auth.kuest.com
NEXT_PUBLIC_APP_ICON=https://auth.kuest.com/kuest-logo.svgApply the SQL migration in supabase/migrations/0001_key_emails.sql to create the anonymous insert-only table used to store { api_key, email } pairs:
supabase db push(Alternatively, run the file contents in the Supabase SQL editor.)
npm install
npm run devOpen http://localhost:3000 and connect a Polygon (Mainnet 137 or Amoy 80002) wallet. The generate flow will:
- Step 1 (modal): collect an optional email + advanced nonce.
- Step 2 (modal): connect via injected wallets or Reown (WalletConnect v2), switch to Polygon 137/80002 if needed, and sign the EIP-712
ClobAuthDomainpayload. POST /auth/api-keywith the L1 signature headers, return the trio, and copy helpers for.env.- If an email was provided, store
{ api_key, email }in Supabase. - Manage keys (list / revoke) via L2 HMAC signing (
timestamp + method + path(+query) + body).
Deploy to Vercel as a standard Next.js project. Set the environment variables above in the Vercel dashboard and (optionally) run the Supabase migration via CI before first deployment.