Claim URL Lookup
Look up the claim URL for a placeholder user by email address.
Process
1. Find the user ID via PlanetScale
Query the users table on the appropriate branch (usually dev) using the PlanetScale MCP tool:
SELECT id, email FROM users WHERE email = '<email>'
Use mcp__planetscale__planetscale_execute_read_query with:
- organization:
wodsmith - database:
wodsmith-db - branch:
dev(or whichever branch is relevant)
2. Query local KV for claim tokens
The KV SQLite database is at:
apps/wodsmith-start/.alchemy/local/.wrangler/state/v3/kv/miniflare-KVNamespaceObject/f35c41ba47d70351a0716642bf2c0bfea862895102f4c8ac3bc512bfca72c8d4.sqlite
Query for all claim tokens:
sqlite3 "<path-to-kv-sqlite>" "SELECT key, blob_id FROM _mf_entries WHERE key LIKE 'claim-token:%';"
This returns rows like: claim-token:<token>|<blob_id>
3. Read blob files to match userId
Blob files are stored at:
apps/wodsmith-start/.alchemy/local/.wrangler/state/v3/kv/e971afc3bbb149bd93cbd5a4f993869a/blobs/<blob_id>
Each blob contains JSON: {"userId":"usr_...","expiresAt":"..."}.
Read each blob file and find the one whose userId matches the user from step 1.
4. Construct the claim URL
The claim URL format is:
{APP_URL}/sign-up?claim=<token>
Where <token> is the portion after claim-token: in the KV key.
Key files
- Token generation:
src/utils/auth-utils.ts—createToken(CUID2 length 32),getClaimTokenKey - Token storage:
src/server-fns/registration-fns.ts— stores in KV at registration time with 90-day TTL - URL construction:
src/server/registration.ts— builds{getSiteUrl()}/sign-up?claim={token} - Sign-up consumption:
src/server-fns/auth-fns.ts— validates and consumes claim token during sign-up