name: take-doc-screenshots description: Take screenshots of the running pgconsole app for documentation. Use when updating docs with screenshots or adding images to .mdx files. disable-model-invocation: false argument-hint: [page-or-feature]
Take Documentation Screenshots
Capture screenshots of the running pgconsole app at http://localhost:5173 for use in documentation.
Prerequisites
- The dev server must be running (
pnpm dev) shot-scrapermust be installed (pipx install shot-scraper && shot-scraper install)cwebpmust be installed (brew install webp)
Authentication
Login credentials are in pgconsole.toml under [[users]]. Use the first user entry.
- Read
pgconsole.tomlto find the email and password from the first[[users]]entry - Call the login API to get a session token:
curl -s -c cookies.txt -X POST http://localhost:5173/api/auth/login \ -H 'Content-Type: application/json' \ -d '{"email":"<email>","password":"<password>"}' - Extract the
pgconsole_tokencookie value from cookies.txt - Create a Playwright auth state JSON file:
{ "cookies": [{ "name": "pgconsole_token", "value": "<token>", "domain": "localhost", "path": "/", "httpOnly": true, "secure": false, "sameSite": "Lax" }], "origins": [] }
Taking Screenshots
Write a Playwright script (.mjs file in the scratchpad directory) that:
- Launches Chromium with
viewport: { width: 1440, height: 900 }(nodeviceScaleFactor— use 1x) - Sets the auth cookie via
context.addCookies() - Navigates to
http://localhost:5173 - Uses Playwright actions (click, type, keyboard) to navigate to the desired state
- Saves screenshots as PNG
CodeMirror Interaction
The SQL editor uses CodeMirror 6. To type into it:
- Click
.cm-contentto focus - Use
page.keyboard.type('SQL here', { delay: 5 })to type - Use
page.keyboard.press('Control+Space')for autocomplete - Use
page.keyboard.press('Meta+a')to select all before replacing content - Do NOT try to access
cmViewfrom the DOM — it's not exposed
UI Navigation
Key buttons to interact with:
buttonwith textSQL— opens a new query tabbuttonwith textRun— executes the querybuttonwith textFormat— opens format dropdownbuttonwith textQuick SQL— opens quick SQL dropdownbuttonwith textProcesses— opens processes modal- Right-click on
.cm-contentfor context menu
Dismissing Overlays
After capturing dropdown/modal screenshots, always dismiss with:
await page.keyboard.press('Escape');
await page.waitForTimeout(500);
An open overlay blocks clicks on other elements.
Image Processing
- Convert PNGs to WebP:
cwebp -q 90 input.png -o output.webp - Store in
docs/images/features/<feature-name>/(matchingdocs/features/<feature-name>.mdx) - Reference in MDX as
 - Clean up temporary PNG files after conversion
Image Convention
- Format: WebP (
.webp), quality 90 - Dimensions: 1440x900 (1x resolution)
- Location:
docs/images/mirroring thedocs/structure - Naming:
<feature>-<description>.webp(e.g.,sql-editor-autocomplete.webp) - Alt text: brief description of what the screenshot shows