Real-time voice AI conversations for education ποΈ Built with VAPI SDK, Next.js 15, and WebRTC. Learn through natural speech with AI tutors, track progress via GitHub-style heatmaps, and maintain learning streaks.
π Live Demo β’ π VAPI Integration Guide β’ π Report Bug
Traditional learning platforms rely on text and video. IntelliCourse enables conversational learning through real-time voice AIβjust like talking to a tutor. Built for developers interested in voice AI integration, real-time audio streaming, and educational technology.
- ποΈ VAPI SDK Integration - Real-time voice streaming with WebRTC, sub-200ms latency
- π Live Transcription - Speech-to-text conversion with conversation persistence
- π Analytics Engine - GitHub-style activity heatmaps with streak gamification
- β‘ Next.js 15 + React 19 - Server Components, Turbopack, concurrent rendering
- π¨ Glassmorphism UI - Modern design system with Tailwind CSS 4.0 + Framer Motion
Best for: Developers learning voice AI implementation, building EdTech products, or exploring conversational interfaces.
# Clone and install
git clone https://github.com/chayan-1906/IntelliCourse-Next.js.git
cd IntelliCourse-Next.js
npm install
# Configure environment (see .env.example)
cp .env.example .env
# Run development server
npm run devPrerequisites: Node.js 18+, accounts for Supabase, Clerk, and VAPI
π Complete Setup Guide | π§ VAPI Integration Docs
ποΈ Real-Time Voice Sessions Natural AI conversations with live transcription |
π Activity Analytics GitHub-style heatmaps & streak tracking |
- VAPI SDK - Real-time audio streaming via WebRTC with automatic reconnection
- Custom AI Tutors - Subject-specific companions (Math, Science, Coding, Languages, etc.)
- Voice Customization - Male/Female voices with Formal/Casual teaching styles
- Live Transcription - Full conversation capture with searchable history
- Session Management - Auto-save with duration tracking and analytics
π Read the VAPI Integration Guide - Learn how voice streaming, state management, and WebRTC connections work under the hood.
- Activity Heatmap - GitHub-style visualization (daily/weekly/monthly/yearly views)
- Streak Counter - Track learning consistency and longest streaks
- Progress Dashboard - Session history with export to CSV
- Data Visualization - Bar charts, calendar grids, and interactive tooltips
- Glassmorphism Design - Frosted glass effects with backdrop blur
- Subject Color Coding - Visual distinction (Math: Yellow, Science: Purple, etc.)
- Smooth Animations - Framer Motion transitions + Lottie animations
- Responsive Layout - Mobile-first design with adaptive breakpoints
| Technology | Version | Purpose |
|---|---|---|
| Next.js | 15.4.7 |
React framework with App Router, Turbopack |
| React | 19.1.0 |
UI with concurrent rendering |
| TypeScript | 5.x |
Type-safe development |
| Tailwind CSS | 4.0 |
Utility-first styling with custom system |
| Framer Motion | 12.23.12 |
Animation library for micro-interactions |
| Technology | Version | Purpose |
|---|---|---|
| VAPI SDK | 2.3.0 |
Real-time voice conversations via WebRTC |
| Supabase | 2.56.0 |
PostgreSQL + real-time APIs + authentication |
| Clerk | 6.31.4 |
OAuth authentication & user management |
| Zod | 3.25.x |
Runtime validation for forms and APIs |
- Sentry - Error tracking and performance monitoring
- ESLint - Code quality with Next.js config
- Shadcn UI - Accessible component system with Radix UI
-
Clone repository
git clone https://github.com/chayan-1906/IntelliCourse-Next.js.git cd IntelliCourse-Next.js -
Install dependencies
npm install
-
Configure environment variables
Create
.envfile:cp .env.example .env
Add your credentials:
# Clerk Authentication NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_xxxxx CLERK_SECRET_KEY=sk_test_xxxxx NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL=/ NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL=/ # Supabase NEXT_PUBLIC_SUPABASE_URL=https://xxxxx.supabase.co NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... # VAPI NEXT_PUBLIC_VAPI_WEB_TOKEN=xxxxx-xxxxx-xxxxx-xxxxx # Sentry (Optional) SENTRY_AUTH_TOKEN=xxxxx
-
Set up Supabase database
Run in Supabase SQL Editor:
-- Create companions table CREATE TABLE companions ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), name TEXT NOT NULL, subject TEXT NOT NULL, topic TEXT NOT NULL, voice TEXT NOT NULL, style TEXT NOT NULL, duration INTEGER NOT NULL, author TEXT NOT NULL, created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() ); -- Create session_history table CREATE TABLE session_history ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), companion_id UUID REFERENCES companions(id) ON DELETE CASCADE, user_id TEXT NOT NULL, duration_minutes INTEGER DEFAULT 0, transcript TEXT, created_at TIMESTAMPTZ DEFAULT NOW(), completed_at TIMESTAMPTZ ); -- Create bookmarks table CREATE TABLE bookmarks ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), companion_id UUID REFERENCES companions(id) ON DELETE CASCADE, user_id TEXT NOT NULL, created_at TIMESTAMPTZ DEFAULT NOW(), UNIQUE(companion_id, user_id) ); -- Enable Row Level Security ALTER TABLE companions ENABLE ROW LEVEL SECURITY; ALTER TABLE session_history ENABLE ROW LEVEL SECURITY; ALTER TABLE bookmarks ENABLE ROW LEVEL SECURITY; -- Create policies CREATE POLICY "Enable read for all users" ON companions FOR SELECT USING (true); CREATE POLICY "Enable insert for authenticated users" ON companions FOR INSERT WITH CHECK (true);
-
Configure VAPI
In your VAPI dashboard:
- Create a new assistant
- Set voice preferences (male/female)
- Configure system prompts for tutoring
- Enable transcription
- Copy Web Token to
.env
-
Start development server
npm run dev
-
Open browser β http://localhost:3000
User Creates Companion
β
Session Starts β VAPI SDK Initializes β WebRTC Connection
β
Real-Time Audio Streaming β Speech-to-Text Transcription
β
Live Conversation State β Transcript Updates
β
Session Ends β Save to Supabase β Update Analytics
β
Heatmap + Streak Counter + History Updated
Want to learn more? Read the VAPI Integration Guide for implementation details, code examples, and architecture diagrams.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Client Layer β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Next.js 15 β β React 19 β β Tailwind CSS β β
β β App Router β β Components β β Styling β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Authentication Layer β
β ββββββββββββββββ β
β β Clerk Auth β β
β β OAuth 2.0 β β
β ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββ΄ββββββββββββββ
βΌ βΌ
ββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββ
β Voice AI Layer β β Database Layer β
β ββββββββββββββββββββββ β β ββββββββββββββββββββββ β
β β VAPI SDK β β β β Supabase β β
β β - Voice Recognitionβ β β β - PostgreSQL DB β β
β β - Text-to-Speech β β β β - Real-time APIs β β
β β - Conversation AI β β β β - Storage Buckets β β
β ββββββββββββββββββββββ β β ββββββββββββββββββββββ β
ββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββ
β β
βββββββββββββββ¬ββββββββββββββ
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Monitoring Layer β
β ββββββββββββββββ β
β β Sentry β β
β β Error/Perf β β
β ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
IntelliCourse-Next.js/
βββ src/
β βββ app/ # Next.js App Router
β β βββ companions/ # Companion CRUD pages
β β βββ my-journey/ # Analytics dashboard
β β βββ api/ # API routes
β βββ components/ # React components
β β βββ ui/ # Shadcn UI components
β β βββ CompanionComponent.tsx # Voice session handler
β β βββ ActivityHeatmap.tsx # Analytics visualization
β β βββ ...
β βββ lib/
β β βββ actions/ # Server actions
β β βββ supabase.ts # Database client
β β βββ vapi.sdk.ts # VAPI integration
β βββ types/ # TypeScript definitions
βββ public/
β βββ animations/ # Lottie JSON files
β βββ icons/ # SVG assets
βββ README.md
Science: #E5D0FF (Purple)
Maths: #FFDA6E (Yellow)
Language: #BDE7FF (Blue)
Coding: #FFC8E4 (Pink)
History: #FFECC8 (Beige)
Economics: #C8FFDF (Green)- Backdrop Blur:
backdrop-blur-lg - Border:
border border-white/20 - Background:
bg-white/10 - Shadow: Layered shadows for depth
- Push to GitHub
- Import to Vercel
- Add environment variables
- Deploy!
Post-deployment:
- Update Clerk redirect URLs with production domain
- Configure Sentry DSN for monitoring
Contributions welcome! Follow Conventional Commits:
git checkout -b feature/amazing-feature
git commit -m 'feat: Add voice pause/resume'
git push origin feature/amazing-featureOpen a Pull Request with:
- Clear description of changes
- Screenshots (if UI changes)
- Test results
Key server actions in companion.actions.ts:
// Companion Management
createCompanion(formData: CreateCompanion): Promise<Companion>
getAllCompanions(options: GetAllCompanions): Promise<Companion[]>
getCompanion(id: string): Promise<Companion>
// Session Management
addToSessionHistory(companionId: string): Promise<string>
updateSessionDuration(companionId: string, duration: number): Promise<void>
saveSessionTranscript(sessionId: string, transcript: string): Promise<void>
// Analytics
getHeatmapData(userId: string): Promise<HeatmapValue[]>
getUserStreakData(userId: string): Promise<StreakData>This project is licensed under the MIT License - see the LICENSE file for details.
Summary: Free to use, modify, and distribute with attribution.
Built with cutting-edge technologies:
- Next.js - React framework
- VAPI - Voice AI SDK
- Supabase - Backend platform
- Clerk - Authentication
- Vercel - Hosting
- Tailwind CSS - Styling
- Framer Motion - Animations
If you found this helpful:
- β Star this repository
- π Report bugs via Issues
- π€ Contribute improvements
- π¬ Share with developers interested in voice AI






