gpt-taste
gpt taste
canvas-edit
Live Annotation Feedback Toolbar that overlays design review findings directly on web pages. Displays numbered badges on elements with issues, severity indicators, filtering, and screenshot capture. Integrates with design-review for real-time issue display. Triggers on "show annotations", "displa...
Full skill instructions
Floating toolbar that overlays design review findings directly on web pages in real-time. Displays numbered badges on problematic elements with severity-colored borders, hover popovers for issue details, and one-click screenshot capture.
Key features:
This is a complete redesign. Canvas-edit is now a viewing tool, not an editing tool.
| Old Functionality | New Behavior |
|---|---|
| Text editing via textarea | REMOVED |
| Style sliders (fontSize, etc.) | REMOVED |
| "Save All to Code" button | REPLACED with screenshot capture |
| contentEditable toggle | REMOVED |
edit command | REPLACED with inject command |
For live editing, use agent-canvas --with-edit instead.
uv package managerplaywright install chromiumSKILL_DIR=".claude/skills/canvas-edit/scripts"
# Inject toolbar with issues from JSON file
uv run $SKILL_DIR/canvas_edit.py inject http://localhost:3000 --issues issues.json
# Inject with issues from stdin
echo '[{"id": 1, "selector": "h1", "severity": "major", "title": "Contrast issue"}]' | \
uv run $SKILL_DIR/canvas_edit.py inject http://localhost:3000 --issues -
# Auto-screenshot on load
uv run $SKILL_DIR/canvas_edit.py inject http://localhost:3000 --issues issues.json --screenshot
# 1. Run design review to find issues
uv run .claude/skills/design-review/scripts/design_review.py review http://localhost:3000 \
--output-json issues.json
# 2. Inject annotations onto the page
uv run $SKILL_DIR/canvas_edit.py inject http://localhost:3000 --issues issues.json
# 3. User interacts with annotations, takes screenshots, closes browser
The floating toolbar (top-right by default) provides:
Status Display
Actions
Dragging
Each issue appears as a numbered badge on its target element:
┌─────────────────────────────────────┐
│ #3 Contrast issue [major] │
├─────────────────────────────────────┤
│ Color contrast ratio 3.2:1 fails │
│ WCAG AA requirement of 4.5:1 │
│ │
│ Pillar: Quality Craft │
│ Check: color-contrast │
├─────────────────────────────────────┤
│ Recommendation: │
│ Change text color to #1a1a1a or │
│ background to #ffffff │
└─────────────────────────────────────┘
Issues can come from design-review output or be manually constructed:
[
{
"id": 1,
"selector": ".hero-title",
"severity": "major",
"title": "Contrast ratio insufficient",
"description": "Text contrast 3.2:1 fails WCAG AA (4.5:1 required)",
"pillar": "Quality Craft",
"checkId": "color-contrast",
"recommendation": "Use darker text (#1a1a1a) or lighter background"
},
{
"id": 2,
"selector": "button.submit",
"severity": "minor",
"title": "Touch target too small",
"description": "Button is 36x28px, minimum is 44x44px",
"pillar": "Quality Craft",
"checkId": "touch-target-size"
}
]
| Field | Type | Description |
|---|---|---|
id | number | Unique identifier |
selector | string | CSS selector for target element |
severity | string | "blocking", "major", or "minor" |
title | string | Short issue title |
| Field | Type | Description |
|---|---|---|
description | string | Detailed explanation |
pillar | string | Design pillar category |
checkId | string | Identifier for the check that found this |
recommendation | string | Suggested fix |
Canvas-edit integrates with other skills via the canvas bus event system.
| Event | Payload | When |
|---|---|---|
annotation.clicked | {issueId, selector, severity} | User clicks a badge |
screenshot.requested | {directory, filename, issueCount} | Screenshot button clicked |
screenshot.captured | {path, issueCount} | Screenshot saved (Python-side) |
annotations.cleared | {} | Dismiss button clicked |
filter.changed | {severity, pillars} | Filter settings changed |
| Event | Action |
|---|---|
review.started | Show "Scanning..." state |
review.issue_found | Add badge for new issue |
review.completed | Show final count or success message |
capture_mode.changed | Hide/show toolbar for agent-eyes |
// In another skill's JavaScript
const bus = window.__canvasBus;
// Listen for annotation clicks
bus.subscribe('annotation.clicked', (payload) => {
console.log(`Issue ${payload.issueId} clicked: ${payload.selector}`);
});
// Add an issue programmatically
window.__annotationLayer.addIssue({
id: 99,
selector: '.problematic-element',
severity: 'major',
title: 'New issue found'
});
Screenshots are saved to .canvas/screenshots/ with timestamp filenames:
.canvas/screenshots/
├── 2026-01-23T15-30-45_5-issues.png
└── 2026-01-23T15-45-12_0-issues.png
Filename format: YYYY-MM-DDTHH-MM-SS_N-issues.png
Screenshots capture:
| State | Display | Trigger |
|---|---|---|
| Issues Found | "N Issues" + severity badges | Default when issues > 0 |
| All Clear | "✓ All looks good!" (randomized) | Zero issues after review completes |
| Scanning | "⟳ Analyzing..." with spinner | During review.started |
Success messages rotate randomly:
| Key | Action |
|---|---|
Tab | Navigate toolbar controls |
1-9 | Jump to badge by number |
Arrow keys | Navigate between visible badges |
Enter/Space | Activate focused button/badge |
Escape | Close open popover |
The toolbar is rendered inside a closed Shadow DOM:
document.querySelector()gpt taste
Premium brand-kit image generation for high-end identity systems, logo concepts, and visual-world presentations.
Premium website design-to-code skill that generates visual references first, then builds faithful frontend implementations.
Premium frontend image direction for landing pages and marketing sites, generating one distinct horizontal image per section.
Premium mobile app screen concepts and flows with clean hierarchy, strong imagery, and distinctive art direction.
Emil Kowalski's philosophy on UI polish, component design, and the invisible details that make software feel good.
Frontend design and iteration for production-grade interfaces, from concept to ship.
Reverse-engineer design tokens from public websites into starter token files for your project.
Builds an animation from scratch by making the decisions in the order that determines whether it feels right.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.
Chat-to-edit AI studio for product photos, portraits, branding, and video.
Generate your dream room in seconds.
Redesign your interior in seconds using AI
Transform rooms with AI-generated designs.
Transform Your Space with AI-Powered Japanese Interior Designs by Jife
AI-powered wireframes for non-designers.
Revolutionize Property Viewing with AI-Generated Floor Plans and Virtual Tours
Transform sketches into stunning architectural renders with AI.