## Inspiration

Networking events are powerful — but we forget 80% of the people we meet. Business cards get lost, names fade, and valuable connections disappear. We asked: what if your phone could listen to your conversations and automatically build your professional network?

## What it does

ContactGraph is an AI-powered smart contact book that listens to real conversations at networking events and automatically:

  • Transcribes audio with speaker diarization (knows who said what)
  • Extracts contacts: names, companies, roles, emails, LinkedIn URLs
  • Enriches each profile by searching the web for professional information
  • Maps relationships — cofounders, coworkers, people who met at the same event
  • Visualizes your network as an interactive graph with filterable dimensions

Open the app on your iPhone, tap record, and have a conversation. In 60 seconds, ContactGraph transforms audio into a rich, searchable contact book with a relationship graph.

## How we built it

  • Next.js 16 on Vercel — full-stack app with API routes
  • Vercel AI SDK v6 — structured data extraction with generateText + Output.object
  • OpenRouter (GPT-4.1-mini) — LLM for entity extraction, relationship inference, and profile enrichment
  • AssemblyAI — speech-to-text with speaker diarization (universal-3-pro)
  • Tavily — web search API for contact enrichment (LinkedIn profiles, bios)
  • Neon Postgres (Vercel Marketplace) — database with pg_trgm for fuzzy name matching
  • Vercel Workflow SDK — durable pipeline architecture
  • react-force-graph-2d — interactive relationship graph visualization
  • shadcn/ui + Tailwind — mobile-first dark theme UI
  • ElevenLabs — generated test conversation audio and demo voiceover
  • v0 — rapid UI prototyping for the frontend

## Architecture

iPhone (PWA) → Record audio → AssemblyAI (speaker diarization) → Vercel API Route (save transcript) → AI Pipeline: Step 1: LLM extracts entities (people, companies, roles) Step 2: Fuzzy-match & merge contacts in Postgres Step 3: Web search enrichment (Tavily → LLM) Step 4: LLM infers relationships Step 5: Link everything in DB → Frontend: Contact list + Relationship graph

## Challenges we faced

  • Speaker diarization accuracy — AssemblyAI's universal-3-pro model handles this well, but getting the right API parameters took iteration
  • Enrichment quality — LLMs tend to fabricate LinkedIn URLs. We solved this by passing real search result URLs to the LLM and explicitly instructing it to never guess
  • Serverless background processing — Vercel Functions terminate after responding. We used next/server after() to keep the pipeline running
  • Fuzzy name matching — People's names get transcribed slightly wrong. PostgreSQL's pg_trgm extension with similarity scoring handles this gracefully

## What we learned

  • Vercel AI SDK v6's Output.object with Zod schemas is incredibly powerful for structured extraction
  • after() from Next.js is essential for background work on serverless
  • Building with multiple AI services (AssemblyAI + LLM + Tavily) in a pipeline requires careful error handling per step
  • v0 is great for rapid UI prototyping that integrates with real backends

## What's next

  • Real-time streaming transcription (AssemblyAI WebSocket API)
  • Native iOS app with background audio recording
  • CRM integrations (export to HubSpot, Salesforce)
  • Multi-event timeline — see how your network grows over time
  • Team mode — share contact graphs with colleagues user: admin password: contactgraph2026

Built With

  • assemblyai
  • elevenlabs
  • neon-postgres
  • next.js
  • openrouter
  • react
  • shadcn/ui
  • tailwind-css
  • tavily
  • typescript
  • v0
  • vercel
  • vercel-ai-sdk
  • vercel-workflow-sdk
Share this project:

Updates