Rika — AI Meeting Notetaker

Paste a meeting link (or connect a calendar) → Rika joins → records + transcribes → ask her about what was said, either after the call or live with an @Rika mention in the meeting chat.

Rika joins the call, transcribes, and answers @Rika in real time

// AI Systems / Meeting Intelligence / RAG · joins your calls
Rika: meeting call grid with a live speaker-attributed transcript panel
Rika
Zoom / Meet / Teams bot · speaker-attributed transcripts · post-call + live @Rika RAG chat · summaries & action items
  • Rika is an AI meeting notetaker that joins Zoom, Google Meet, and Microsoft Teams calls, records audio/video, captures speaker-attributed transcripts, and answers questions grounded in those transcripts — after the call in a web RAG chat, or live during the call via @Rika in the meeting chat.
  • Two ways to get Rika into a meeting:
    • Join now — paste a meeting URL; a Recall.ai bot joins immediately (rate-limited 10/hour/user)
    • Calendar — connect Google or Outlook, browse upcoming events, and record manually or via a per-provider auto-record toggle that schedules bots from synced invites
  • Post-meeting processing pipeline, triggered by a bot.done webhook and run in the background so the webhook ack stays fast:
    • chunk the transcript by speaker turn (~150 words/chunk)
    • embed with Gemini (768-dim) and upsert to Qdrant FIRST, then write chunks to Postgres — so a failed embed batch never leaves stuck partial rows
    • best-effort meeting intelligence: DeepSeek extracts a summary, action items, and timestamped highlights without blocking the meeting from being marked done
  • Live in-meeting Q&A — no separate app, just chat in the meeting itself:
    • the bot registers a realtime webhook for chat messages and triggers on an @Rika mention
    • answers with the same category-scoped RAG used for post-meeting chat, replying inside the meeting's native chat
    • a self-message guard on the shared bot display name prevents Rika from replying to her own messages in a loop
    • conversation turns persist to a dedicated table since each webhook delivery is a separate serverless invocation with no shared memory
  • Category-scoped RAG chat — exactly one retrieval mode at a time (single meeting, a category, or uncategorized-only); deliberately no unscoped 'all meetings' dump, so unrelated meeting series don't bleed into each other's context. A classifier skips retrieval entirely for greetings and small talk.
  • Meeting workspace: synced video/audio playback with a speaker-attributed transcript (click a line to seek), a Notes tab with summary/action items/seekable highlights, and export to TXT, SRT, or PDF.
  • Multi-account calendar support — multiple Google/Outlook connections deduped per (user, provider, email), with OAuth forcing an account picker so a second connect doesn't silently re-auth the first.
  • Rate limiting (Upstash sliding window, fail-open on outage) across bot creation, chat, and intelligence regeneration so one user can't exhaust shared quota.
  • Clerk auth with resource-based ownership checks in route handlers rather than middleware path matching, plus JIT linking of pre-seeded users by email on first sign-in.

// tech

Next.jsTypeScriptClerkNeon PostgresDrizzle ORMQdrantRecall.aiGemini EmbeddingsDeepSeekVercel AI SDKUpstash RedisGoogle/Outlook OAuth