Open-source Netflix-style platform for free university lectures
Stream 900+ free lectures from MIT, Stanford, Yale, Harvard and more — beautifully organized, fully searchable, completely free.
World-class university lectures exist on YouTube — but they're buried, unorganized, and invisible to search engines. EduStream fixes that:
- SSR with Next.js 15 — every course page is server-rendered with full metadata, making it indexable by Google
- Netflix-style UI — familiar, cinematic browsing experience for educational content
- No account required — completely open access, no sign-up wall
- Self-hostable — run locally in minutes or deploy to any VPS; Docker optional
- Browse and search university courses by topic, university, or keyword
- YouTube playlist import — add any playlist as a course via the admin panel
- Per-course dynamic SEO metadata (
<title>,<description>, OpenGraph, Twitter cards) - Watch progress saved locally (no account needed)
- Personal "My List" and watch history
- Admin panel for managing courses, content whitelist, and platform settings
- Fully responsive — mobile, tablet, and desktop
- Dark-mode first design
| Layer | Technology |
|---|---|
| Frontend | Next.js 15 (App Router, SSR), Tailwind CSS, shadcn/ui |
| Backend | FastAPI (Python 3.11), Uvicorn |
| Database | MongoDB 7 |
| Containerization | Docker, Docker Compose |
| Web Server | Nginx |
| SSL | Let's Encrypt (Certbot) |
Docker is completely optional. The simplest way to run EduStream is directly on your machine.
- Node.js 20+
- Python 3.11+
- MongoDB (local or Atlas free tier)
- YouTube Data API v3 key (get one here)
git clone https://github.com/yadavplusshubham/EdustreamCo.git
cd EdustreamCocd backend
cp .env.example .env # fill in your values
pip install -r requirements.txt
python3 -m uvicorn server:app --host 0.0.0.0 --port 8001 --reloadcd frontend-next
cp .env.example .env.local # set NEXT_PUBLIC_BACKEND_URL=http://localhost:8001
npm install --legacy-peer-deps
npm run devOpen http://localhost:3000. That's it — no containers needed.
Use Docker if you want an isolated, reproducible production environment.
git clone https://github.com/yadavplusshubham/EdustreamCo.git
cd EdustreamCo
cp backend/.env.example backend/.env # fill in valuesdocker compose up -dThis starts:
edustream-frontend→ port3010edustream-backend(viaedustream-api-proxy) → port8011edustream-mongo(internal only)
Point your Nginx/Caddy/Traefik at:
localhost:3010→ your domain (frontend)localhost:8011→ your domain/api/(backend)
See nginx/edustream-site.conf for a ready-made Nginx config with SSL.
| Variable | Description |
|---|---|
MONGO_URL |
MongoDB connection string |
DB_NAME |
Database name (default: edustream) |
YOUTUBE_API_KEY |
YouTube Data API v3 key |
ADMIN_USERNAME |
Admin panel username |
ADMIN_PASSWORD |
Admin panel password |
| Variable | Description |
|---|---|
NEXT_PUBLIC_BACKEND_URL |
Backend base URL (e.g. http://localhost:8001) |
EdustreamCo/
├── backend/ # FastAPI backend
│ ├── server.py # Main application
│ ├── requirements.txt
│ └── Dockerfile
├── frontend-next/ # Next.js 15 frontend (SSR)
│ ├── app/ # App Router pages
│ │ ├── page.jsx # Home page
│ │ ├── watch/[courseId]/ # Course player + SSR metadata
│ │ ├── edusigninup/ # Admin panel
│ │ ├── my-courses/ # Watch history
│ │ └── profile/ # Admin profile
│ ├── components/ # UI components (shadcn/ui + custom)
│ ├── context/ # Auth context
│ └── Dockerfile
├── nginx/ # Nginx config snippets
└── docker-compose.yml # Optional: containerized deployment
Contributions are welcome! Please read CONTRIBUTING.md before opening a PR.
- Fork the repo
- Create your branch:
git checkout -b feat/your-feature - Commit with conventional commits:
git commit -m 'feat: add your feature' - Push and open a Pull Request
Please do not open public issues for security vulnerabilities. See SECURITY.md for responsible disclosure.
MIT © EduStream Contributors