Digital Twin / how the answers work
How a question becomes a reply
Select a box to see what it does. You can then show that part in the animated example.
Inspect a component
Type a question about my work. You can also use the microphone when your browser supports it.
Browser speech recognition and recorded-audio transcription depend on capability and permission.
Source: mascot.js ↗The app uses a maintained profile of my work to guide the reply. AI can still be wrong.
The Netlify chat function prepares the request. Provider credentials belong on the server, not in browser code.
Source: netlify/functions/chat.js ↗An external AI service receives your question and relevant profile information, then generates a reply.
The source documents Gemini through a server-side function. Profile guidance cannot guarantee factual answers.
Source: README.md ↗The answer appears as text you can read, whether or not you use voice or the character.
The browser keeps a chat transcript alongside optional audio playback.
Source: mascot.js ↗The reply can be read aloud. The mouth moves with the audio and text timing; the lip sync is approximate.
Audio energy and transcript timing drive smoothed facial targets. The result is not phoneme-perfect lip sync.
Source: README.md ↗Keep typing and reading when the microphone or 3D character is unavailable.
Microphone permission, browser support, WebGL and model loading can affect the optional experience.
Source: README.md ↗The optional 3D character moves while the reply is spoken. Its gestures blend as the conversation changes.
Authored gesture clips and facial targets are blended and smoothed. This original SVG puppet does not reuse the production identity model.
Source: movement.mjs ↗