Video Notes is a lightweight YouTube companion: take timestamped annotations inline on youtube.com/watch, see them as timeline markers, and browse/search everything from the popup.
extension/: Manifest V3 Chrome/Chromium + Firefox extension written in TypeScript.scripts/content/index.tsinjects the notes UI,popup/ts/popup.tspowers the action popup,background.tsis a placeholder worker, and build outputs go toextension/dist/.worker/: Cloudflare Worker API for optional read-only share links.tests/e2e/: Playwright smoke-regression coverage for the built extension.- Static landing page at the repo root (
index.html,index.css,index.js,privacy.html) that explains the feature tour and links to installs. - Extension architecture notes live in
extension/README.md; automated test details live intests/README.md.
- Chrome Web Store: https://chromewebstore.google.com/detail/video-notes/phgnkidiglnijkpmmdjcgdkekfoelcom
- Website with tour + install links: https://prameshbajra.github.io/video-notes/
- Demo video (60s): https://www.youtube.com/watch?v=rOi7xQ8DLpo
npm installnpm run devfor watch builds intoextension/dist/.npm run buildto clean/copy assets and produce a freshextension/dist/.- Checks:
npm run lint,npm run typecheck(extension + Worker), andnpm run test:e2e. - Full local/CI verification:
npm run verify(npm run test:ciis an alias). - Optional:
npx web-ext run --source-dir extension/dist --target chromium|firefox-desktopto smoke-test,npx web-ext lint --source-dir extension/distbefore packaging.
- Run
npm run build(or keepnpm run devrunning). - Chromium (Chrome/Edge/Brave): open
chrome://extensions, enable Developer mode, click Load unpacked, and selectextension/dist. - Firefox: open
about:debugging#/runtime/this-firefox, click Load Temporary Add-on, and pickextension/dist/manifest.json. The manifest declaresbrowser_specific_settings.gecko.id(video-notes@prameshbajra).
Contributions are welcome. Please read CONTRIBUTING.md for the fork → branch → PR workflow, branch/commit conventions, and the checks your PR must pass before review.
Deployment is automated with two GitHub Actions workflows:
.github/workflows/ci.ymlruns on every pull request and every push tomain. It runsnpm run verify(lint, typecheck, build, Playwright e2e) — it only tests, it never publishes..github/workflows/release.ymlpublishes the extension to both stores. It runs only when av*.*.*tag is pushed (or via manual dispatch from the Actions tab), and it fails fast unless the tag matches the version inextension/manifest.json.
To cut a release:
- Bump the version in
extension/manifest.jsonandpackage.json(keep them equal — the stores reject re-uploading a version that is already live). - Open a PR, get CI green, and merge to
main. - Tag the merge commit and push the tag:
The workflow then builds, packages, and publishes to the Chrome Web Store (
git tag v2.4.0 git push origin v2.4.0
--auto-publish) and Firefox AMO (web-ext sign --channel listed). You can also run it by hand from Actions → Release → Run workflow and pickchrome,firefox, orboth.
Store credentials/secrets, listing copy, permission justifications, and the pre-flight checklist live in docs/PUBLISHING.md.
Serve the repo root with any static server (e.g. npx serve . or python3 -m http.server) or just open index.html.
Run Worker checks with npm run typecheck:worker. For local Worker development, install Worker dependencies once with npm install --prefix worker, then use npm --prefix worker run dev; deploy with npm --prefix worker run deploy.