Prism is an interview practice tool — you pick a topic (elocution, system design, etc.), get matched with AI panelists who have distinct personas, and do push-to-talk voice sessions that get transcribed and critiqued. Today was about hardening it for real users.
sign in with everything
Added OAuth for Google, GitHub, and Apple. Google and GitHub are standard OAuth2 flows. Apple is its own thing:
- The client secret is a short-lived ES256 JWT you sign with a
.p8private key — not a static string - The callback is
POST(form_post), notGET - User info comes from the
id_tokenJWT, not a userinfo endpoint - Apple only sends the user’s name on the first authorization — subsequent logins only have email + sub
Generated a fresh client secret per request to avoid stale-secret bugs. Used ParseUnverified on the id_token since it comes server-to-server from Apple’s token endpoint over TLS.