diff --git a/.gitmodules b/.gitmodules index 00fccba7..e0b2b5e4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,3 +13,6 @@ [submodule "apps/readest-app/src-tauri/plugins/tauri-plugin-turso"] path = apps/readest-app/src-tauri/plugins/tauri-plugin-turso url = https://github.com/readest/tauri-plugin-turso.git +[submodule "apps/readest-app/.claude/skills/gstack"] + path = apps/readest-app/.claude/skills/gstack + url = https://github.com/garrytan/gstack.git diff --git a/.prettierignore b/.prettierignore index d465bd46..570bebb5 100644 --- a/.prettierignore +++ b/.prettierignore @@ -22,6 +22,9 @@ gen # Submodules (External Repos) packages +# Claude Code Skills & Config +apps/readest-app/.claude + # Vendored Assets (Generated/External Code) apps/readest-app/public/*.js apps/readest-app/public/vendor diff --git a/apps/readest-app/.claude/skills/gstack b/apps/readest-app/.claude/skills/gstack new file mode 160000 index 00000000..78c207ef --- /dev/null +++ b/apps/readest-app/.claude/skills/gstack @@ -0,0 +1 @@ +Subproject commit 78c207efb42c90f84b5e383cd4aba39ecff29896 diff --git a/apps/readest-app/.gitignore b/apps/readest-app/.gitignore index 838fa94c..b1617c6e 100644 --- a/apps/readest-app/.gitignore +++ b/apps/readest-app/.gitignore @@ -65,4 +65,6 @@ src-tauri/gen /dist/ -.claude/settings.local.json \ No newline at end of file +.claude/settings.local.json +.claude/skills + diff --git a/apps/readest-app/AGENTS.md b/apps/readest-app/AGENTS.md index 9a0e65bd..54afaa05 100644 --- a/apps/readest-app/AGENTS.md +++ b/apps/readest-app/AGENTS.md @@ -67,3 +67,25 @@ See [docs/i18n.md](docs/i18n.md) for the key-as-content translation approach, `s ### Safe Area Insets See [docs/safe-area-insets.md](docs/safe-area-insets.md) for rules on handling top/bottom insets for UI elements near screen edges. + +## Web Browsing & QA (gstack) + +For all web browsing, QA testing, and site interaction, use the `/browse` skill from gstack. **Never use `mcp__claude-in-chrome__*` tools directly.** + +Available gstack skills: + +- `/plan-ceo-review` — CEO/founder-mode plan review +- `/plan-eng-review` — Eng manager-mode plan review +- `/plan-design-review` — Designer's eye review of a live site +- `/design-consultation` — Design system consultation +- `/review` — Pre-landing PR review +- `/ship` — Ship workflow (merge, test, review, bump, PR) +- `/browse` — Fast headless browser for QA and site interaction +- `/qa` — QA test and fix bugs +- `/qa-only` — QA report only (no fixes) +- `/qa-design-review` — Designer's eye QA with fixes +- `/setup-browser-cookies` — Import cookies for authenticated testing +- `/retro` — Weekly engineering retrospective +- `/document-release` — Post-ship documentation update + +If gstack skills aren't working, run `cd .claude/skills/gstack && ./setup` to build the binary and register skills. diff --git a/apps/readest-app/eslint.config.mjs b/apps/readest-app/eslint.config.mjs index c054cbe0..2b775185 100644 --- a/apps/readest-app/eslint.config.mjs +++ b/apps/readest-app/eslint.config.mjs @@ -27,6 +27,7 @@ const eslintConfig = defineConfig([ '.next/**', '.open-next/**', '.wrangler/**', + '.claude/**', 'dist/**', 'out/**', 'build/**', diff --git a/apps/readest-app/vitest.config.mts b/apps/readest-app/vitest.config.mts index 4cf201f8..d2c291ea 100644 --- a/apps/readest-app/vitest.config.mts +++ b/apps/readest-app/vitest.config.mts @@ -16,6 +16,12 @@ export default defineConfig({ test: { environment: 'jsdom', setupFiles: ['./vitest.setup.ts'], - exclude: ['**/node_modules/**', '**/dist/**', '**/*.browser.test.ts', '**/*.tauri.test.ts'], + exclude: [ + '**/node_modules/**', + '**/dist/**', + '**/.claude/**', + '**/*.browser.test.ts', + '**/*.tauri.test.ts', + ], }, });