MeetAI is a meet web application that enables users to create custom AI agents (for education, business coaching, language tutoring, interview prep, sales assistance, etc.) and conduct real-time video meetings with them. It includes transcription, summarization, video recording, and post-meeting AI chat for querying meeting insights.
MeetAI integrates OpenAI for AI-driven features (requires $5 billing setup on OpenAI) but also provides a Demo Mode powered by the Gemini API for basic interactions without billing.
- AI Agent Creation β Create role-based agents (tutor, coach, interviewer, sales assistant).
- Meeting Scheduling β Schedule and manage meetings with agents.
- Real-Time Video Calls β Powered by Stream Video SDK with transcription & recording.
- Post-Meeting Insights β Transcripts (speaker-identified), AI summaries, recordings, and an AI chat to ask questions about the meeting.
- Demo Mode β Full UI/workflow simulation without OpenAI billing (Gemini-powered chatbot,N8N).
- Authentication β Better Auth with GitHub/Google OAuth support.
- Responsive UI β Tailwind + Shadcn/UI, dark/light themes.
- Developer Friendly β tRPC, Drizzle, Inngest hooks, modular components.
- Project Overview
- Video Overview
- Prerequisites
- Clone the repository
- Getting Started / Local Dev
- I. Foundational Setup
- II. Core Application Development
- III. Advanced Features & Integrations
- IV. Deployment & Maintenance
- Tech Stack
- Environment Variables Example
- Contributing
- License & Acknowledgements
MeetAI is a full-featured meet platform for building and interacting with AI agents inside realtime video meetings. Features include agent creation, meeting scheduling, live video + transcription, recordings, AI summaries, and contextual AI chat.
Hereβs a quick walkthrough of how MeetAI works:
https://github.com/user-attachments/assets/bde5c74a-17d7-42ef-b472-f781af372515
Hereβs a quick walkthrough of how MeetAI works:
final.1.2.mp4
- Node.js v18.18+
- npm (or pnpm/yarn)
- Git
- PostgreSQL (Neon, Supabase, or local Postgres)
- Recommended: VS Code + Tailwind CSS IntelliSense
git clone https://github.com/ayushkumar-5/meetai.git
cd meetai- Install dependencies
npm install --legacy-peer-deps-
Create
.envfrom.env.exampleand fill in keys (see Environment Variables Example below). -
Start dev servers (app & webhook):
# app
npm run dev
# Drizzle ORM
npm run db:studio- Run ngrok (or Hookdeck) to expose webhook endpoints during development:
npm run dev:webhook
# use the generated ngrok URL to configure Stream / Polar / webhook endpoints- Verify Node.js v18.18+.
- Create Next.js project:
npx create-next-app@latest meetai
cd meetai- Install & configure Tailwind CSS and Shadcn UI:
npx shadcn init
# configure tailwind via official docs- Initialize Git & push to GitHub:
git init
git add .
git commit -m "chore: initial commit"
git branch -M main
git remote add origin https://github.com/ayushkumar-5/meetai.git
git push -u origin main- Provision PostgreSQL (Neon/Supabase).
- Install Drizzle ORM:
npm install drizzle-orm @neondatabase/serverless drizzle-kit- Create
schema.ts(User, Agent, Meeting, etc.) and run migrations:
npx drizzle-kit generate
npx drizzle-kit push- Verify in Drizzle Studio / Neon Console.
- Integrate Better Auth (with Drizzle adapter).
- Configure
.envvalues:
BETTER_AUTH_SECRET=your-better-auth-secret
BETTER_AUTH_URL=http://localhost:3000/api/auth- Enable email/password and OAuth (GitHub & Google).
- Protect authenticated routes server-side (redirect unauthenticated users).
- Create
/dashboardroute group & layout. - Sidebar (Meetings, Agents, Upgrade, Profile).
- Navbar (toggle, global search).
- Responsive drawer for mobile.
GeneratedAvatarcomponent for users/agents.
- Add tRPC server + client provider.
- Create
protectedProcedurefor secure endpoints. - Use server-side prefetching &
useSuspenseQueryfor optimization.
- Example schema:
Agent { id, name, userId, instructions, createdAt, updatedAt }- Implement tRPC CRUD:
agents.create,agents.list,agents.update,agents.remove. - Implement
AgentForm(react-hook-form + Zod), data table with filters/pagination,useConfirmhook, and an agent detail page.
- Example schema:
Meeting {
id,
name,
userId,
agentId,
status, // upcoming | active | completed | processing | cancelled
transcriptUrl?,
recordingUrl?,
summary?,
createdAt,
updatedAt
}- Implement tRPC CRUD for meetings.
MeetingForm(select agent viaCommandSelect).- Meetings table: filtering, pagination, and per-meeting detail page.
-
Integrate Stream Video SDK for real-time calls.
-
TRPC endpoints to create calls and generate Stream tokens.
-
Build
/call/[meetingId]with:- Pre-join lobby (camera/audio check)
- In-call interface and controls
- Post-call summary screen
-
Use OpenAI to power agent responses in calls.
-
Implement webhook
/api/webhookto listen for Stream events:call.session_startedβ connect AI agentcall.session_participant_leftβ update meeting state
-
Use ngrok / Hookdeck when developing locally.
-
On
call.transcription_ready:- Fetch transcript from Stream
- Add speaker metadata
- Summarize with OpenAI
- Save summary back to DB
-
UI: searchable transcript (speaker-tagged), AI summary, recording playback.
-
Integrate Stream Chat SDK for meeting chat.
-
On
message.newwebhook:- Gather meeting context (transcript/summary/agent instructions)
- Generate response via OpenAI and post as AI chat reply
- Sync Better Auth users with Polar (create customer on signup).
- Enforce free-trial limits in tRPC for creating agents/meetings.
- Build Upgrade page with
PricingCards and Polar checkout integration. - Provide a customer portal for subscription management.
- Improve dashboard search, meeting/agent counts, and query performance.
- Add monitoring & alerting for background jobs.
npm run build- Connect GitHub repository to Vercel.
- Add environment variables (Stream, OpenAI, Better Auth, DB URL, Polar keys) in the Vercel dashboard.
- Update OAuth redirect URLs in GitHub/Google dev consoles.
- Configure webhooks to point at the production domain.
- Deploy Inngest background jobs to production.
- Optional Next.js redirect in
next.config.js:
module.exports = {
async redirects() {
return [{ source: '/', destination: '/meetings', permanent: false }];
}
}- Framework: Next.js 15 + React 19
- Styling/UI: Tailwind CSS + Shadcn/UI
- Database: Postgres (Neon / Supabase) + Drizzle ORM
- Auth: Better Auth (email + GitHub/Google OAuth)
- APIs: tRPC + TanStack Query
- Realtime Video & Chat: Stream Video SDK + Stream Chat SDK
- AI: OpenAI, Groq, Gemini, N8N (demo)
- Background Jobs: Inngest
- Payments: Polar
- Dev Tools: ngrok / Hookdeck, Vercel, Drizzle Studio
Create a .env from .env.example and fill in your values:
# -----------------------------
# π Authentication Secrets
# -----------------------------
BETTER_AUTH_SECRET=your-better-auth-secret
BETTER_AUTH_URL=http://localhost:3000/api/auth
# -----------------------------
# π OAuth Providers
# -----------------------------
GITHUB_CLIENT_ID=your-github-client-id
GITHUB_CLIENT_SECRET=your-github-client-secret
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
# -----------------------------
# β‘ Next.js App Config
# -----------------------------
NEXT_PUBLIC_APP_URL=http://localhost:3000
AUTH_SECRET=your-auth-secret
# -----------------------------
# πΉ Stream Video API
# -----------------------------
NEXT_PUBLIC_STREAM_VIDEO_API_KEY=your-stream-key
STREAM_VIDEO_SECRET_KEY=your-stream-secret
# -----------------------------
# π€ AI & LLM Integrations
# -----------------------------
GROQ_API_KEY=your-groq-key
OPENAI_API_KEY=your-openai-key
GEMINI_API_KEY=your-gemini-key
# -----------------------------
# π Payments (Polar)
# -----------------------------
POLAR_API_KEY=your-polar-api-key
# -----------------------------
# Database
# -----------------------------
DATABASE_URL=postgres://user:pass@host:port/db- Fork the repo
- Create a feature branch:
git checkout -b feat/your-feature - Commit:
git commit -m "feat: ..." - Push & open a pull request
- License: MIT β see
LICENSE - Acknowledgements: Built with inspiration from open-source tutorials and tools including Drizzle, tRPC, Stream, Tailwind, Next.js, and community packages.