Technology Stack
This project keeps dependencies minimal but modern. Every tool has a single clear job.
Tool / Library | Why we use it |
TypeScript | Static typing — catches nulls & mis‑spelled Chrome APIs before they ship. |
Vite | Fast TS/JS bundling & manifest.json injection for Manifest v3. |
Playwright | Headless Chromium used for one smoke test & nightly selector‑drift check. |
Vitest | Jest‑compatible unit‑test runner; runs in ~2 s on CI. |
jsdom | DOM environment for unit tests (no browser needed). |
ESLint / Prettier | Code quality & consistent style; auto‑fix on pre‑commit. |
Husky + commitlint | Git hooks enforcing lint & Conventional Commits. |
Commitizen | Interactive commit prompts so every dev gets the spec right. |
semantic‑release | Auto‑cuts tags, changelogs, and GitHub releases on main . |
Build and Output Folders
Folder | Contents | Generated by |
dist/ | Production extension bundle (JS, CSS, manifest, icons) | npm run build |
coverage/ | HTML + lcov coverage reports from Vitest | npm test -- --coverage |
test-results/ | Playwright traces, videos, and error context when E2E fails | npm run e2e |
docs/ | Markdown files published via GitHub Pages | Maintained manually |
.husky/ | Git hooks for lint → test → commitlint pipeline | husky install |
Support Folders
Workflow overview
- Dev:
npm run dev
— Vite serves the extension, reloads on code change. - Commit:
git cz
— Commitizen prompt → husky runs lint
and test
. - Push: GitHub Actions runs full CI (lint, unit, e2e).
- Merge to
main
: semantic‑release bumps version, publishes GitHub release. - Publish:
npm run build
→ upload dist.zip
to Chrome Web Store.