A distraction-free YouTube experience with complete Shorts filtering
A personal YouTube frontend that completely eliminates Shorts and provides a clean, ad-free viewing experience. Access from any browser, any device, anywhere.
✅ Zero Shorts - Automatic filtering via YouTube Data API v3
✅ Always Online - Hosted on free tier (Vercel + Render)
✅ Clean UI - No recommendations, no bloat, just search and watch
✅ Free Forever - 100% open source, no costs
✅ Multi-Device - Works on desktop, mobile, tablet
- Node.js 18+ installed
- YouTube Data API v3 key (Get one here)
-
Clone and setup:
cd my-youtube -
Backend setup:
cd backend npm install # Add your YouTube API key to .env file echo "YOUTUBE_API_KEY=your_key_here" > .env npm run dev
-
Frontend setup (in another terminal):
cd frontend npm install npm run dev -
Open app:
- Frontend: http://localhost:5173
- Backend API: http://localhost:5000
my-youtube/
├── backend/ # Node.js/Express API server
│ ├── routes/
│ │ └── search.js # Shorts filtering logic
│ ├── server.js # Main server
│ └── .env # API keys (not committed)
│
├── frontend/ # React app
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── pages/ # Page components
│ │ └── utils/ # API client
│ └── .env # Backend URL
│
└── README.md # This file
┌─────────────┐
│ Browser │ (Any device, anywhere)
└──────┬──────┘
│
├─► Frontend (Vercel)
│ └─► React UI, search interface
│
├─► Backend (Render)
│ └─► Filters Shorts, proxies API calls
│
└─► YouTube Data API v3 (Google)
└─► Returns video data
Videos stream directly from YouTube CDN (not proxied)
The backend uses videoDuration=medium parameter in YouTube API search:
- medium: 4-20 minutes
- long: >20 minutes
Since Shorts are always <60 seconds, filtering for 4+ minutes eliminates all Shorts.
- Push code to GitHub
- Create account on render.com
- New Web Service → Connect GitHub repo
- Select
backendfolder - Add environment variables:
YOUTUBE_API_KEYPORT=5000
- Deploy
- Create account on vercel.com
- Import GitHub repo
- Select
frontendfolder - Add environment variable:
VITE_API_URL=https://your-backend.onrender.com
- Deploy
Both services auto-deploy on git push!
YouTube Data API v3 free tier: 10,000 units/day
| Action | Cost | Daily Limit |
|---|---|---|
| Search | 100 units | ~100 searches |
| Video details | 1 unit | ~10,000 requests |
Perfect for personal/household use. Implement caching if needed.
| Layer | Technology | Why |
|---|---|---|
| Frontend | React + Vite | Fast, modern, component-based |
| Backend | Node.js + Express | Simple, async-friendly |
| API | YouTube Data API v3 | Official Google API |
| Hosting | Vercel + Render | Free tier, auto-deploy |
| Auth | OAuth 2.0 (future) | Secure Google sign-in |
- Backend with Shorts filtering
- React frontend with search
- Video playback
- Responsive design
- Deploy to Render (backend)
- Deploy to Vercel (frontend)
- Configure production environment
- Set up auto-deploy from GitHub
- Google OAuth 2.0 login
- Fetch user subscriptions
- Subscription feed page
- Watch history (filtered)
- Search results caching
- Channel blocking feature
- Keyword filtering
- Remember playback position
- Keyboard shortcuts
- Custom dark themes
PORT=5000
YOUTUBE_API_KEY=your_google_api_keyVITE_API_URL=http://localhost:5000 # Local
# VITE_API_URL=https://your-api.onrender.com # Production- Go to Google Cloud Console
- Create new project
- Enable "YouTube Data API v3"
- Create credentials → API Key
- Copy key to backend
.envfile
Important: Never commit API keys to git!
This is a personal project, but feel free to fork and customize for your own use.
MIT - Use freely, no attribution required
Frontend can't connect to backend:
- Check backend is running on port 5000
- Verify
VITE_API_URLin frontend.env - Check browser console for CORS errors
"API key not configured" error:
- Add real YouTube API key to backend
.env - Restart backend server after updating
.env
No search results:
- Verify API key is valid
- Check API quota hasn't been exceeded
- Try broader search terms
For issues, check:
- Backend logs:
npm run devoutput in backend folder - Frontend console: Browser DevTools → Console
- API quota: Google Cloud Console
Built to escape the Shorts rabbit hole. Enjoy distraction-free YouTube! 🎉