About the Project

Inspiration

While many apps exist to help users prepare for job interviews or career opportunities, most are based entirely on AI simulations or text-based prompts. I realized that while these tools are helpful, they don't build real human confidence or simulate the unpredictability and nuance of public speaking and face-to-face interaction.

There was a missing piece:
People—especially those without large networks or professional connections—need a space where they can practice speaking with others, feel heard, and get used to real-time, live interaction. That's when I thought:

What if we could combine the spontaneity of Omegle or Chatroulette with career networking and mock interviews?

So I built JobJam — a lightweight, anonymous video matchmaking app that connects users based on shared job interests, allowing them to practice, network, or simply jam about jobs in a human, accessible way.

The goal is to level the playing field for those who might not have access to mentors, mock interviews, or professional feedback.


What I Learned

This project deepened my understanding of AI-driven recommendation systems and real-time communications. Specifically:

  • Working with Hugging Face models for natural language embeddings
  • Applying cosine similarity to match semantically similar text
  • Structuring and listening to Firestore documents in real-time
  • Managing anonymous user sessions with Firebase Auth
  • Handling video streams and call states via Agora SDK
  • Making ethical and design decisions around accessibility and data privacy

How I Built It

Tech Stack

  • Frontend: SwiftUI (iOS)
  • Backend: Firebase Firestore
  • Authentication: Firebase Anonymous Auth
  • AI Matching: Hugging Face Inference API (intfloat/e5-large-v2)
  • Video Calling: Agora SDK with a Render-deployed token server

How Matching Works (with Math)

JobJam uses semantic similarity to connect users based on the job descriptions they submit.

  1. A user enters a sentence like: "Looking for a creative internship in UX design."

  2. That text is sent to the Hugging Face inference API using the intfloat/e5-large-v2 model, which transforms it into a high-dimensional vector:

$$\vec{u} \in \mathbb{R}^{d}$$

  1. The app pulls other users' embeddings from Firestore and compares them using cosine similarity:

$$\text{cosine_sim}(\vec{u}, \vec{v}) = \frac{\vec{u} \cdot \vec{v}}{|\vec{u}| \cdot |\vec{v}|}$$

Where:

  • $\vec{u}$ is the current user's embedding
  • $\vec{v}$ is another user's embedding
  • $\cdot$ is the dot product
  • $|\vec{u}|$, $|\vec{v}|$ are vector magnitudes
  1. A threshold is applied (e.g., 0.75), and if a match is found, a video call session is created.

  2. Users are connected live using Agora, with the ability to mute, turn off video, or end the call.


Example Match Case

  • User A: "Looking to get practice in IT job interviews"
  • User B: "Want help with mock interviews for technical support roles"

The embeddings are compared:

$$\text{cosine_sim}(\vec{u}, \vec{v}) = 0.81 \Rightarrow \text{Match}$$


Challenges Faced

  • Unpredictable Inputs: Users often typed vague or short phrases. I added UX prompts to guide them toward more specific descriptions.
  • Embedding Delays: Using the Hugging Face inference endpoint introduced latency. I handled this with async loading states and retry logic.
  • Real-Time Race Conditions: I had to manage concurrency carefully in Firestore to avoid double-matching or ghost sessions.
  • Cross-Device Video Testing: Ensuring camera/mic compatibility across devices using Agora SDK took many debugging sessions and user feedback loops.

Outcome

JobJam is a working proof of concept for human-centered, AI-assisted job training and networking. It bridges the gap between practice and people—helping users build confidence, communication skills, and community without needing résumés or corporate connections.

It's fast. It's live. It's real.
And it's built to be inclusive for everyone.

Built With

Share this project:

Updates