Project Info
Inspiration
With a variety of language learning resources out there, we set out to create a tool that can help us practice a part of language that keeps things flowing -- conversation! LanguaLine aims to empower users to speak their foreign language by helping them develop their conversational skills.
What it does
We wanted to create an interface that can help users practice speaking a foreign language. Through LanguaLine, users can: Select a language they wish to practice speaking in Select how "motivating" they want their Mentor to be (Basic is normal, Extra Motivation is a tough love approach). Enter their phone number and receive a phone call from our AI Mentor Answer questions posed by the Mentor Receive real-time feedback about their performance View a transcript and summary of the call after the conversation is completed View a generalized report on user's language strengths and weaknesses across all conversations
How we built it
We used React.js for our frontend, and Firebase for our database. To style our components, we utilized TailwindCSS and React MaterialUI. Our backend system is comprised of Node.js and Express.js, which we use to make calls to Google's Gemini model. To create, tune, and prompt engineer our AI Mentor, we used the VAPI.ai API. Our transcriber model is Deepgram's nova-2 multi and our model is gpt-4o-mini provided by Open.AI. We are also using Gemini to implement Retrieval-Augmented Generation (RAG). We use past call transcripts and summaries to train and optimize our model. This training data is maintained in our Firebase database. In addition, this feature analyzes users' call transcripts and generates a report identifying strengths and weaknesses in their speaking skills.
Challenges we ran into
Our biggest challenge was understanding the VAPI documentation, as it was our first time working with a voice AI API. We had to make a few changes to our project stack to accommodate for VAPI, as we could only make client-side API calls. Since the majority of our team has limited experience working with LLMs and voice AI Agents, we faced some difficulties prompt engineering our Mentor, requiring us to tweak various model parameters and experiment through VAPI's dashboard.
Accomplishments we're proud of
The turning point in our development process was when we were able to start conversing with our Mentor. After this was solidified, our project trajectory only went upwards. We're proud of the fact we were able to turn this idea into an operational and functional application.
What we learned
The team behind LanguaLine had a variety of skill levels; for some, this was their first project using this tech stack, while for others, this was familiar. Some of us mastered the ability to send API calls and parse JSON data. Some of us also learned how to prompt engineer for a particular language choice. There were lessons being learned all throughout the 36 hours of development, which helped us feel connected to the project and motivated to keep creating.
What's next
Our biggest goal is to deploy and market this project. Being language learners ourselves, having a service like LanguaLine is invaluable to making progress toward achieving fluency. In addition, this increases accessibility for language learners by encompassing a wide range of supported languages and providing customizable support. Our project aims to support all languages. Due to our lack of control regarding the accuracy across various languages within LLMs, this feature needs more testing and tuning to be perfected. We plan to offer more variation in the Mentors we offer. Right now, we only offer Mentors based off of a language choice and motivation level. In the future, we plan to include language difficulties, personalities, a wider variety of supported languages, custom prompts, and scheduled calling. We also plan to offer improvement plans for grammar, pronunciation, and vocabulary, as well as a scoring system for users' performances during Mentor sessions.
Callhacks 11.0 Project: LanguaLine
Team: Pari, David, Sriman, Anishka
Table number: 30
Inspiration
With a variety of language learning resources out there, we set out to create a tool that can help us practice a part of language that keeps things flowing -- conversation! LanguaLine aims to empower users to speak their foreign language by helping them develop their conversational skills.
What it does
We wanted to create an interface that can help users practice speaking a foreign language. Through LanguaLine, users can:
- Select a language they wish to practice speaking in
- Select how "motivating" they want their Mentor to be (Basic is normal, Extra Motivation is a tough love approach).
- Enter their phone number and receive a call from our AI Mentor
- Answer questions posed by the Mentor
- Receive real-time feedback about their performance and a generalized report on strengths and weakensses
- View a transcript and summary of the call after the conversation is completed
How we built it
We used React.js for our frontend, and Firebase for our database. To style our components, we utilized TailwindCSS and React MaterialUI.
To create, tune, and prompt engineer our AI Mentor, we used the VAPI.ai API. Our transcriber model is Deepgram's nova-2 multi and our model is gpt-4o-mini provided by Open.AI. Our Mentor's voice is Alloy, also provided by Open.AI.
We are also using Gemini to analyze users' call transcripts and generate a report identifying strengths and weaknesses in their speaking skills.
Challenges we ran into
Our biggest challenge was understanding the VAPI documentation, as it was our first time working with a voice AI API. We had to make a few changes to our project stack to accommodate for VAPI, as we could only make client-side API calls. unlike our original plan of using Express.js.
Since the majority of our team has limited experience working with LLMs and voice AI Agents, we faced some difficulties prompt engineering our Mentor, requiring us to tweak various model parameters and experiment through VAPI's dashboard.
Accomplishments that we're proud of
The turning point in our development process was when we were able to start conversing with our Mentor. After this was solidified, our project trajectory only went upwards. We're proud of the fact we were able to turn this idea into an operational and functional application.
What we learned
The team behind LanguaLine had a variety of skill levels; for some, this was their first project using this tech stack, while for others, this was familiar. Some of us mastered the ability to send API calls and parse JSON data. Some of us also learned how to prompt engineer for a particular language choice. There were lessons being learned all throughout the 36 hours of development, which helped us feel connected to the project and motivated to keep creating.
What's next for LanguaLine
We plan to offer more variation in the Mentors we offer. Right now, we only offer Mentors based off of a language choice and motivation level. In the future, we plan to include language difficulties, personalities, greater language support, custom prompts, and scheduled calling.
We also plan to offer improvement plans for grammar, pronunciation, and vocabulary, as well as a scoring system for users' performances during Mentor sessions.
Analysis
View
Metric
- 48
- 26
- 14
- 4
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
- ExpressIn code
- FirebaseIn code
- Google GeminiIn code
- HTMLIn code
- JavaScriptIn code
- ReactIn code
- Tailwind CSSIn code
- Node.jsClaimed
- OpenAIClaimed
8 of 10 appear in the indexed code. 2 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
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
43 KB
Source files
24
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
SrimanCode/CalHacks-11.0
41 files · 1.1 MB · @ 7bdf5e1
Structure
Interface
9 files · 22%Screens, components and styles rendered to the user.
Application logic
11 files · 27%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
- JavaScript77%
- Markdown16%
- HTML4%
- CSS4%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
calhacks11.0/package.json
npm · 20- @clerk/clerk-react
- @emotion/react
- @emotion/styled
- @fontsource/roboto
- @mui/material
- @testing-library/jest-dom
- @testing-library/react
- @testing-library/user-event
- axios
- dotenv
- firebase
- imask
- react
- react-dom
- react-imask
- react-router-dom
- react-script
- react-scripts
- +2 more
backend/package.json
npm · 6- @google/generative-ai
- @vapi-ai/web
- axios
- cors
- dotenv
- express
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
AI Mentor asks questions via VAPI/GPT-4o-mini/Deepgram nova-2Verified
Answer questions posed by the Mentor; built with VAPI, Deepgram nova-2 multi transcriber, gpt-4o-mini model, Alloy voice
Claimed on readmehigh confidencecalhacks11.0/src/Components/outboundcalls.js:101— Call payload configures transcriber (deepgram/nova-2/multi), model (openai/gpt-4o-mini), and voice (openai/alloy), matching the README's stack claims
Client-side-only VAPI calls (Express not used for VAPI due to VAPI constraint)Verified
Had to make client-side API calls to VAPI instead of routing through Express, unlike original plan
Claimed on readmehigh confidencecalhacks11.0/src/Components/outboundcalls.js:135— The VAPI call is made directly from frontend code via fetch, with no corresponding VAPI route in backend/server.js
Generalized report on strengths/weaknesses across all conversationsVerified
View a generalized report on user's language strengths and weaknesses across all conversations
Claimed on readmehigh confidencecalhacks11.0/src/progress.js:56— Progress page concatenates all of a user's stored transcripts and posts them to the backend /api/generate endpointbackend/server.js:16— /api/generate uses Gemini (gemini-1.5-flash) to analyze the combined transcript and return strongPoints/progressPoints JSONcalhacks11.0/src/Components/UserProgress.js:8— UserProgress component renders the strongPoints and progressPoints from the feedback response
Language selection for practiceVerified
Select a language they wish to practice speaking in
Claimed on readmehigh confidencecalhacks11.0/src/MainPage.js:112— A select dropdown lets the user choose Spanish, Mandarin, Portuguese, or User Choice, stored in `language` statecalhacks11.0/src/Components/outboundcalls.js:44— makeOutboundCall switches on the language value to set firstMessage/language name sent to VAPI
Motivation mode toggle (Basic vs Extra Motivation)Verified
Select how motivating they want their Mentor to be (Basic vs Extra Motivation)
Claimed on readmehigh confidencecalhacks11.0/src/MainPage.js:37— isMotivMode state toggled via SwitchLabels/ModeToggle, changes UI text and passed into makeOutboundCallcalhacks11.0/src/Components/outboundcalls.js:70— isMotivMode branches to a harsher 'tough love' systemMessageContent vs a cordial one
Node.js/Express backend for Gemini callsVerified
Backend system comprised of Node.js and Express.js, used to make calls to Google's Gemini model
Claimed on Devposthigh confidencebackend/server.js:9— Express app defined and used to call GoogleGenerativeAI's Gemini model in the /api/generate route
Phone number entry and outbound AI callVerified
Enter their phone number and receive a phone call from our AI Mentor
Claimed on readmehigh confidencecalhacks11.0/src/Components/PhoneInput.js— Phone number input component wired to handleSubmit in MainPagecalhacks11.0/src/Components/outboundcalls.js:135— makeOutboundCall POSTs to https://api.vapi.ai/call/phone with the customer's number to place a real VAPI phone call
React frontend, Firebase database, Tailwind/MUI stylingVerified
Built with React.js, Firebase, TailwindCSS, React MaterialUI
Claimed on readmehigh confidencecalhacks11.0/package.json— Lists react, firebase, tailwindcss, and @mui/material as dependenciescalhacks11.0/src/History.js:2— Imports MUI components (Box, Card, CircularProgress, etc.) and uses Tailwind utility classes
Transcript and summary view after callVerified
View a transcript and summary of the call after the conversation is completed
Claimed on readmehigh confidencecalhacks11.0/src/Components/outboundcalls.js:148— After the call ends, transcript and summary are fetched from VAPI and stored in Firestorecalhacks11.0/src/History.js:150— History page reads transcripts array from Firestore and renders both summary and transcript per call
RAG using past transcripts/summaries to train/optimize the modelCode-supported
Using Gemini to implement Retrieval-Augmented Generation (RAG); past call transcripts and summaries are used to train and optimize the model
Claimed on Devpostlow confidencecalhacks11.0/src/Components/outboundcalls.js:28— Past transcripts are fetched from Firestore and injected as plain text into the VAPI system prompt (transcriptHistory), which is prompt-stuffing/context-injection rather than an actual retrieval/embedding-based RAG pipeline; no vector store, embedding, or retrieval-ranking code exists
Real-time feedback during/after the callCode-supported
Receive real-time feedback about their performance
Claimed on readmelow confidencecalhacks11.0/src/Components/outboundcalls.js:82— The system prompt instructs the AI Mentor to tell the user in-conversation whether each answer is correct, which is the closest implementation to 'real-time feedback', but this is prompt-only behavior inside VAPI, not code-verifiable, and no separate real-time feedback UI/channel exists in the app code
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.