MeetEase: AI-Native Video Conferencing
AI-Native Video Conferencing
HD video calls with live in-browser transcription and a Claude-powered copilot that summarizes the meeting and pulls action items while the call is still running. Your mic feeds a live transcript, and that transcript goes to Claude in real time.

- Year
- Nov 2025
- Timeline
- 7 weeks
- Type
- Web App
- Status
- Live
Overview
Most video apps add AI afterwards, as a summary email that arrives an hour later. In MeetEase, transcription and the copilot are two ends of one pipeline. Most of the work went into making that pipeline feel instant and into keeping the app up when its external services aren't configured.
The hard parts
- 01
Clerk validates its publishable key at the edge the moment it is invoked, so a fresh deploy with no keys returns a 500 before any page renders.
- 02
Awaiting the whole Claude response feels frozen for seconds, so the copilot needed to start answering before the model finished.
- 03
Live transcription and the AI assistant started as two components with faked data: two demos, not one system.
- 04
Windows is case-insensitive and Vercel's Linux is not, so /icons/video.svg worked locally and 404'd in production.
The approach
Every external dependency fails soft and independently. The Clerk handler is built only when a key exists and is wrapped in a try/catch that falls back to NextResponse.next(), so an auth misconfiguration cannot take the site down. The /api/ai route pipes Anthropic's SSE stream through a ReadableStream transformer that parses each event and re-emits only the text deltas, so tokens render as they arrive, with a clearly labelled offline fallback when there is no key. The key change was putting transcription and the copilot behind one MeetingIntelligence context: the microphone writes to the same state the copilot reads, which turned two demos into one pipeline.
Outcome
Ask the copilot to summarize or pull action items mid-call and it answers from the words spoken, streamed token by token. Guest "explore mode" means no login wall. Missing configuration cannot crash the app, so it deploys and loads on Vercel with no environment variables set, and adding keys turns features on one at a time.
What I'd do differently
The /api/ai route has no rate limiting yet, and I would add it before the app sees real traffic. Transcripts aren't persisted and speaker diarization is client-side only. Server-side diarization and a stored transcript history are the next steps.
Stack
Like what you see?
Let's build the next one.
Hiring, or have a problem that needs this kind of engineering? I read every message myself.

