{"slug": "mockmate-your-personal-voice-powered-ai-interview-partner", "title": "MockMate – Your Personal Voice-Powered AI Interview Partner", "summary": "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.", "body_md": "*This is a submission for the [Hacktoberfest Weekend Challenge: Build for a Friend](https://dev.to/challenges/hacktoberfest-weekend-2026-10-01)*\n\nI 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.\n\n`st.audio`).\nOpen-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.\n\n``` python\npython\nimport os\nimport streamlit as st\nimport requests\n\n# Page Config\nst.set_page_config(page_title=\"MockMate - AI Interview Partner\", page_icon=\"🎙️\", layout=\"centered\")\n\nst.title(\"🎙️ MockMate\")\nst.caption(\"Your personal, voice-powered AI interview coach. Built for a friend.\")\n\n# Sidebar for settings & API keys\nwith st.sidebar:\n    st.header(\"Configuration\")\n    target_role = st.text_input(\"Target Role\", \"Frontend Developer\")\n    job_desc = st.text_area(\"Paste Job Description\", \"Looking for a React developer with 3+ years experience...\")\n\n    # ElevenLabs configuration\n    elevenlabs_api_key = st.text_input(\"ElevenLabs API Key\", type=\"password\")\n    voice_id = st.text_input(\"ElevenLabs Voice ID\", \"21m00Tcm4TlvDq8ikWAM\") # Default Rachel voice\n\n# Initialize session state for conversation history\nif \"messages\" not in st.session_state:\n    st.session_state.messages = []\n\n# Function to generate ElevenLabs Audio\ndef text_to_speech(text, api_key, voice_id):\n    url = f\"[https://api.elevenlabs.io/v1/text-to-speech/](https://api.elevenlabs.io/v1/text-to-speech/){voice_id}\"\n    headers = {\n        \"Accept\": \"audio/mpeg\",\n        \"Content-Type\": \"application/json\",\n        \"xi-api-key\": api_key\n    }\n    data = {\n        \"text\": text,\n        \"model_id\": \"eleven_monolingual_v1\",\n        \"voice_settings\": {\"stability\": 0.5, \"similarity_boost\": 0.5}\n    }\n    response = requests.post(url, json=data, headers=headers)\n    if response.status_code == 200:\n        return response.content\n    return None\n\n# Start Interview Button\nif not st.session_state.messages:\n    if st.button(\"Start Mock Interview\"):\n        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?\"\n        st.session_state.messages.append({\"role\": \"assistant\", \"content\": initial_question})\n        st.rerun()\n\n# Display chat history\nfor message in st.session_state.messages:\n    with st.chat_message(message[\"role\"]):\n        st.write(message[\"content\"])\n        if message[\"role\"] == \"assistant\" and elevenlabs_api_key:\n            audio_bytes = text_to_speech(message[\"content\"], elevenlabs_api_key, voice_id)\n            if audio_bytes:\n                st.audio(audio_bytes, format=\"audio/mp3\")\n\n# User Input\nuser_input = st.chat_input(\"Type your answer here...\")\nif user_input:\n    st.session_state.messages.append({\"role\": \"user\", \"content\": user_input})\n    with st.chat_message(\"user\"):\n        st.write(user_input)\n\n    # Generate next mock interview question\n    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?\"\n\n    st.session_state.messages.append({\"role\": \"assistant\", \"content\": next_question})\n    with st.chat_message(\"assistant\"):\n        st.write(next_question)\n        if elevenlabs_api_key:\n            audio_bytes = text_to_speech(next_question, elevenlabs_api_key, voice_id)\n            if audio_bytes:\n                st.audio(audio_bytes, format=\"audio/mp3\")\n    st.rerun()\n```\n\n", "url": "https://wpnews.pro/news/mockmate-your-personal-voice-powered-ai-interview-partner", "canonical_source": "https://dev.to/xdzouyvhegps/mockmate-your-personal-voice-powered-ai-interview-partner-5ll", "published_at": "2026-10-08 03:39:33+00:00", "updated_at": "2026-10-08 03:46:57.216073+00:00", "lang": "en", "topics": ["ai-tools", "generative-ai", "developer-tools", "ai-products"], "entities": ["MockMate", "Streamlit", "ElevenLabs", "Hacktoberfest"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/mockmate-your-personal-voice-powered-ai-interview-partner", "markdown": "https://wpnews.pro/news/mockmate-your-personal-voice-powered-ai-interview-partner.md", "text": "https://wpnews.pro/news/mockmate-your-personal-voice-powered-ai-interview-partner.txt", "jsonld": "https://wpnews.pro/news/mockmate-your-personal-voice-powered-ai-interview-partner.jsonld"}}