In high school I was really socially anxious. Ordinary conversations, like asking a teacher for help or telling a friend no, felt impossible. On one experience, I really struggled with telling my boss that I wouldn't be able to hit a deadline. What actually helped was rehearsing them with my therapist: she'd play the other person, and I'd practice saying the words out loud until they felt less scary. But I only got that once a week, in her office.

SpeakEasy is the tool I wish I'd had between sessions. It's for anxious people who want to practice a hard conversation before it counts: say it out loud to a face that reacts, hear how it might go, and try the hard moment again. It's a practice tool, not therapy and not a replacement for it.

What it does

SpeakEasy is a FaceTime-style rehearsal space for people who get anxious about everyday conversations.

  1. Set it up. Sign in, pick one of four starter characters (Jordan the manager, Alex the roommate, Ellis the professor, Sam the classmate), or describe your own situation. The app drafts a fictional character from your words, and you can edit it before anyone speaks. You set a goal and, optionally, the line you'll say when it gets hard.
  2. Show me first. A stand-in plays your side and says your planned line while you play the other person, so you hear it once before you try it.
  3. Your call. A live video call with a talking AI character who reacts to what you say, holds back like a real person might, and can be interrupted. Calls are three minutes (five if you choose), and you can end any time.
  4. Recap and one retry. After the call there's a short recap you can skip. It asks whether you said your line. If not, you can try just that moment once more.
  5. People who grow with you. Save the character as a person and give them a starter's face and voice. Drag the About-me facts you choose into what that person knows about you. They know only what you share.

Each practice starts fresh. Private notes never reach the call. There's no score, and SpeakEasy keeps no recording or transcript.

How we built it

  • Next.js 16 App Router and TypeScript, deployed on Vercel at speakeasyapp.tech.
  • Live video: Tavus Conversational Video Interface over Daily WebRTC. Each starter has its own stock face and persona.
  • Voice: ElevenLabs text-to-speech on every Tavus persona, with one premade voice per starter and a separate stand-in voice for "Show me first." Voice previews also use ElevenLabs.
  • Setup and recap: OpenAI Responses with structured output, validated with Zod, and store: false.
  • Accounts and data: Supabase Auth and PostgreSQL with row-level security. Every read and write is checked against the signed-in owner, and saving a person or a shared fact is a version-checked transaction.
  • Privacy boundary: the character's context is built from an allowlist (role, traits, shared facts). Private notes and unshared facts aren't on that list. Provider ids and secrets stay on the server, and a build check confirms they're not in the client bundle.
  • Teardown: End, sign-out, expiry and closing the page release the microphone and stop media, even when the network is slow.
  • Testing: 792 unit tests, Playwright browser tests including a real-sign-in end-to-end path, SQL tests across two accounts, and CI on every pull request.

Challenges we ran into

  • Getting real talking video, not a static picture with audio. The call only goes live once the character's video is actually playing, and it ends cleanly if video never arrives.
  • Keeping the character in role. It reacts and pushes back, but it isn't an advice bot. Coaching stays in the recap.
  • Keeping private notes and unshared facts out of everything the character sees, and proving that with tests across two accounts.
  • Making End release the microphone every time, including when the server is slow to respond.

Accomplishments that we're proud of

  • A working live video call with a fictional character who talks back, built in one weekend by one person.
  • "Show me first" and "Try that moment once": you hear the line, try it, then retry the part you missed.
  • Per-person sharing you can see and control, with a keyboard alternative to drag and drop.
  • 792 automated tests, plus live calls on the deployed app the morning of submission.

What we learned

Rehearsal is the useful part, not feedback. A short recap and one retry did more than a long critique would have. Live video also needs careful state handling: ringing, connecting, live and ended each have to clean up after themselves.

What's next for SpeakEasy

  • Practice on your phone between classes.
  • More faces and voices, still stock only, with no voice cloning and no photos of real people.
  • Check-ins after the real conversation: "Did you have it? How did it go?"

What's next for SpeakEasy

Built With

Share this project:

Updates

Submission history