Skip to content

πŸŽ™οΈ Voice-based AI learning platform with VAPI real-time conversations, custom AI tutors, progress tracking & gamification. Built with Next.js 15, React 19, Supabase & Clerk ✨

License

Notifications You must be signed in to change notification settings

chayan-1906/IntelliCourse-Next.js

Repository files navigation

πŸŽ“ IntelliCourse - Voice AI Learning Platform

Next.js React TypeScript Supabase VAPI Clerk License

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

IntelliCourse Logo

🎯 Why IntelliCourse?

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.

Technical Highlights

  • πŸŽ™οΈ 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.


πŸš€ Quick Start

# 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 dev

Prerequisites: Node.js 18+, accounts for Supabase, Clerk, and VAPI

πŸ“– Complete Setup Guide | πŸ”§ VAPI Integration Docs


✨ Core Features

Voice Session
πŸŽ™οΈ Real-Time Voice Sessions
Natural AI conversations with live transcription
Heatmap
πŸ“Š Activity Analytics
GitHub-style heatmaps & streak tracking

🎀 Voice AI Integration

  • 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.

πŸ“ˆ Learning Analytics & Gamification

  • 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

🎨 Modern UI/UX

  • 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

πŸ—οΈ Tech Stack

Frontend

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

Voice AI & Backend

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

Developer Tools

  • Sentry - Error tracking and performance monitoring
  • ESLint - Code quality with Next.js config
  • Shadcn UI - Accessible component system with Radix UI

πŸ“Έ Screenshots

Dashboard Overview

Dashboard
πŸ“· View More Screenshots
Companion Creation
Companion Creation Form
Loading
Connecting Animation
Success
Session Complete
Journey
My Journey Dashboard

πŸŽ“ Getting Started

Prerequisites

Installation

  1. Clone repository

    git clone https://github.com/chayan-1906/IntelliCourse-Next.js.git
    cd IntelliCourse-Next.js
  2. Install dependencies

    npm install
  3. Configure environment variables

    Create .env file:

    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
  4. 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);
  5. 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
  6. Start development server

    npm run dev
  7. Open browser β†’ http://localhost:3000


πŸ”§ How It Works - Voice Session Flow

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.


πŸ›οΈ Architecture Overview

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     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  β”‚                       β”‚
β”‚                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“ Project Structure

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

🎨 Design System

Subject Color Palette

Science:   #E5D0FF (Purple)
Maths:     #FFDA6E (Yellow)
Language:  #BDE7FF (Blue)
Coding:    #FFC8E4 (Pink)
History:   #FFECC8 (Beige)
Economics: #C8FFDF (Green)

Glassmorphism Theme

  • Backdrop Blur: backdrop-blur-lg
  • Border: border border-white/20
  • Background: bg-white/10
  • Shadow: Layered shadows for depth

πŸš€ Deployment (Vercel)

  1. Push to GitHub
  2. Import to Vercel
  3. Add environment variables
  4. Deploy!

Post-deployment:

  • Update Clerk redirect URLs with production domain
  • Configure Sentry DSN for monitoring

🀝 Contributing

Contributions welcome! Follow Conventional Commits:

git checkout -b feature/amazing-feature
git commit -m 'feat: Add voice pause/resume'
git push origin feature/amazing-feature

Open a Pull Request with:

  • Clear description of changes
  • Screenshots (if UI changes)
  • Test results

πŸ“Š Server Actions API

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>

πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

Summary: Free to use, modify, and distribute with attribution.


πŸ‘¨β€πŸ’» Author

Padmanabha Das - Full-Stack Developer & AI Integration Specialist

GitHub LinkedIn Email Portfolio


πŸ™ Acknowledgments

Built with cutting-edge technologies:


⭐ Support This Project

If you found this helpful:

  • ⭐ Star this repository
  • πŸ› Report bugs via Issues
  • 🀝 Contribute improvements
  • πŸ’¬ Share with developers interested in voice AI

πŸŽ“ Built with ❀️ by Padmanabha Das

Exploring the future of voice-based education

Visitors Stars Forks

About

πŸŽ™οΈ Voice-based AI learning platform with VAPI real-time conversations, custom AI tutors, progress tracking & gamification. Built with Next.js 15, React 19, Supabase & Clerk ✨

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published