MockMate – Your Personal Voice-Powered AI Interview Partner A developer built MockMate, a voice-powered mock interview partner using Streamlit and the ElevenLabs text-to-speech API, designed to help a friend practice for technical and behavioral interviews. The app reads interview questions aloud, maintains a conversational session history, and accepts typed answers to simulate a live hiring manager. The developer argues that open-source frameworks and open APIs let builders decouple interfaces from proprietary vendors and retain control over sensitive data pipelines. This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend https://dev.to/challenges/hacktoberfest-weekend-2026-10-01 I built MockMate , a voice-powered mock interview partner designed for a close friend who gets severe interview anxiety during technical and behavioral rounds. It simulates a live hiring manager, reads interview questions out loud using natural voice synthesis, and guides them through a realistic conversational feedback loop to help them practice speaking their answers aloud. st.audio . Open-source frameworks and open APIs allow developers to completely decouple user interfaces from proprietary vendors. For an application handling sensitive career data like targeted job descriptions, past employment backgrounds, and vulnerable mock interview answers, utilizing flexible cloud runtimes and open modular tooling ensures that developers retain full control over data pathways, audio pipelines, and model customizations without vendor lock-in. python python import os import streamlit as st import requests Page Config st.set page config page title="MockMate - AI Interview Partner", page icon="🎙️", layout="centered" st.title "🎙️ MockMate" st.caption "Your personal, voice-powered AI interview coach. Built for a friend." Sidebar for settings & API keys with st.sidebar: st.header "Configuration" target role = st.text input "Target Role", "Frontend Developer" job desc = st.text area "Paste Job Description", "Looking for a React developer with 3+ years experience..." ElevenLabs configuration elevenlabs api key = st.text input "ElevenLabs API Key", type="password" voice id = st.text input "ElevenLabs Voice ID", "21m00Tcm4TlvDq8ikWAM" Default Rachel voice Initialize session state for conversation history if "messages" not in st.session state: st.session state.messages = Function to generate ElevenLabs Audio def text to speech text, api key, voice id : url = f" https://api.elevenlabs.io/v1/text-to-speech/ https://api.elevenlabs.io/v1/text-to-speech/ {voice id}" headers = { "Accept": "audio/mpeg", "Content-Type": "application/json", "xi-api-key": api key } data = { "text": text, "model id": "eleven monolingual v1", "voice settings": {"stability": 0.5, "similarity boost": 0.5} } response = requests.post url, json=data, headers=headers if response.status code == 200: return response.content return None Start Interview Button if not st.session state.messages: if st.button "Start Mock Interview" : initial question = f"Hello Let's start your mock interview for the {target role} position. To kick things off, can you tell me about yourself and your relevant experience?" st.session state.messages.append {"role": "assistant", "content": initial question} st.rerun Display chat history for message in st.session state.messages: with st.chat message message "role" : st.write message "content" if message "role" == "assistant" and elevenlabs api key: audio bytes = text to speech message "content" , elevenlabs api key, voice id if audio bytes: st.audio audio bytes, format="audio/mp3" User Input user input = st.chat input "Type your answer here..." if user input: st.session state.messages.append {"role": "user", "content": user input} with st.chat message "user" : st.write user input Generate next mock interview question next question = f"Thank you for that answer. Based on the job description for {target role}, how do you handle debugging complex performance issues under a tight deadline?" st.session state.messages.append {"role": "assistant", "content": next question} with st.chat message "assistant" : st.write next question if elevenlabs api key: audio bytes = text to speech next question, elevenlabs api key, voice id if audio bytes: st.audio audio bytes, format="audio/mp3" st.rerun