Project Info
This project did not submit a demo video on Devpost.
Inspiration
Impromptu speaking is a critical skill in many areas of life, from high-pressure job interviews to persuading clients or defending arguments in live debates. Despite its importance, practicing impromptu speaking is notoriously difficult. The most effective way to improve is through real verbal conversations, but finding people to practice with who can also provide valuable critiques is rarely convenient or feasible.
What it does
Impromptu leverages speech-to-speech technology to help users practice thinking and speaking on the spot. The app starts by presenting a debate topic or question related to real-world challenges, prompting users to create an initial argument. Users have a limited time to jot down notes for their speech, and if they need inspiration, our Gemini-powered assistant offers alternative perspectives or questions to consider. Once preparation is complete, users enter a virtual room with three different AI critics, each possessing unique voices and personalities. Users present their prepared speech, and afterward, they engage in a live debate with the critics, answering questions and defending their arguments. Impromptu goes beyond traditional speaking practice by offering dynamic, real-time feedback from intelligent models, helping users refine their ability to form persuasive arguments on the spot and think quickly under pressure.
How we built it
The app’s debate topics are generated by Google’s Gemini API, ensuring high-quality prompts using in-context learning. The Gemini-powered assistant also aids users in brainstorming ideas. Once a user presents their speech, Groq’s Whisper Large V3 Turbo transcribes it to text. For the debate portion, we use the VAPI API to set up speech-to-speech interactions with three distinct AI critics. Each model challenges key ideas, encouraging the user to strengthen their arguments quickly. The entire web app runs on Next.js with Tailwind CSS for seamless user experience and design.
Challenges we ran into
One of the biggest hurdles we encountered was coordinating a smooth conversation between multiple AI voice models and the user. Establishing a one-on-one conversation through the VAPI API was straightforward, but handling simultaneous interactions between the user and multiple critics was challenging. Voice overlap and inconsistent responses were common issues. To solve this, we implemented a system where each model received the entire conversation history, including the transcription of the user’s speech, ensuring consistency in critiques without voice conflicts. Another challenge was optimizing the models' feedback quality, especially during the initial speech when interruptions could disrupt the user’s flow. To mitigate this, we used transcription to capture the speech-to-text conversion, providing the models with a coherent basis for their responses during the live conversation. Additionally, we worked to convert audio packets to transcribed text using the computer's microphone, integrating it smoothly into the app’s interface.
Accomplishments we're proud of
We are proud of successfully integrating multiple AI assistants to provide users with varied and constructive feedback based on their speech. Implementing a working timer and audio recording system was another highlight, ensuring that users' timing requests and speeches were captured accurately. Additionally, we created an intuitive landing page that allows users to learn more about our product and dive straight into practice.
What we learned
This project taught us how to integrate various APIs into a cohesive, functional system. We gained hands-on experience with VAPI, Deepgram, Groq, and Gemini, expanding our knowledge of state-of-the-art AI tools. On the non-technical side, we improved our ability to divide and conquer complex problems, enhancing team collaboration.
What's next
Looking ahead, we plan to introduce several new features, such as customizable levels of critique from the AI assistants, a leaderboard to foster competitiveness and encourage daily practice, and the option to generate article links for users seeking research guidance on debate topics.
This is a Next.js project bootstrapped with create-next-app.
Getting Started
First, run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
Open http://localhost:3000 with your browser to see the result.
You can start editing the page by modifying app/page.js. The page auto-updates as you edit the file.
This project uses next/font to automatically optimize and load Inter, a custom Google Font.
Learn More
To learn more about Next.js, take a look at the following resources:
- Next.js Documentation - learn about Next.js features and API.
- Learn Next.js - an interactive Next.js tutorial.
You can check out the Next.js GitHub repository - your feedback and contributions are welcome!
Deploy on Vercel
The easiest way to deploy your Next.js app is to use the Vercel Platform from the creators of Next.js.
Check out our Next.js deployment documentation for more details.
Analysis
View
Metric
- 14
- 10
- 4
- 1
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- Google GeminiIn code
- JavaScriptIn code
- LangChainIn code
- Next.jsIn code
- OpenAIIn code
- PythonIn code
- ReactIn code
- Tailwind CSSIn code
9 of 9 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
54 KB
Source files
29
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
Nazarshia2889/Impromptu
47 files · 3.3 MB · @ c6600c6
Structure
Interface
19 files · 40%Screens, components and styles rendered to the user.
+3 moreApplication logic
7 files · 15%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- JavaScript83%
- Python10%
- CSS5%
- Markdown2%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 27- @deepgram/sdk
- @google/generative-ai
- @langchain/core
- @langchain/groq
- @langchain/langgraph
- @openai/realtime-api-beta
- @vapi-ai/web
- axios
- crypto-js
- dotenv
- groq-sdk
- next
- openai
- react
- react-dom
- react-slick
- slick-carousel
- uuid
- +9 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
Feature verification
Audio recording of the user's speechVerified
Converting audio packets to transcribed text using the computer's microphone, integrated into the app's interface
Claimed on Devposthigh confidenceutils/recordingHandlers.js:1— startMicrophoneStream uses getUserMedia and MediaRecorder to capture mic audio into a Blob/File, then triggers transcription
Configurable prep/speaking timingVerified
Implementing a working timer and audio recording system, ensuring that users' timing requests and speeches were captured accurately
Claimed on Devposthigh confidencecomponents/topic/TimingSection.js:4— TimingSection lets the user input prepTime and speakingTime, stored to localStorage and used by Timer components downstream
Gemini-powered brainstorming assistant during prepVerified
A Gemini-powered assistant offers alternative perspectives or questions while the user takes notes
Claimed on Devposthigh confidenceutils/noteSuggestion.js:15— getSuggestionsFromGemini calls Gemini's generateContent with a notes-suggestion promptcomponents/notes/Suggestions.js:8— Suggestions component calls getSuggestionsFromGemini and renders returned suggestions on the notes page
Intuitive landing page introducing the productVerified
We created an intuitive landing page that allows users to learn more about our product and dive straight into practice
Claimed on Devposthigh confidenceapp/home/page.js:8— LandingPage renders hero copy, a feature carousel, and a 'Get Started Now' button routing into the app
Next.js + Tailwind CSS web appVerified
The entire web app runs on Next.js with Tailwind CSS
Claimed on Devposthigh confidencepackage.json:23— next and tailwindcss are declared dependenciestailwind.config.js:1— Tailwind config present and Tailwind utility classes used throughout app/ and components/
next/font Inter font optimization (from create-next-app boilerplate)Verified
This project uses next/font to automatically optimize and load Inter, a custom Google Font
Claimed on readmehigh confidenceapp/judge/page.js:4— Imports Inter from next/font/google and applies inter.className to the page container
OpenAI text-to-speech for judge voiceVerified
Speech-to-speech technology / distinct AI critic voices
Claimed on Devposthigh confidenceutils/apiUtils.js:57— generateSpeech calls openai.audio.speech.create with the 'tts-1' model and 'alloy' voice, and the resulting buffer is played back in the browserutils/audioHandlers.js:22— getAndPlayAudio wires generateSpeech output into playAudioBrowser
Post-speech scoring/evaluation summaryVerified
Dynamic, real-time feedback from intelligent models, helping users refine their ability to form persuasive arguments (final evaluation)
Claimed on Devposthigh confidenceapp/score/page.js:39— Score page sends the topic and transcript history to Groq with a structured tool-call schema (groqStructureToolsParameters) and renders per-category scores/justificationsutils/prompt.js:8— getScorePrompt defines the multi-criteria evaluation rubric (filler words, relevance, evidence, creativity, overall)
Timed speech preparation with notesVerified
Users have a limited time to jot down notes for their speech
Claimed on Devposthigh confidenceapp/notes/page.js:46— NotesPage renders a Timer bound to prepTime and a NotesEditor; handleTimerEnd saves notes and routes to /judge when time expirescomponents/ui/Timer.js:3— Timer implements a working countdown with onTimerEnd callback
Gemini-generated debate topics/questionsCode-supported
The app's debate topics are generated by Google's Gemini API using in-context learning
Claimed on Devpostmedium confidencescripts/generate_topic.py:122— A standalone Python script calls Gemini (gemini-1.5-flash) to generate a debate question with an in-context example listcomponents/topic/TopicSection.js:12— The actual Next.js UI's handleGenerateTopic instead randomly selects a topic from the static local data/questions.js list; the Gemini script is not invoked from the web app
Live debate / real-time feedback loop with AI judge(s)Code-supported
After presenting a speech, the user engages in a live debate answering questions from AI critics with dynamic real-time feedback
Claimed on Devpostmedium confidenceutils/recordingHandlers.js:32— getResponse pushes user text and Groq's reply into a shared history and triggers TTS playback, forming a single back-and-forth loopcomponents/recording/JudgesFeedback.js:1— Only one hardcoded judge ('Wayne Shaw') is rendered in a 3-column grid; no second or third critic exists in this component
Speech transcription via Groq WhisperCode-supported
Groq's Whisper Large V3 Turbo transcribes the user's speech to text
Claimed on Devpostmedium confidenceutils/apiUtils.js:23— transcribeAudio calls transcribeGroq.audio.transcriptions.create, but model is set to 'distil-whisper-large-v3-en', not 'whisper-large-v3-turbo' as claimedutils/recordingHandlers.js:1— startMicrophoneStream records mic audio and passes the file into the transcription pipeline via handleTranscribeAudioFn
Deepgram integrationClaimed only
We gained hands-on experience with VAPI, Deepgram, Groq, and Gemini
Claimed on Devposthigh confidenceThree AI critics with unique voices/personalities via VAPI speech-to-speechClaimed only
Users enter a virtual room with three different AI critics, each with unique voices and personalities, via VAPI speech-to-speech interactions
Claimed on Devposthigh confidence
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.