A focused, browser-only YouTube playlist course tracker. Import a public playlist to see its total duration at 1x, 1.5x, and 2x speed, then tick off lessons as you complete them. Completion data stays in your browser's LocalStorage—there is no account, server, or database.
Try - https://youtube-course-3vr.pages.dev/
- Install dependencies:
npm install - Create a YouTube Data API v3 key:
- Open Google Cloud Console.
- Create or select a project, then enable YouTube Data API v3 under APIs & Services.
- Create an API key under Credentials.
- For a public deployment, restrict the key to your website's HTTP referrers and to the YouTube Data API v3.
- Start the app:
npm run dev - Enter the API key in the home-page import form. It is stored only in your browser’s LocalStorage.
Open http://localhost:3000, paste a standard playlist URL such as https://www.youtube.com/playlist?list=PLAYLIST_ID, and import it.
This project is configured for static export. It creates an out/ directory during npm run build, ready for Cloudflare Pages.
- Run
npm run checklocally. - Commit and push the repository to GitHub.
- In Cloudflare, go to Workers & Pages → Create application → Pages → Import an existing Git repository.
- Select this repository and choose the Next.js (Static HTML Export) framework preset.
- Use these build settings:
- Production branch:
main - Build command:
npm run build - Build output directory:
out
- Production branch:
- Select Save and Deploy. Each push to
mainwill deploy to production; pull requests receive preview deployments.
The course page uses a static URL with a query string, for example /course/?playlistId=PLAYLIST_ID. This allows any user-imported playlist to work on static hosting.
- The API key is stored only in the current browser’s LocalStorage. Restrict it to the YouTube Data API v3 and your Cloudflare Pages domain before using it in public.
- Cloudflare Pages security headers are defined in
public/_headersand copied into the static deployment. - Private, deleted, region-restricted, or inaccessible videos may display as zero-length entries when YouTube omits their details.
- Course data is saved under
youtube-course-datain LocalStorage and remains on the same browser/device.