A full-stack application that transforms YouTube lecture videos into concise, AI-generated summaries and transcriptions. The application leverages OpenAI's Whisper AI for accurate audio transcription and Groq's language models for intelligent summarization.
Lecture Summary is designed to help students, educators, and professionals quickly extract key insights from video lectures. The application handles the entire pipeline from video download to AI-powered summarization, providing both full transcriptions and concise summaries.
- React - Modern UI library for building user interfaces
- TypeScript - Type-safe JavaScript for better developer experience
- Vite - Fast build tool and development server
- React Router - Client-side routing
- Tailwind CSS - Utility-first CSS framework for modern UI design
- Spring Boot (Java) - Main application server handling job orchestration and persistence
- FastAPI (Python) - Microservice for video processing and AI operations
- PostgreSQL - Relational database for job and result storage
- Maven - Build automation and dependency management
- Whisper AI - OpenAI's speech recognition model for audio transcription
- Groq - High-performance language model API for text summarization
- yt-dlp - YouTube video downloading library
- FFmpeg - Audio extraction and processing
The application follows a microservices architecture with three main components:
- User interface for submitting YouTube URLs
- Real-time job status monitoring with polling
- Display of transcriptions and summaries
- Responsive design with modern UI components
- RESTful API for job management
- Job queue system with status tracking (QUEUED, PROCESSING, COMPLETED, FAILED)
- Scheduled job processor running every 10 seconds
- PostgreSQL integration for data persistence
- Communication bridge with Python worker service
- Video downloading using yt-dlp
- Audio extraction from video files
- Whisper AI transcription
- Groq-powered summarization
- RESTful API endpoint for job processing
User → Frontend → Spring Boot API → Job Queue (PostgreSQL)
↓
Job Processor (Scheduled)
↓
Python Worker Service
↓
yt-dlp → Whisper AI → Groq
↓
PostgreSQL (Results)
↓
Frontend (Display)
- YouTube Video Processing - Automatic download and audio extraction from any YouTube URL
- AI Transcription - Highly accurate speech-to-text using Whisper AI
- Smart Summarization - Context-aware summaries generated by Groq's LLaMA models
- Job Queue System - Asynchronous processing with status tracking
- Real-time Updates - Automatic polling for job status updates
- Modern UI Design - Clean, minimalistic interface with Tailwind CSS
- Status Indicators - Color-coded job status badges (Queued, Processing, Completed, Failed)
- Copy to Clipboard - One-click copying of summaries and transcriptions
- Progress Tracking - Visual feedback during video processing
- Error Handling - Comprehensive error messages and retry mechanisms
- Microservices Architecture - Separation of concerns between API and processing layers
- Database Persistence - All jobs and results stored in PostgreSQL
- Scheduled Processing - Background job processor for asynchronous execution
- RESTful APIs - Clean API design for frontend-backend communication
- Type Safety - TypeScript on frontend, Pydantic models on backend
Ensure you have the following installed:
- Node.js (v16 or higher)
- Java (JDK 17 or higher)
- Python (3.8 or higher)
- PostgreSQL (14 or higher)
- Maven (3.6 or higher)
- FFmpeg (for audio processing)
-
Clone the repository
git clone <repository-url> cd lectureSummary
-
Database Setup
Create a PostgreSQL database:
CREATE DATABASE lecture_summary;
-
Backend Configuration
Configure
springboot-backend/src/main/resources/application.properties:spring.datasource.url=jdbc:postgresql://localhost:5432/lecture_summary spring.datasource.username=your_username spring.datasource.password=your_password spring.jpa.hibernate.ddl-auto=update python.service.url=http://localhost:8001
-
Python Worker Setup
Create a virtual environment and install dependencies:
cd python-worker python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate pip install -r requirements.txt
Configure
.envfile inpython-worker/:GROQ_API_KEY=your_groq_api_key -
Frontend Setup
cd frontend npm install
You can use the provided startup scripts or run each component individually:
.\start.batchmod +x start.sh
./start.shTerminal 1 - Spring Boot Backend:
cd springboot-backend
mvn spring-boot:runTerminal 2 - Python Worker:
cd python-worker
source venv/bin/activate # On Windows: venv\Scripts\activate
python api.pyTerminal 3 - Frontend:
cd frontend
npm run dev- Frontend: http://localhost:5173
- Spring Boot API: http://localhost:8080
- Python Worker API: http://localhost:8001
- Navigate to the home page
- Enter a valid YouTube URL in the input field
- Click "Generate Summary" button
- You will be redirected to the jobs page
-
On the jobs page, you can see all submitted jobs
-
Job statuses are color-coded:
- Blue: QUEUED - Waiting to be processed
- Yellow: PROCESSING - Currently being processed
- Green: COMPLETED - Successfully processed
- Red: FAILED - Processing failed
-
Click "View Details" to see the full results
On the job details page, you can:
- View the video title
- Read the AI-generated summary
- Access the full transcription
- Copy summaries or transcriptions to clipboard
- View the original YouTube video
Main landing page with YouTube URL input and feature highlights
Table view showing all submitted jobs with status indicators
Detailed view with AI-generated summary and full transcription
lectureSummary/
├── frontend/ # React + Vite frontend
│ ├── src/
│ │ ├── pages/
│ │ │ ├── Home.tsx # Landing page with URL submission
│ │ │ ├── Processing.tsx # Jobs list view
│ │ │ └── JobDetails.tsx # Individual job results
│ │ ├── App.tsx
│ │ └── main.tsx
│ └── package.json
│
├── springboot-backend/ # Spring Boot API server
│ ├── src/main/java/com/necharkc/lecturesummary/
│ │ ├── Job.java # Job entity model
│ │ ├── JobRepository.java # JPA repository
│ │ ├── JobController.java # REST endpoints
│ │ ├── JobProcessorService.java # Scheduled job processor
│ │ └── PythonApiService.java # Python worker client
│ └── pom.xml
│
├── python-worker/ # FastAPI microservice
│ ├── api.py # Main FastAPI application
│ ├── services/
│ │ ├── download_service.py # Video download (yt-dlp)
│ │ ├── whisper_service.py # Audio transcription
│ │ └── summarize.py # Text summarization (Groq)
│ └── requirements.txt
│
├── start.bat # Windows startup script
├── start.sh # Linux/Mac startup script
└── README.MD # This file
POST /submission
Body: { "ytlink": "https://www.youtube.com/watch?v=..." }
Response: Job object with status QUEUED
GET /jobs
Response: Array of Job objects
GET /jobs/{jobId}/details
Response: Job object with full details
POST /process
Body: { "job_id": "uuid", "video_url": "https://..." }
Response: { "success": true, "title": "...", "transcript": "...", "summary": "..." }
id- UUID primary keyurl- YouTube video URLstatus- Job status (QUEUED, PROCESSING, COMPLETED, FAILED)title- Video titletranscription- Full transcriptionsummary- AI-generated summaryerror_message- Error details if failedcreated_at- Job creation timestamp
- react
- react-dom
- react-router-dom
- typescript
- vite
- tailwindcss
- spring-boot-starter-web
- spring-boot-starter-data-jpa
- postgresql
- lombok
- fastapi
- uvicorn
- yt-dlp
- openai-whisper
- groq
- pydantic
- python-dotenv
This project is licensed under the MIT License.