Greasy Sprocket extension skeleton template
  • TypeScript 70%
  • HTML 14.4%
  • CSS 10.3%
  • JavaScript 5.3%
Find a file
Claude Agent 2f4a02b361
All checks were successful
ci / validate (push) Successful in 12m2s
ci / release (push) Has been skipped
feat: extension skeleton template (canonical footer, CI, i18n, cws-listing)
2026-09-05 16:15:28 +02:00
.gitea/workflows feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00
docs feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00
public feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00
src feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00
tests feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00
.gitignore feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00
biome.json feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00
commitlint.config.cjs feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00
lefthook.yml feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00
LICENSE feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00
package.json feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00
pnpm-lock.yaml feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00
pnpm-workspace.yaml feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00
README.md feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00
tsconfig.json feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00
wxt.config.ts feat: extension skeleton template (canonical footer, CI, i18n, cws-listing) 2026-09-05 16:15:28 +02:00

Greasy Sprocket — Extension Skeleton Template

Base para TODAS las extensiones de Greasy Sprocket. Clona este repo, renombra y rellena los placeholders. Así el footer, CI, listing y hooks de calidad son idénticos en toda la flota y un fix se propaga copiando el fichero canónico.

Cómo crear una extensión nueva

# 1. Crear repo vacío en Gitea (API) y clonarlo
git clone https://git.greasysprocket.com/monyi/<ext-id>.git
cd <ext-id>

# 2. Copiar el esqueleto (sin .git del template)
cp -r ~/gs-work/ext-template/{.gitea,docs,public,src,tests,biome.json,commitlint.config.cjs,lefthook.yml,package.json,pnpm-workspace.yaml,tsconfig.json,.gitignore} .

# 3. Renombrar placeholders (ver SECTIONS abajo)
grep -rn "EXT_ID_HERE\|EXT_NAME_HERE\|EXT_DESCRIPTION_HERE" .

# 4. pnpm install && pnpm wxt prepare && pnpm run validate
# 5. Primer commit + push

Placeholders a rellenar

Placeholder Dónde Ejemplo (tabsnooze)
EXT_ID_HERE popup footer (?ext=) tabsnooze
EXT_NAME_HERE manifest name, footer title, listing TabSnooze
EXT_DESCRIPTION_HERE package.json + wxt.config.ts + listing "Snooze tabs for later..."
EXT_PERMISSIONS_HERE wxt.config.ts (solo las que uses, con justificación en listing) ["alarms","tabs","storage","contextMenus"]

Qué trae el esqueleto

  • Footer canónico (src/entrypoints/popup/footer.html + footer.css): 💬 Support / 🐛 Feedback / Support ext / Greasy Sprocket. IGUAL en todas las extensiones — solo cambia el ?ext= del . Si se arregla algo aquí, se copia a la flota.
  • CI Gitea Actions (.gitea/workflows/ci.yml): validate (typecheck+lint+test+build) en push a main + release job que sube el ZIP a la Release en tags v*. Requiere runner activo en la instancia.
  • i18n scaffold: public/_locales/en/messages.json + es/messages.json (14 claves estándar del footer y popup genérico) y default_locale: "en" ya en el manifest — sin esto Chrome rechaza la carga.
  • docs/cws-listing.md plantilla: single purpose, justificación de cada permiso, descripciones, checkboxes de privacidad.
  • docs/screenshots/ — vacío, para las 3 capturas 1280×800 (receta: references/cws-screenshots del skill browser-extension-publish).
  • Calidad: Biome + commitlint + lefthook (mismo config que tabsnooze).
  • Tests: Vitest con ejemplo de test de lógica pura en tests/.

Reglas de flota (no negociables)

  1. Sin nag screens. Nada se abre solo, nunca. El apoyo es el botón pasivo del footer.
  2. Footer idéntico en todas las extensiones (este template es la fuente de verdad).
  3. Sin ko-fi ni URLs externas en el footer: solo greasysprocket.com.
  4. default_locale + _locales/ van juntos — siempre los dos o ninguno.
  5. Permisos mínimos: solo los que el listing justifica. Prohibido <all_urls>.
  6. Manifest version = tag version = Release version (unificar antes de taggear).
  7. Pre-submit: seguir el checklist del skill browser-extension-publish (incluye verificar el ZIP descargado de la Release, no solo el build local).
  8. Cada extensión tiene su propia privacy policy en la web (página /privacy por extensión o sección dedicada).

Copiar el bloque .gs-footer* de footer.css al style.css del popup/sidepanel. Requiere que el tema defina --border y --text-muted.