Meet AI - AI-powered video call application

Meet AI is a fully AI-powered video call application that enables real-time conversations with intelligent agents tailored for specific roles such as Language Tutor, Therapy Assistant, Training Coach, and more. Unlike typical chatbots or apps focused on post-call summaries, Meet AI delivers a truly live, interactive experience, allowing users to engage directly with specialized AI personalities. After each session, users gain access to meeting summaries, transcripts, and ongoing AI support, making it easy to track progress, revisit key insights, and continue learning or growing beyond the call.

meetai-banner

Technologies

  • Next.js
  • React
  • Shadcn UI
  • Tailwind CSS
  • TypeScript
  • Better Auth
  • Zod
  • Stream SDK
  • OpenAI API
  • Inngest
  • Polar
  • tRPC
  • TanStack Query
  • Drizzle ORM
  • Neon
  • PostgreSQL

Purpose

The purpose of Meet AI is to reimagine how people interact with artificial intelligence, not through static text or delayed responses, but through live, human-like conversations that feel intuitive and meaningful. By giving each AI agent a clear role and personality, the app is designed to support users in personal growth, emotional support, learning, and self-improvement. Whether someone wants to practice a new language, talk through challenges, or stay accountable to their goals, Meet AI offers an always-available, judgment-free space to connect and grow.

My Role

As a sole developer, I was responsible for project development, including UI/UX design, frontend and backend development, database management, and deployment.

Technologies Used

  • Next.js: Enables server-side rendering and fast performance for a seamless user experience.
  • React: Builds a dynamic, responsive, and component-based UI.
  • Shadcn UI: Provides accessible, modern UI components with a clean developer experience.
  • Tailwind CSS: Utility-first CSS framework for rapid and consistent styling.
  • TypeScript: Adds strong typing to JavaScript for better code quality and fewer bugs.
  • Better Auth: Handles secure user authentication and session management.
  • Stream SDK: Powers real-time video and chat capabilities.
  • OpenAI API: Enables intelligent, role-based AI agents for live conversations.
  • Inngest: Manages background jobs for fetching, parsing, speaker tagging, summarizing, and saving meeting transcripts.
  • tRPC + TanStack Query: Enables end-to-end type-safe APIs and seamless client-server data fetching.
  • Polar: Handles payment integration and monetization.
  • Drizzle ORM + Neon + PostgreSQL: Type-safe, modern database handling with support for complex queries and edge deployment.
  • Zod: Ensures schema validation and type safety across client and server.
flip-it-intro

Development and Thought Process

The development of Meet AI began with a simple goal: to create a seamless, real-time conversation experience between users and intelligent digital agents through live video. The aim was to give users the feeling of speaking with a human — someone who listens, responds naturally, and creates a space where they feel free to share.

I began by designing the architecture using Next.js and React, prioritizing performance, modularity, and flexibility for future growth. With Shadcn UI and Tailwind CSS, I focused on building clean, accessible, and mobile-friendly interface components, especially within the dashboard, where most user interaction occurs. Real-time communication was enabled through the Stream SDK, while OpenAI powered the content and responses of the AI agents. From there, I built the backend infrastructure using Drizzle ORM, Neon, and PostgreSQL to ensure reliable and scalable data handling. I integrated tRPC with TanStack Query to enable full-stack type safety and smooth data fetching from backend to frontend.

Post-call experience was also a key part of the user journey. To help users keep track of their sessions, I implemented Inngest to trigger background jobs based on key events, such as when a video call ends, enabling asynchronous workflows like fetching transcripts from Stream and generating AI-powered summaries, all without disrupting the main user experience. Zod was used for consistent data validation across the app, and Polar handled monetization and payment integration.

In building Meet AI, I focused not only on technical performance but also on creating a product that feels genuinely human, helpful, and thoughtful from start to finish.

Artboards and Features

Meeting Management: Users can create, edit, or delete meetings, select or create an agent, and filter by name, status, or agent for easy access.

meetai-meeting-page
meetai-create-a-new-meeting
meetai-meeting-filter
meet-ai-meeting-searching

Agent Profiles: Build and manage agents tailored to specific use cases, filter by name to find the right match quickly.

meetai-agent-page
meetai-create-a-new-agent
meetai-agent-page-detail
meet-ai-agent-searching

Live Video Calls: Seamless real-time video sessions with AI-powered agents.

meetai-live-call

Call Summary: Post-call insights include a concise summary, transcript, recording, and follow-up with the assigned agent.

meetai-summary
meetai-transcript
meetai-recording
meet-ai-askAI

Flexible Plans: Meet AI offers three tiered packages designed to suit different user needs, each packed with valuable features and benefits.

meetai-upgrade

Challenges

Inngest: While building an Inngest function to summarize meeting transcripts using GPT-4o, I encountered several challenges, including parsing significant JSONL transcripts, resolving speaker identities across multiple tables (user and agent), and ensuring reliable formatting of input/output for the agent. Long transcripts also risked exceeding token limits, and debugging the async workflow was complex.

I overcame this by modularizing the workflow using step.run(), which isolates each task - fetching, parsing, speaker mapping, and summarizing - making it easier to debug and replay. I merged user and agent data safely, adding fallbacks to prevent runtime errors. To ensure consistent agent results, I formatted input with markdown structure and validated outputs with type-safe parsing.

tRPC + Tanstack Query: Combining tRPC with TanStack Query was powerful but tricky at first. I had difficulties with query key naming, invalidation logic, and maintaining type safety across client and server.

To solve this, I built custom wrappers around trpc.useQuery() and trpc.useMutation() that standardized query keys and caching strategies. I also took full advantage of inferred types from AppRouter, which reduced duplication and runtime errors. Reading through tRPC's examples and TanStack Query's stale time/invalidation pattern helped me get confident using both together.

Conclusion and Reflection

Building Meet AI was a major learning experience that challenged me to work across the full stack—from real-time video and AI integration to managing async workflows and type-safe APIs. I faced a lot of unfamiliar tools and concepts, but by breaking problems down and learning from documentation and examples, I was able to build something meaningful. This project helped me gain confidence in using modern technologies and deepened my understanding of how to structure and ship a complete product.

Next Steps

  • Improve Agent Memory: My next goal is to give agents better memory by storing key conversation history and retrieving it during future sessions. This will help create more personalized and consistent experiences, allowing users to feel like the AI truly remembers and grows with them. I plan to use a vector database to store and search relevant past messages as context.
  • Add Goal-Based Personalization: I also want to make agents more helpful by letting users set goals like “practice English,” “prepare for interviews,” or “relieve stress.” Based on this input, I'll adjust the system prompts to guide the AI's tone and responses to better match each user's intent.

Available for work

Send me email or connect with me via LinkedIn!

Xin chào