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:
data-ai
license: Apache-2.0 NOT for unrelated tasks outside this domain.
development
Use when designing caching strategies (cache-aside, write-through, write-behind), implementing distributed locks, building rate limiters, leaderboards, real-time streams (XADD/consumer groups), pub/sub, or tuning eviction policies. Triggers: thundering-herd on cache miss, dogpile on key expiry, Redlock vs SET-NX-PX choice, sliding-window rate limiter, hot-key on a single cluster slot, big-key blowup, MULTI/EXEC across slots, KEYS in production. NOT for Redis Cluster operations/admin (different domain), embedded KV (SQLite, leveldb), in-process LRU caches, or Memcached.
tools
Drawing the `'use client'` boundary correctly in React Server Components apps (Next.js App Router, RSC frameworks) — leaf-pushing, slot composition, serialization rules, and environment poisoning prevention. Grounded in react.dev and Next.js 16 docs.
development
Use when designing rate limiting for an API, choosing between token bucket / sliding window / leaky bucket / fixed window, implementing it in Redis, deciding edge (Cloudflare/Upstash) vs origin enforcement, sizing per-user vs per-IP vs per-endpoint quotas, returning the right 429 response with Retry-After, or fixing the boundary-burst bug in fixed-window limiters. Triggers: 429 too many requests, INCR + EXPIRE, ZADD + ZREMRANGEBYSCORE + ZCARD, X-RateLimit-Remaining header, Cloudflare WAF rate limiting rules, Upstash @upstash/ratelimit, leaky bucket shaping vs policing, distributed rate limiter consistency. NOT for DDoS mitigation specifically (different scale), CAPTCHA / bot management, full WAF design, or per-user quota billing.