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

  1. Dev: npm run dev — Vite serves the extension, reloads on code change.
  2. Commit: git cz — Commitizen prompt → husky runs lint and test.
  3. Push: GitHub Actions runs full CI (lint, unit, e2e).
  4. Merge to main: semantic‑release bumps version, publishes GitHub release.
  5. Publish: npm run build → upload dist.zip to Chrome Web Store.