InterviewCoach: five questions, honest feedback, and an interviewer who looks you in the eye
By Tomasz Hasinski, Brainiak Consulting, working with the Perxona team on the Connect Kit
Most interview-practice apps are a text box with a timer. You type, a model grades, you read the result. Nothing about it feels like the thing you are practising for, which is sitting across from a person who reacts to what you say.
InterviewCoach fixes that one thing. Pick a role and a language. Mia, a 3D hiring manager, asks five questions one at a time, reacts to each answer, scores it, and ends with a report. English, 日本語 and 繁體中文. I built it in about 18 minutes on the Perxona Connect Kit, with an AI coding agent and nothing but the kit's own repository and the public handbook. It now ships inside the kit as one of its samples, and Mia is the face you see in the kit's README.
This is the second post in our short series on Connect Kit projects that are ready to become real products. Maker, the event concierge, was first. InterviewCoach is second because it is the clearest case of a product where the avatar is not decoration. The face is the product.

Image 2: the loop, from picking a role to the report
What a session looks like
You choose one of four roles: junior marketing, frontend developer, hotel front desk or customer support. You choose a language. Mia greets you and asks question one.
You answer by typing, or by voice where the browser supports it. Mia replies with one or two sentences of feedback, specific and honest, then asks the next question. A small line under the chat shows the score for the answer you just gave, from 1 to 5. After the fifth answer she closes the interview and you get a report: every question, your answer, her feedback, the score, the average, and how long you took. A good interview ends with a celebration gesture. An average one ends with a thank-you.
When we ran it, a deliberately weak answer ("I don't really know, I guess I would just post more often and hope it works") got a 2 out of 5 with kind, specific feedback. The hotel role produced a missing-reservation scenario, the support role an abusive-customer scenario, and the Japanese keigo and Taiwan Mandarin wording read naturally.
The one design decision that matters
The model only scores. The app decides the face.
Every answer's score maps to an emotion and an intensity, and the app passes both to the avatar together with the text she should speak:
5 → excitement, high
4 → joy
3 → caring
2 → curiosity
1 → disappointment, low
In code this is a single call: present(text, { emotion, intensity }). The language model is never asked to act. It is asked for a compact JSON object: feedback, score, next question, done. The app parses it, keeps score itself, and chooses the performance.
This matters for anyone building a training product. You want the emotional response to be yours: consistent, tunable, and the same for every user. A customer-service drill needs an avatar that cools down as the trainee gets worse. A language-practice app needs one that stays warm whatever happens. If the model decided the face, you would be prompting your way towards consistency and never quite arriving.

Image 3: score to emotion, the app decides the face
What it uses from the Connect Kit
For developers: three files, about 250 lines, no dependencies, no build step. It was scaffolded from the kit's Embed demo, exactly the way the kit's AGENTS.md tells coding agents to do it.
A purpose-built chatbot created from code. On first run the app creates a Connect chatbot through POST /api/chatbots, instructed to answer only in that JSON shape. It is created once per account and reused.
present(text, { emotion, intensity }) for every spoken line.
Per-language voice re-targeting. At Start the app calls initializeWithConnectKey a second time with the voice for the chosen language, so the same avatar interviews in three languages without a page reload.
playMotion() for the closing gesture, celebration or gratitude depending on the average.
PRESENTER_STATUS to hold the Start button until Mia is ready, and PERFORMANCE_START to time the gap between sending an answer and hearing the reply.
The Connect API's /api/credit endpoint, so the app can show what a session costs.
That last item appears as a small dev-stats footer: turns, median model latency, median send-to-voice latency, credits used. It is there because a builder choosing a stack wants those numbers before anything else.
The numbers, measured
Measured on 24 October 2026 on a stock clone of the kit and a free trial account, three interviews in three languages:
11 turns, and the hosted model returned valid JSON on every one. Zero console errors.
Model reply: 1.4 to 1.9 seconds median, depending on the language.
From sending an answer to hearing Mia speak: 3.2 to 4.3 seconds median.
Build time: 18 minutes from an empty folder to a working three-language product.
Four seconds is comfortable for practice, where you have just finished speaking and expect a moment's pause before the reply. It is the rhythm of an interview, not of a chat.

Image 4: the numbers measured on 24 October 2026
Where this can go
InterviewCoach is a demo with a product-shaped landing page. The shape is already clear, and it fits groups that pay for practice today.
Career centres and job-hunting season. In Japan, 就活 interview practice is a yearly ritual, and universities, cram schools and career coaches still run mock interviews one student at a time. A coach who is available at midnight, in the student's language, and never tired, is the job they want done at scale.
Language schools and eikaiwa. The same five-question loop works for English interview practice with feedback in the learner's own language. Switch the voice, keep the face.
HR and onboarding teams. Swap the persona and the role list, and the hotel front-desk and customer-support scenarios become drills for new hires, with the avatar's mood tracking how well the trainee handled the customer.
Recruitment platforms. A practice room inside a job board, branded, with the report as the reason to come back.
What would take it from demo to product is all app-level work: accounts and saved reports, a role library with a rubric per role, a trainer's view across a cohort, and a per-session price that the credit meter already makes easy to work out. None of it touches the avatar. That part is done, and it is the part that makes someone sit up straight before they answer.

Image 5: a live session, question 2 of 5, score 5/5 shown under the chat
Try it, fork it, build your own
Read the code: github.com/XRSPACE-Inc/perxona-connect-kit, under samples/express/public/demos/interview. Apache 2.0.
Run it: clone the kit, add two Connect keys, npm run dev, open /demos/interview/. Or press the Deploy with Vercel button in the README and have your own copy online in a few minutes.
Get your keys: console.perxona.ai. A free trial is available.
If you build a practice product on this, tell us in the kit's GitHub Discussions. Interview coaching is the obvious first one. Customer-service drills, exam prep and language practice are the same loop with a different persona.
