No description
  • TypeScript 61.4%
  • Python 25.4%
  • CSS 8.3%
  • HTML 3.9%
  • Shell 0.5%
  • Other 0.5%
Find a file
Jose Juan Moñino 139f300f36
Some checks failed
ci / validate (push) Has been cancelled
fix: debounce storage.sync writes to prevent MAX_WRITE_OPERATIONS_PER_MINUTE quota
User feedback via greasysprocket.com/feedback reported:
TabFM: Uncaught (in promise) Error: This request exceeds the
MAX_WRITE_OPERATIONS_PER_MINUTE quota

Root cause: applySmartPick() calls saveSettings() on every visibilitychange
and every new tab open. With Smart Mode on, rapid tab switching exceeded
Chrome 120 writes/minute limit on storage.sync.

Fix: Debounce saveSettings() with 500ms coalescing window. Multiple
rapid calls batch into a single storage.sync.set() call. Also catches
quota errors gracefully so the UI does not crash.
2026-07-13 17:30:20 +02:00
.gitea/workflows feat: bootstrap saas-tpl-chrome-ext sub-template 2026-07-05 19:15:07 +02:00
.meta feat: bootstrap saas-tpl-chrome-ext sub-template 2026-07-05 19:15:07 +02:00
docs docs: add compact popup layout pattern reference 2026-07-06 16:23:56 +02:00
public feat: TabFM v1.0.0 — lo-fi radio new tab override 2026-07-08 01:23:51 +02:00
scripts feat: TabFM v1.0.0 — lo-fi radio new tab override 2026-07-08 01:23:51 +02:00
specs feat: bootstrap saas-tpl-chrome-ext sub-template 2026-07-05 19:15:07 +02:00
src fix: debounce storage.sync writes to prevent MAX_WRITE_OPERATIONS_PER_MINUTE quota 2026-07-13 17:30:20 +02:00
tests feat: TabFM Smart v2.0.0 — time-of-day + typing speed + usage learning 2026-07-12 15:14:40 +02:00
.editorconfig feat: bootstrap saas-tpl-chrome-ext sub-template 2026-07-05 19:15:07 +02:00
.gitignore feat: bootstrap saas-tpl-chrome-ext sub-template 2026-07-05 19:15:07 +02:00
AGENTS.md feat: migrate to Greasy Sprocket model — all free, no premium 2026-07-10 18:55:22 +02:00
biome.json feat: bootstrap saas-tpl-chrome-ext sub-template 2026-07-05 19:15:07 +02:00
commitlint.config.cjs feat: bootstrap saas-tpl-chrome-ext sub-template 2026-07-05 19:15:07 +02:00
lefthook.yml feat: bootstrap saas-tpl-chrome-ext sub-template 2026-07-05 19:15:07 +02:00
LICENSE feat: bootstrap saas-tpl-chrome-ext sub-template 2026-07-05 19:15:07 +02:00
package.json fix: debounce storage.sync writes to prevent MAX_WRITE_OPERATIONS_PER_MINUTE quota 2026-07-13 17:30:20 +02:00
pnpm-lock.yaml feat: bootstrap saas-tpl-chrome-ext sub-template 2026-07-05 19:15:07 +02:00
pnpm-workspace.yaml feat: bootstrap saas-tpl-chrome-ext sub-template 2026-07-05 19:15:07 +02:00
README.md feat: bootstrap saas-tpl-chrome-ext sub-template 2026-07-05 19:15:07 +02:00
tsconfig.json feat: bootstrap saas-tpl-chrome-ext sub-template 2026-07-05 19:15:07 +02:00
wxt.config.ts feat: TabFM Smart v2.0.0 — time-of-day + typing speed + usage learning 2026-07-12 15:14:40 +02:00

saas-tpl-chrome-ext

Chrome MV3 extension sub-template for d0a1 SDD. WXT 0.20.27, TypeScript strict, Biome 2.x, Vitest.

Instanciado vía sdd-init-tpl:

bash scripts/assemble.sh install chrome-extension my-extension

Stack

Layer Tool Version
Build WXT 0.20.27
Language TypeScript 6.0.3 (strict)
Lint/Format Biome 2.5.1 (no ESLint/Prettier)
Testing Vitest 4.1.9
Validation Zod 4.4.3
Commits commitlint 21.1.0
Hooks lefthook 2.1.9 (Go binary)

Develop

pnpm install
pnpm wxt prepare
pnpm dev   # launches WXT dev browser

Build

pnpm build
# Load .output/chrome-mv3 as unpacked extension in Chrome

Validate

pnpm validate  # typecheck + lint + test

License

Apache-2.0