A modern AI-driven meeting platform built with Next.js 15 for scheduling, automation, and real-time collaboration.
MeetAi is an AI-powered meeting assistant platform built on Next.js 15 (App Router).
It helps teams with:
- 📅 Smart meeting scheduling
- 🤖 AI-driven assistance & automation
- 🧠 Context-aware workflows using tRPC & Drizzle ORM
- 🔄 Real-time collaboration (optional Stream integration)
| Category | Technology |
|---|---|
| Framework | Next.js 15 (App Router) |
| Language | TypeScript |
| API Layer | tRPC, TanStack Query |
| Database | PostgreSQL, Drizzle ORM |
| UI | Radix UI, Tailwind CSS |
| Charts | Recharts |
| Date Handling | React Day Picker |
| Realtime | Stream API (optional) |
👉 AI-Powered Meeting Assistance
Auto-summarization, agenda support, and context-aware meeting flows (powered by OpenAI API).
👉 Smart Scheduling & Automation
Meeting modules for booking, rescheduling, and handling availability.
👉 Typed End-to-End
tRPC + TypeScript + Drizzle ORM = fully typed stack from DB to UI.
👉 Modular Architecture
Feature-based modules under src/modules/* (meetings, agents, auth, etc.).
👉 Modern UI/UX
Radix primitives + Tailwind CSS for accessible, polished components.
👉 Analytics-Ready
Recharts for visualizing meeting metrics, productivity, and usage.
Follow these steps to run MeetAi locally.
Make sure you have:
- Node.js 18+
- Package manager: npm / pnpm / yarn
- PostgreSQL (or another Drizzle-supported DB)
git clone https://github.com/your-username/meetai.git
cd meetainpm install
# or
pnpm install
# or
yarnCreate a .env file in the project root:
NEXT_PUBLIC_APP_URL=http://localhost:3000
# Database connection
DATABASE_URL=postgresql://user:password@host:port/dbname
# AI & Realtime keys (if used)
OPENAI_API_KEY=sk-...
STREAM_API_KEY=...💡 Keep secrets out of version control. Commit a
.env.exampleinstead.
npm run devApp will be available at: http://localhost:3000
| Script | Description |
|---|---|
dev |
Start Next.js dev server |
build |
Create production build |
start |
Run production server |
lint |
Run ESLint |
db:push |
Push Drizzle migrations to DB |
db:studio |
Open Drizzle Studio |
db:webhook |
Start ngrok for DB/webhook testing |
Run any script like:
npm run devsrc/
├─ app/ # Next.js routes (App Router)
├─ components/ # Shared UI components
├─ modules/ # Feature modules (meetings, agents, auth, etc.)
│ ├─ meetings/
│ ├─ agents/
│ └─ auth/
├─ trpc/ # tRPC routers & client
├─ db/ # Drizzle schema & queries
public/ # Static assets (icons, images, etc.)🧩 Place server-only logic under:
src/modules/*/server
To avoid hydration mismatches, don’t use non-deterministic values during SSR:
❌ Avoid on the server:
Math.random()Date.now()toLocaleString()- Direct
window.*access
✅ Use instead:
useEffect()for client-only behaviorIntl.DateTimeFormat()for deterministic formatting
Example of a safe client-only check:
if (typeof window !== 'undefined') {
// safe to access window, localStorage, etc.
}- Ensure
NEXT_PUBLIC_APP_URLis correct for both local and production. - Keep API keys (
OPENAI_API_KEY,STREAM_API_KEY) server-side only. - Use
npm run db:studioto visually inspect the database. - Group business logic inside
src/modules/*rather than scattering it in pages/components.
- Move non-deterministic logic into
useEffect. - Ensure that server and client render the same initial markup.
-
Check
DATABASE_URLin.env. -
Verify:
- Host / port
- Username & password
- Network / firewall rules
- Confirm base URLs match your environment (
localhost, Vercel, Railway, etc.). - Make sure
NEXT_PUBLIC_APP_URLis set correctly in both dev & prod.
Contributions are welcome! To contribute:
- Fork the repo & create a feature branch.
- Follow existing coding style & folder structure.
- Use semantic commits (
feat:,fix:,chore:,refactor:). - Run:
npm run lintbefore submitting a PR.
This repo can be extended with:
-
.env.exampletemplate -
System architecture diagram
-
Database schema diagram (Drizzle-based)
-
API flow overview (tRPC → service layer → DB)
-
Deployment guides for:
- Vercel
- Docker
- Railway / Fly.io
🧡 If you use MeetAi or build on top of it, consider starring the repo and sharing your feedback!