Inspiration

We're college juniors, and a few weeks ago we were doing what every college junior does around this time of year — stressing about housing. Apartments near campus were filling up fast, and we were talking about whether to renew our current leases or try to find something better.

That's when one of us said, "I'm terrible at negotiating — I just accept whatever the landlord says." And the other one laughed because... same.

But then we thought about it more seriously. Negotiation isn't something they teach you in school, yet it shows up in some of the most important financial moments of your life — your rent, your first salary, buying a car. Most people walk into these conversations completely unprepared, and they leave money on the table because of it.

We started wondering: what if you could have an expert watching the conversation in real time, passing you notes? Not a prep tool you study the night before and forget. Something that's right there with you, reading the room, catching tactics you'd miss, and telling you what to say next.

That's NegotiateIQ — a silent AI coach that listens to your live negotiation through your device mic and shows tactical coaching cards on screen as the conversation unfolds.

What it does

You open the web app, pick your scenario (rent, salary, or custom), and optionally describe your situation. Then you start your negotiation — phone call on speaker, video call, in-person meeting, whatever — with the app open on a device nearby. NegotiateIQ listens through the mic and analyzes the conversation using Google's Gemini Live API. When it detects something important — a manipulation tactic, a key number, a moment where you should stay silent — it surfaces a short coaching card on your screen. Cards like:

ANCHORING DETECTED — "They opened high at $1,900 to shift your frame of reference." COUNTER THEIR OFFER — "Propose $1,700 and cite your 3-year rental history." PAUSE HERE — "Let the silence work. They may come down further."

Cards appear one at a time, stay for 15 seconds, and fade out so they never clutter your screen. When you're done, you get a full summary — tactics detected, offers tracked, and a reconstructed dialogue of the entire conversation.

How we built it

We started by mapping out the full architecture and user flow together, using Claude as a brainstorming partner to think through the tradeoffs — ambient mic capture vs. call interception, coaching cards vs. voice coaching, single vs. dual analysis paths. The architectural decisions were ours, but having an AI to pressure-test ideas and catch blind spots accelerated the planning phase significantly.

For the frontend, we used Claude Code as a development accelerator. We'd written a detailed neo-brutalism design system spec, page layout descriptions, animation libraries, and Claude Code translated those into working Next.js components. We directed every design decision — the color palette, the 3-slot card system, the priority replacement logic, the animation timing — and Claude Code helped us scaffold it to iterate on. The backend we built more hands-on, using Claude Code primarily for integration guidance — figuring out the Gemini Live API's session lifecycle quirks, understanding and getting the AudioWorklet PCM conversion right, and debugging the async WebSocket pipeline. The core architecture (dual analysis paths, rate-limited card queue, dialogue reconstruction, prompts for the API) came from our own design work. The backend is a Python FastAPI server running two parallel analysis paths: Path 1 uses the Gemini Live API with the native audio model (gemini-2.5-flash-native-audio-latest). Raw PCM audio from the browser mic streams over a WebSocket to our backend, which forwards it directly to Gemini. This path catches things that text alone can't — tone of voice, hesitation, pressure in someone's delivery. Path 2 runs simultaneously using the browser's built-in SpeechRecognition API to transcribe speech to text, which gets sent to Gemini's text model (gemini-2.5-flash) for analysis. This provides continuous coverage during the brief moments when the Live API session reconnects between responses, and it's more precise for catching specific numbers and offers. Both paths feed coaching cards into an async queue with a 5-second rate limit, so the user gets a steady, non-overwhelming stream of insights. Audio capture required disabling the browser's echo cancellation, noise suppression, and auto gain control, which was counterintuitive, but necessary - when someone holds their phone on speaker during a negotiation, the audio processing features actually filter out the other person's voice as noise. We deployed the backend on Google Cloud Run with the API key stored in Secret Manager for better security, and the frontend on Vercel.

Challenges we ran into

The Gemini Live API session lifecycle was the biggest hurdle. The Live API drops the session after each model response, which means if you're trying to continuously listen to a conversation, you have gaps. We solved this with the dual-path architecture — the text analysis path covers the gaps while the Live API reconnects. Getting the card cadence right took real iteration. Too fast (every 2-3 seconds) and the user can't keep up with the conversation and read cards. Too slow (every 10+ seconds) and the coaching arrives after the moment has passed. We landed on 5 seconds as the minimum interval between cards. Cloud Run deployment required resolving a chain of permission issues on a fresh GCP project — billing, Compute Engine API, Storage permissions, Artifact Registry access — each blocking deployment at a different step. We eventually simplified our deploy script to use gcloud run deploy --source . which handles the entire build-push-deploy pipeline in one command. Browser audio format was a subtle challenge. The browser captures Float32 audio, but Gemini expects 16-bit signed PCM at 16kHz. We wrote an AudioWorklet processor that runs the conversion on a dedicated audio thread so it doesn't block the main UI thread.

Accomplishments that we're proud of

The hybrid audio pipeline is genuinely novel — running two complementary AI analysis paths simultaneously to provide continuous, multi-dimensional coaching. The Live API catches emotional cues and tone; the text path catches exact numbers and offers. Together they cover each other's blind spots. The 3-slot priority card system solved a real UX problem. During a live conversation, you can't scroll through a list of notifications. Three fixed slots with priority replacement means the most important insight is always visible, and the display never shifts or scrolls. Building a demo mode that mirrors the entire app experience with keyboard-triggered scripted cards was a smart investment — it guaranteed a smooth hackathon recording regardless of network conditions or mic issues. And honestly, we're proud that two juniors with limited backend experience shipped a working real-time audio pipeline to Google Cloud in under a week.

What we learned

The Gemini Live API is powerful but has real quirks — session drops after each response, the need to explicitly tell the model "the user cannot hear you," and the importance of separating analysis (Live API) from formatting (text model). Prompt engineering is iterating, not writing. Our system prompts went through dozens of revisions to minimize hallucinated card types and get consistent JSON output. Server-side rate limiting is essential for any real-time coaching UX — you can't trust the AI to self-regulate its output frequency. Disabling browser audio processing (echo cancellation, noise suppression) is critical for ambient audio capture use cases. The defaults are designed for voice calls, not for capturing a room.

What's next for NegotiateIQ

Multi-language support, session history with improvement tracking, a native mobile app with always-on mic access, and a pre-negotiation prep mode that analyzes the counterparty's likely tactics before you even start.

Built With

  • audioworklet
  • docker
  • fastapi
  • framermotion
  • gemini2.5flash
  • geminiliveapi
  • googlecloudbuild
  • googlecloudrun
  • googlecloudsecretmanager
  • googlegenaisdk
  • lucide-react
  • next.js
  • python
  • react
  • tailwindcss
  • typescript
  • vercel
  • webaudioapi
  • websocket
  • webspeechapi(speechrecognition)
Share this project:

Updates

Submission history