You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: add authenticated route support via Playwright storageState
Captures pages behind login using Playwright's storageState:
- auth.storageState — default auth file for all routes
- auth.profiles — named profiles (admin, student, etc.) for role-based capture
- auth.routes — per-route profile mapping (null = anonymous)
- Routes grouped by auth profile to minimize browser context creation
Generate auth state: npx playwright codegen --save-storage=.dojowatch/auth.json
For CI, use a setup script (Supabase, Clerk, NextAuth) that saves state before capture.
Integration test verifies anonymous vs authenticated capture produce different screenshots.
46 tests passing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
"description": "AI-native visual regression testing engine by Dojo Coding — capture screenshots with Playwright, pre-filter with pixelmatch, and analyze UI changes with LLM vision. Zero incremental cost.",
6
6
"owner": {
7
7
"name": "Dojo Coding",
@@ -11,7 +11,7 @@
11
11
{
12
12
"name": "dojowatch",
13
13
"description": "Visual regression testing powered by AI. Captures screenshots with Playwright, pre-filters with pixelmatch, and uses Claude (locally) or Gemini (in CI) to classify visual changes as regressions, intentional changes, or noise. Includes slash commands for interactive workflows and a CI orchestrator for GitHub Actions.",
Copy file name to clipboardExpand all lines: .claude-plugin/plugin.json
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
{
2
2
"name": "dojowatch",
3
-
"version": "0.4.0",
3
+
"version": "0.5.0",
4
4
"description": "AI-native visual regression testing engine by Dojo Coding — capture screenshots with Playwright, pre-filter with pixelmatch, and analyze UI changes with LLM vision. Zero incremental cost.",
Copy file name to clipboardExpand all lines: README.md
+29Lines changed: 29 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -194,6 +194,35 @@ Add `data-vr-mask` to elements that change between captures — timestamps, avat
194
194
195
195
DojoWatch replaces masked elements with solid placeholders before capture, preventing false positives.
196
196
197
+
### Authenticated Routes
198
+
199
+
Most apps have protected routes (dashboards, admin panels, settings). DojoWatch supports Playwright's `storageState` to capture these pages as a logged-in user:
200
+
201
+
```json
202
+
{
203
+
"auth": {
204
+
"storageState": ".dojowatch/auth.json",
205
+
"profiles": {
206
+
"admin": "e2e/.auth/admin.json",
207
+
"student": "e2e/.auth/student.json"
208
+
},
209
+
"routes": {
210
+
"/": null,
211
+
"/dashboard": "student",
212
+
"/admin": "admin"
213
+
}
214
+
}
215
+
}
216
+
```
217
+
218
+
Generate an auth state file by logging in manually:
For CI, use a setup script that authenticates via your provider's API (Supabase, Clerk, Auth.js) and saves the state file before DojoWatch runs.
225
+
197
226
### Storybook Support
198
227
199
228
Point `storybookUrl` at your Storybook instance. DojoWatch crawls `stories.json`, captures every story in isolation, and provides component-level regression detection — equivalent to Chromatic's core offering.
This opens a browser — log in manually, then close it. The session is saved.
84
+
85
+
For automated CI, use a setup script that logs in via your auth provider's API (Supabase, Clerk, NextAuth) and saves the storageState file. See DojoOS's `e2e/global-setup.ts` for an example.
0 commit comments