About the Project

My Inspiration: Bridging the Confidence Gap

The interview process is a daunting experience for many job seekers. Not only for fresh graduates seeking their first full-time position, but for college students looking for their very first internship, there are very few chances for them to practice and get feedback on their performance. From my own experience, I was deeply inspired by the struggle to find truly effective, personalized, and affordable interview practice. Traditional mock interviews are often expensive, or lack the data-driven feedback needed to actually improve. I developed this solution with the hope that anyonee, regadless of their background or budget, could land their dream job.

What I Learned: A Deep Understanding of Cloud-Native AI

This hackathon was an incredible learning opportunity, pushing me to explore the frontiers of cloud-native AI. I gained invaluable hands-on experience with:

  • AWS Generative AI: Understanding the power of Amazon Bedrock for dynamic content generation, ranging from generating adaptive interview questions based on unique JDs and resumes, to analyzing answers and generating detailed feedback. This experience helped me improve my skill in prompt engineering and AI orchestration.
  • Real-time Voice Processing: Integrating Amazon Transcribe for real-time and accurate speech-to-text conversion was crucial to this project. On the other hand, I found this part very difficult since the accuracy was not consistent all the time.
  • Serverless Architecture: Building a backend with Firebase Cloud Functions taught me about efficient request handling, managing file streams, and the intricacies of serverless deployment and scaling.
  • Debugging & Deployment in the Cloud: Navigating complex deployment pipelines, understanding Cloud Run container health checks, and debugging runtime errors in distributed environments was a steep but rewarding learning curve.

How We Built It

  • Frontend (React): We engineered an intuitive and user-friendly interface using React. Users upload their Job Description and Resume, select their desired interview type, and interact with the AI. Our frontend handles file selection and FormData submission to the backend.
  • Backend (Firebase Cloud Functions / Node.js): This acts as the intelligent orchestrator. It receives raw file uploads (using busboy to parse multipart/form-data), securely stores them in Firebase Storage, and initiates the AI processing pipeline. It manages user data and interview sessions using Firebase Firestore.
  • AI Core (AWS Generative AI Services):
    • Amazon Transcribe: Powers the real-time speech-to-text conversion of user answers during the interview.
    • Amazon Bedrock: It dynamically generates relevant, adaptive interview questions by analyzing the uploaded JD and Resume. Post-interview, it analyzes the user's transcribed answers (checking for STAR structure, relevance, and clarity) and generates comprehensive content feedback and insightful sample answers.

Challenges I Faced: Embracing the Struggle

My journey was not without its trials, and overcoming these challenges was integral to my learning:

  • CORS Issues: One of my biggest struggles was to resolve CORS issues, which was my first time I encountered this definition and error. This occurred during production deployment since the frontend was initially using hardcoded environment variables pointing to the old (local) API URLs and the uploadDocument function lacked proper CORS middleware implementation.
  • Integrating AWS Transcribe: This part took me almost two days to integrate, evaluate, and test. I encountered audio format and encoding issues where I had to trace back the code and figure out which type it should work. Another struggle was how the AWS Transcribe received no audio although I spoke loudly or used Google Translate to speak more loudly. It turned out I did not allow the microphone on the website. To resolve this, I used to switch to another service to transcribe speech to text. It took me a quiet long time to implement that service, but it did not work well at all. Thus, I had to switch back to AWS Transcribe, which worked much better.
Share this project:

Updates