skills/gestalt-web-design/SKILL.md
Applies Gestalt psychology principles to web layout, spacing, grouping, and visual hierarchy. Proximity, similarity, closure, continuity, figure-ground, common fate, Pragnanz — translated into CSS, component structure, and information architecture. Activate on 'gestalt', 'visual grouping', 'proximity spacing', 'visual hierarchy', 'perceptual organization', 'layout psychology', 'whitespace strategy'. NOT for color theory (use color-theory-palette-harmony-expert), not for accessibility auditing (use design-accessibility-auditor).
npx skillsauth add curiositech/windags-skills gestalt-web-designInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Applies Gestalt psychology principles to create interfaces that feel "obvious" to users by aligning with hardwired patterns of human visual processing.
IF elements are functionally related BUT visually different:
└── Apply proximity first (group with spacing)
└── Then break similarity deliberately (e.g., accent color on primary CTA)
└── Use 3:1 spacing ratio minimum between groups
IF elements look similar BUT serve different functions:
└── Increase visual difference (color, size, or shape)
└── Maintain proximity grouping for actual relationships
└── Test: can user distinguish purpose at 3-second glance?
IF user needs to scan many similar items:
└── Perfect similarity for easy scanning
└── Break similarity only for critical state changes (error, selected)
└── Use consistent spacing grid throughout
IF content requires more than 4 spacing levels:
└── Audit for over-segmentation
└── Combine related groups using similarity instead
└── Reserve spacing jumps for major semantic boundaries
IF equal spacing is creating false groups:
└── Implement 2:1 minimum ratio between spacing levels
└── Map spacing to information architecture
└── Test grouping perception with 5-second exposure
IF multiple elements compete for attention:
└── Apply elevation hierarchy (ground/surface/raised/overlay)
└── Dim background elements using opacity/desaturation
└── Ensure only ONE primary figure per screen area
IF modal/overlay feels weak:
└── Darken backdrop to 50-70% opacity
└── Add substantial shadow to modal container
└── Remove competing elements from z-index stack
Symptoms: Users report "too busy" or "overwhelming" despite minimal content Diagnosis: Too many visual groups breaking proximity law Fix: Consolidate related items using tighter spacing, remove unnecessary dividers, establish 3-tier spacing system maximum
Symptoms: Users click wrong targets, miss related controls, confused navigation flow Diagnosis: Insufficient proximity differentiation between groups Fix: Increase inter-group spacing to 2.5x+ intra-group spacing, audit click heatmaps for misdirected interactions
Symptoms: Users expect identical behavior from visually similar elements that function differently
Diagnosis: Inconsistent visual treatment for different interaction types
Fix: Create distinct visual categories for each interaction pattern, audit all buttons/links for consistent styling within function type
Symptoms: Users cannot locate primary content or miss critical CTAs Diagnosis: Multiple elements competing for figure status, weak figure-ground separation Fix: Establish clear elevation hierarchy, ensure single primary action per view, increase contrast between content and navigation areas
Symptoms: Users abandon tasks before completion, report "getting lost" Diagnosis: Continuity violations breaking expected visual flow Fix: Create alignment grids, add visual connectors (arrows, lines, number sequences), test completion rates before/after continuity improvements
Initial State: Equal 16px spacing throughout, bordered cards everywhere, inconsistent button styles User Feedback: "Can't tell what goes together"
Step 1 - Proximity Audit:
Step 2 - Similarity Audit:
Step 3 - Closure Application:
Step 4 - Figure-Ground Enhancement:
Result: Task completion up 23%, "ease of use" rating improved from 3.2 to 4.6
Expert vs Novice:
Do NOT use for:
Delegate when:
tools
Building resilient distributed systems with circuit breakers, retries with full-jitter exponential backoff, retry budgets (per-request 3-attempt + per-client 10% ratio per Google SRE), deadline propagation, and the cascading-failure math (4 layers × 3 retries = 64x amplification). Grounded in Resilience4j, Microsoft Cloud Patterns, AWS Architecture Blog (Marc Brooker), and Google SRE Book.
testing
Designing HTTP cache headers that work correctly across browsers, CDNs, and shared proxies — `Cache-Control` directives per RFC 9111, `stale-while-revalidate` and `stale-if-error` per RFC 5861, the Vary header for varying responses, and surrogate keys for tag-based purging. Grounded in IETF RFCs and Cloudflare/Fastly docs.
development
Use when designing or fixing a Content Security Policy on a real site, choosing between nonce-based and hash-based CSP, adding strict-dynamic, debugging "Refused to execute inline script" errors, deploying CSP in report-only mode first, configuring report-to / report-uri, or auditing an existing policy for unsafe-inline / unsafe-eval / wildcards. Triggers: "CSP blocks legitimate inline script", strict-dynamic, nonce-{RANDOM}, sha256-{HASH}, object-src none, base-uri none, frame-ancestors, Trusted Types, X-Content-Security-Policy obsolete, report-only vs enforced. NOT for general HTTP security headers (HSTS, COOP/COEP), Trusted Types deep dive, CORS configuration, or building a WAF.
tools
Choosing and operating an HTTP API versioning strategy that doesn't break clients — Stripe's date-based pinned versions, the Deprecation/Sunset header pair (RFC 9745 + RFC 8594), URI vs header vs media-type approaches, and the version-transformer pattern. Grounded in Stripe's published architecture and IETF RFCs.