@nerdev/skillset 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +351 -0
- package/bin/skillset.mjs +205 -0
- package/curations/README.md +53 -0
- package/curations/TEMPLATE/WHY.md +23 -0
- package/curations/TEMPLATE/overlay/SKILL.md +6 -0
- package/curations/impeccable/WHY.md +34 -0
- package/curations/impeccable/overlay/SKILL.md +116 -0
- package/package.json +43 -0
- package/scripts/ste-gate.mjs +39 -0
- package/scripts/ste-lint.py +201 -0
- package/scripts/sync.mjs +174 -0
- package/skills/ai-agent/agent-docs-writer/SKILL.md +105 -0
- package/skills/ai-agent/agent-docs-writer/references/principles.md +73 -0
- package/skills/ai-agent/agent-docs-writer/templates/AGENTS.template.md +44 -0
- package/skills/ai-agent/agent-docs-writer/templates/README.template.md +19 -0
- package/skills/ai-agent/ultra-context-engine/SKILL.md +941 -0
- package/skills/architecture/blueprint/SKILL.md +191 -0
- package/skills/architecture/code-tour/SKILL.md +204 -0
- package/skills/architecture/progress-guard/SKILL.md +148 -0
- package/skills/architecture/search-first/SKILL.md +97 -0
- package/skills/backend/api-design/SKILL.md +456 -0
- package/skills/backend/auth/SKILL.md +596 -0
- package/skills/backend/database/SKILL.md +431 -0
- package/skills/backend/realtime/SKILL.md +670 -0
- package/skills/backend/security/SKILL.md +590 -0
- package/skills/business/brag/SKILL.md +177 -0
- package/skills/business/brag/assets/music/README.md +20 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.json +3846 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.md +35 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.json +1826 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.md +35 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.json +2266 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.md +35 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.json +2806 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.md +35 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.json +2796 -0
- package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.md +35 -0
- package/skills/business/brag/assets/music/happy-beats-business-moves-vol-1-by-ende-dot-app.mp3 +0 -0
- package/skills/business/brag/assets/music/happy-beats-business-moves-vol-10-by-ende-dot-app.mp3 +0 -0
- package/skills/business/brag/assets/music/happy-beats-business-moves-vol-11-by-ende-dot-app.mp3 +0 -0
- package/skills/business/brag/assets/music/happy-beats-business-moves-vol-12-by-ende-dot-app.mp3 +0 -0
- package/skills/business/brag/assets/music/happy-beats-business-moves-vol-9-by-ende-dot-app.mp3 +0 -0
- package/skills/business/brag/assets/sfx/casino/card-fan-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-fan-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-place-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-place-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-place-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-place-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-shove-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-shove-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-shove-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-shove-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-shuffle.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-5.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-6.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-7.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/card-slide-8.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/cards-pack-open-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/cards-pack-open-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chip-lay-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chip-lay-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chip-lay-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-collide-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-collide-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-collide-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-collide-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-handle-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-handle-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-handle-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-handle-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-handle-6.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-5.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/chips-stack-6.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-grab-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-grab-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-shake-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-shake-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-shake-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-throw-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-throw-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/dice-throw-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/die-throw-1.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/die-throw-2.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/die-throw-3.ogg +0 -0
- package/skills/business/brag/assets/sfx/casino/die-throw-4.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_carpet_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_carpet_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_carpet_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_concrete_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_concrete_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_concrete_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_concrete_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_concrete_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_grass_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_grass_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_grass_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_grass_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_grass_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_snow_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_snow_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_snow_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_snow_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_snow_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_wood_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_wood_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_wood_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_wood_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/footstep_wood_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactBell_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactBell_heavy_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactBell_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGeneric_light_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGeneric_light_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGeneric_light_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGeneric_light_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGeneric_light_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_light_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_light_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_light_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactGlass_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_light_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_light_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMetal_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactMining_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlank_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlank_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlank_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlank_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlank_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_light_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_light_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_light_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_light_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_light_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPlate_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactPunch_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactSoft_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactTin_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactTin_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactTin_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactTin_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactTin_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_heavy_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_heavy_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_heavy_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_heavy_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_heavy_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_light_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_light_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_light_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_light_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_light_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_medium_000.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_medium_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_medium_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_medium_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/impact/impactWood_medium_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/bong_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/click_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/click_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/click_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/click_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/click_005.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/drop_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/drop_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/drop_003.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/error_005.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/error_006.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/glitch_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/glitch_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/select_008.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_001.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_002.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_004.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_005.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_006.ogg +0 -0
- package/skills/business/brag/assets/sfx/interface/switch_007.ogg +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-001.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-002.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-003.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-004.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-005.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-006.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-007.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-008.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-009.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-010.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-011.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-012.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-013.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-014.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-015.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-016.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-017.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-018.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-019.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-020.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-021.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-022.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-023.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-024.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-025.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-026.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-027.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-028.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-029.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-030.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-031.wav +0 -0
- package/skills/business/brag/assets/sfx/keyboard/keypress-032.wav +0 -0
- package/skills/business/brag/assets/sfx/sfx-analysis.json +15584 -0
- package/skills/business/brag/assets/sfx/sfx-analysis.md +75 -0
- package/skills/business/brag/assets/sfx/ui/click1.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/click2.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/click3.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/click4.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/click5.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/mouseclick1.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/rollover1.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/rollover2.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/rollover4.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/rollover5.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch1.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch10.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch11.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch12.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch13.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch14.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch15.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch16.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch17.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch18.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch19.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch2.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch20.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch21.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch22.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch23.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch24.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch25.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch26.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch27.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch28.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch29.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch3.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch30.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch31.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch32.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch33.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch34.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch35.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch36.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch37.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch38.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch4.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch5.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch6.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch7.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch8.ogg +0 -0
- package/skills/business/brag/assets/sfx/ui/switch9.ogg +0 -0
- package/skills/business/brag/references/audio.md +307 -0
- package/skills/business/brag/references/step-1-inspect.md +133 -0
- package/skills/business/brag/references/step-2-plan.md +234 -0
- package/skills/business/brag/references/step-3-compose.md +210 -0
- package/skills/business/brag/references/step-4-deliver.md +168 -0
- package/skills/business/brag/references/tones.md +231 -0
- package/skills/business/brag/scripts/analyze_music_cues.py +309 -0
- package/skills/business/brag/scripts/pyproject.toml +14 -0
- package/skills/business/brag/scripts/uv.lock +819 -0
- package/skills/business/copywriting/SKILL.md +178 -0
- package/skills/business/customer-research/SKILL.md +259 -0
- package/skills/business/freelancing/SKILL.md +679 -0
- package/skills/business/launch/SKILL.md +273 -0
- package/skills/business/marketing-psychology/SKILL.md +364 -0
- package/skills/business/pricing/SKILL.md +233 -0
- package/skills/business/resume-revamp-jake-ats/SKILL.md +64 -0
- package/skills/business/startup-founder/SKILL.md +400 -0
- package/skills/business/startup-founder/references/funding.md +48 -0
- package/skills/business/startup-founder/references/further-reading.md +132 -0
- package/skills/business/startup-founder/references/gtm-tools.md +57 -0
- package/skills/business/startup-founder/references/legal-india.md +36 -0
- package/skills/business/startup-founder/references/marketing/README.md +16 -0
- package/skills/business/startup-founder/references/marketing/cold-email.md +172 -0
- package/skills/business/startup-founder/references/marketing/competitors.md +245 -0
- package/skills/business/startup-founder/references/marketing/customer-research.md +276 -0
- package/skills/business/startup-founder/references/marketing/free-tools.md +168 -0
- package/skills/business/startup-founder/references/marketing/launch.md +343 -0
- package/skills/business/startup-founder/references/marketing/marketing-plan.md +270 -0
- package/skills/business/startup-founder/references/marketing/pricing.md +237 -0
- package/skills/business/startup-founder/references/marketing/product-marketing.md +250 -0
- package/skills/business/startup-founder/references/validation.md +267 -0
- package/skills/devops/deployments/SKILL.md +339 -0
- package/skills/devops/git-ci/SKILL.md +372 -0
- package/skills/devops/performance/SKILL.md +523 -0
- package/skills/devops/testing/SKILL.md +558 -0
- package/skills/engineering/code-review/SKILL.md +149 -0
- package/skills/engineering/coding-standards/SKILL.md +229 -0
- package/skills/engineering/product-engineering/SKILL.md +219 -0
- package/skills/engineering/senior-engineer-prompts/SKILL.md +145 -0
- package/skills/engineering/tdd-workflow/SKILL.md +178 -0
- package/skills/engineering/verification-loop/SKILL.md +199 -0
- package/skills/nerdev/nerdev-abstraction/SKILL.md +412 -0
- package/skills/nerdev/nerdev-docs/SKILL.md +527 -0
- package/skills/nerdev/nerdev-docs/templates/adr-template.md +39 -0
- package/skills/nerdev/nerdev-docs/templates/contributing-template.md +140 -0
- package/skills/nerdev/nerdev-docs/templates/deploy-template.md +426 -0
- package/skills/nerdev/nerdev-docs/templates/design-template.md +105 -0
- package/skills/nerdev/nerdev-docs/templates/incident-template.md +66 -0
- package/skills/nerdev/nerdev-monorepo/SKILL.md +522 -0
- package/skills/quality/output-skill/SKILL.md +49 -0
- package/skills/quality/unslop/SKILL.md +67 -0
- package/skills/ui/animaxxing/SKILL.md +58 -0
- package/skills/ui/animaxxing/agents/openai.yaml +7 -0
- package/skills/ui/animaxxing/references/effect-restoration.md +26 -0
- package/skills/ui/animaxxing/references/motion-vocabulary.md +142 -0
- package/skills/ui/animaxxing/references/recipes/blast-off.md +119 -0
- package/skills/ui/animaxxing/references/recipes/particle-effects.md +718 -0
- package/skills/ui/animaxxing/references/recipes/particle-field.md +428 -0
- package/skills/ui/animaxxing/references/recipes/route-letters.md +205 -0
- package/skills/ui/animaxxing/references/recipes/speak-in.md +181 -0
- package/skills/ui/animaxxing/references/recipes/split-entrances.md +345 -0
- package/skills/ui/animaxxing/references/recipes/wave.md +144 -0
- package/skills/ui/animaxxing/references/text-stability.md +68 -0
- package/skills/ui/animaxxing/references/verification.md +44 -0
- package/skills/ui/ask-animation/SKILL.md +178 -0
- package/skills/ui/ask-base-ui/SKILL.md +400 -0
- package/skills/ui/ask-cmdk/SKILL.md +315 -0
- package/skills/ui/ask-command-menu/SKILL.md +262 -0
- package/skills/ui/ask-drawer/SKILL.md +235 -0
- package/skills/ui/ask-form/SKILL.md +229 -0
- package/skills/ui/ask-gsap/SKILL.md +435 -0
- package/skills/ui/ask-modal/SKILL.md +145 -0
- package/skills/ui/ask-motion/SKILL.md +339 -0
- package/skills/ui/ask-rhf/SKILL.md +388 -0
- package/skills/ui/ask-sonner/API.md +64 -0
- package/skills/ui/ask-sonner/SKILL.md +88 -0
- package/skills/ui/ask-table/SKILL.md +253 -0
- package/skills/ui/ask-tanstack-table/SKILL.md +490 -0
- package/skills/ui/ask-toast/SKILL.md +163 -0
- package/skills/ui/ask-vaul/SKILL.md +291 -0
- package/skills/ui/ask-virtual-list/SKILL.md +304 -0
- package/skills/ui/ask-virtuoso/SKILL.md +332 -0
- package/skills/ui/email-craft/SKILL.md +258 -0
- package/skills/ui/frontend-craftsmanship/SKILL.md +462 -0
- package/skills/ui/gsap-astro/SKILL.md +56 -0
- package/skills/ui/gsap-astro/agents/openai.yaml +7 -0
- package/skills/ui/gsap-astro/references/client-router-navigation.md +139 -0
- package/skills/ui/gsap-astro/references/initialization.md +87 -0
- package/skills/ui/gsap-astro/references/motion-system.md +152 -0
- package/skills/ui/gsap-astro/references/scripts-and-islands.md +65 -0
- package/skills/ui/gsap-astro/references/verification.md +44 -0
- package/skills/ui/gsap-core/SKILL.md +254 -0
- package/skills/ui/gsap-frameworks/SKILL.md +266 -0
- package/skills/ui/gsap-nextjs/SKILL.md +51 -0
- package/skills/ui/gsap-nextjs/agents/openai.yaml +7 -0
- package/skills/ui/gsap-nextjs/references/app-router-navigation.md +189 -0
- package/skills/ui/gsap-nextjs/references/initialization.md +87 -0
- package/skills/ui/gsap-nextjs/references/motion-system.md +158 -0
- package/skills/ui/gsap-nextjs/references/verification.md +40 -0
- package/skills/ui/gsap-nuxt/SKILL.md +56 -0
- package/skills/ui/gsap-nuxt/agents/openai.yaml +7 -0
- package/skills/ui/gsap-nuxt/references/initialization.md +87 -0
- package/skills/ui/gsap-nuxt/references/motion-system.md +161 -0
- package/skills/ui/gsap-nuxt/references/navigation.md +145 -0
- package/skills/ui/gsap-nuxt/references/page-transitions.md +107 -0
- package/skills/ui/gsap-nuxt/references/verification.md +42 -0
- package/skills/ui/gsap-performance/SKILL.md +79 -0
- package/skills/ui/gsap-plugins/SKILL.md +433 -0
- package/skills/ui/gsap-react/SKILL.md +136 -0
- package/skills/ui/gsap-react-router/SKILL.md +55 -0
- package/skills/ui/gsap-react-router/agents/openai.yaml +7 -0
- package/skills/ui/gsap-react-router/references/initialization.md +87 -0
- package/skills/ui/gsap-react-router/references/motion-system.md +158 -0
- package/skills/ui/gsap-react-router/references/react-router-navigation.md +165 -0
- package/skills/ui/gsap-react-router/references/route-lifetime.md +74 -0
- package/skills/ui/gsap-react-router/references/verification.md +42 -0
- package/skills/ui/gsap-scrolltrigger/SKILL.md +296 -0
- package/skills/ui/gsap-sveltekit/SKILL.md +54 -0
- package/skills/ui/gsap-sveltekit/agents/openai.yaml +7 -0
- package/skills/ui/gsap-sveltekit/references/initialization.md +87 -0
- package/skills/ui/gsap-sveltekit/references/motion-system.md +156 -0
- package/skills/ui/gsap-sveltekit/references/page-lifetime.md +63 -0
- package/skills/ui/gsap-sveltekit/references/sveltekit-navigation.md +160 -0
- package/skills/ui/gsap-sveltekit/references/verification.md +41 -0
- package/skills/ui/gsap-tanstack-router/SKILL.md +56 -0
- package/skills/ui/gsap-tanstack-router/agents/openai.yaml +7 -0
- package/skills/ui/gsap-tanstack-router/references/initialization.md +87 -0
- package/skills/ui/gsap-tanstack-router/references/motion-system.md +160 -0
- package/skills/ui/gsap-tanstack-router/references/route-lifetime.md +66 -0
- package/skills/ui/gsap-tanstack-router/references/tanstack-navigation.md +156 -0
- package/skills/ui/gsap-tanstack-router/references/verification.md +41 -0
- package/skills/ui/gsap-timeline/SKILL.md +107 -0
- package/skills/ui/gsap-utils/SKILL.md +284 -0
- package/skills/ui/gsap-vanilla/SKILL.md +63 -0
- package/skills/ui/gsap-vanilla/agents/openai.yaml +7 -0
- package/skills/ui/gsap-vanilla/references/cross-document-navigation.md +54 -0
- package/skills/ui/gsap-vanilla/references/initialization.md +87 -0
- package/skills/ui/gsap-vanilla/references/motion-system.md +150 -0
- package/skills/ui/gsap-vanilla/references/page-load.md +96 -0
- package/skills/ui/gsap-vanilla/references/spa-navigation.md +70 -0
- package/skills/ui/gsap-vanilla/references/verification.md +41 -0
- package/skills/ui/house-style/SKILL.md +366 -0
- package/skills/ui/imagegen/SKILL.md +49 -0
- package/skills/ui/imagegen/references/brandkit.md +48 -0
- package/skills/ui/imagegen/references/image-to-code.md +56 -0
- package/skills/ui/imagegen/references/mobile.md +58 -0
- package/skills/ui/imagegen/references/web.md +63 -0
- package/skills/ui/impeccable/SKILL.md +116 -0
- package/skills/ui/impeccable/reference/adapt.md +318 -0
- package/skills/ui/impeccable/reference/adapt.native.md +58 -0
- package/skills/ui/impeccable/reference/android.md +46 -0
- package/skills/ui/impeccable/reference/animate.md +89 -0
- package/skills/ui/impeccable/reference/audit.md +137 -0
- package/skills/ui/impeccable/reference/audit.native.md +139 -0
- package/skills/ui/impeccable/reference/bolder.md +33 -0
- package/skills/ui/impeccable/reference/clarify.md +94 -0
- package/skills/ui/impeccable/reference/colorize.md +86 -0
- package/skills/ui/impeccable/reference/craft-floor.md +44 -0
- package/skills/ui/impeccable/reference/craft.md +5 -0
- package/skills/ui/impeccable/reference/critique.md +806 -0
- package/skills/ui/impeccable/reference/degraded/asset-producer.md +37 -0
- package/skills/ui/impeccable/reference/degraded/documenter.md +24 -0
- package/skills/ui/impeccable/reference/degraded/finish-reviewer.md +38 -0
- package/skills/ui/impeccable/reference/degraded/manual-edit-applier.md +92 -0
- package/skills/ui/impeccable/reference/delight.md +70 -0
- package/skills/ui/impeccable/reference/distill.md +111 -0
- package/skills/ui/impeccable/reference/doctor.md +54 -0
- package/skills/ui/impeccable/reference/document.md +416 -0
- package/skills/ui/impeccable/reference/extract.md +69 -0
- package/skills/ui/impeccable/reference/generate.md +101 -0
- package/skills/ui/impeccable/reference/harden.md +345 -0
- package/skills/ui/impeccable/reference/hooks.md +111 -0
- package/skills/ui/impeccable/reference/init.md +131 -0
- package/skills/ui/impeccable/reference/ios.md +51 -0
- package/skills/ui/impeccable/reference/layout.md +84 -0
- package/skills/ui/impeccable/reference/live-setup.md +104 -0
- package/skills/ui/impeccable/reference/live.md +325 -0
- package/skills/ui/impeccable/reference/new-work.md +145 -0
- package/skills/ui/impeccable/reference/onboard.md +234 -0
- package/skills/ui/impeccable/reference/operate.md +61 -0
- package/skills/ui/impeccable/reference/optimize.md +258 -0
- package/skills/ui/impeccable/reference/overdrive.md +127 -0
- package/skills/ui/impeccable/reference/polish.md +105 -0
- package/skills/ui/impeccable/reference/quieter.md +99 -0
- package/skills/ui/impeccable/reference/routing.md +24 -0
- package/skills/ui/impeccable/reference/shape.md +59 -0
- package/skills/ui/impeccable/reference/typeset.md +80 -0
- package/skills/ui/impeccable/reference/visualize.md +46 -0
- package/skills/ui/impeccable/scripts/VERSION +1 -0
- package/skills/ui/impeccable/scripts/command-metadata.json +98 -0
- package/skills/ui/impeccable/scripts/data/font-index-failures.json +121 -0
- package/skills/ui/impeccable/scripts/data/font-index.json +1 -0
- package/skills/ui/impeccable/scripts/impeccable +206 -0
- package/skills/ui/impeccable/scripts/impeccable.cmd +214 -0
- package/skills/ui/impeccable/scripts/live-browser-dom.js +167 -0
- package/skills/ui/impeccable/scripts/live-browser-ignores.js +242 -0
- package/skills/ui/impeccable/scripts/live-browser-session.js +144 -0
- package/skills/ui/impeccable/scripts/live-browser.js +13510 -0
- package/skills/ui/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/skills/ui/motion/SKILL.md +207 -0
- package/skills/ui/pick-ui-library/SKILL.md +85 -0
- package/skills/ui/product-messaging/SKILL.md +163 -0
- package/skills/ui/product-site/SKILL.md +465 -0
- package/skills/ui/prototype/PICKER.md +197 -0
- package/skills/ui/prototype/SKILL.md +98 -0
- package/skills/ui/refero-design/SKILL.md +534 -0
- package/skills/ui/refero-design/agents/openai.yaml +4 -0
- package/skills/ui/refero-design/references/anti-ai-slop.md +292 -0
- package/skills/ui/refero-design/references/color.md +563 -0
- package/skills/ui/refero-design/references/copywriting.md +222 -0
- package/skills/ui/refero-design/references/craft-details.md +525 -0
- package/skills/ui/refero-design/references/example-workflow.md +264 -0
- package/skills/ui/refero-design/references/icons.md +166 -0
- package/skills/ui/refero-design/references/mcp-tools.md +258 -0
- package/skills/ui/refero-design/references/motion.md +504 -0
- package/skills/ui/refero-design/references/typography.md +737 -0
- package/skills/ui/refero-design/references/visual-workflow.md +105 -0
- package/skills/ui/style-animaxxing/SKILL.md +48 -0
- package/skills/ui/style-animaxxing/agents/openai.yaml +7 -0
- package/skills/ui/style-animaxxing/references/motion-vocabulary.md +51 -0
- package/skills/ui/style-animaxxing/references/tokens.md +288 -0
- package/skills/ui/style-animaxxing/references/typography-and-layout.md +149 -0
- package/skills/ui/style-animaxxing/references/verification.md +38 -0
- package/skills/ui/typography-picker/SKILL.md +305 -0
- package/skills/ui/ui-core/SKILL.md +345 -0
- package/skills/ui/ui-core/references/accessibility.md +85 -0
- package/skills/ui/ui-core/references/build.md +666 -0
- package/skills/ui/ui-core/references/copy.md +70 -0
- package/skills/ui/ui-core/references/dark-mode.md +76 -0
- package/skills/ui/ui-core/references/direction.md +99 -0
- package/skills/ui/ui-core/references/redesign.md +74 -0
- package/skills/ui/ui-core/references/responsive.md +77 -0
- package/skills/ui/ui-core/references/styles.md +42 -0
- package/skills/ui/ui-core/references/system.md +190 -0
- package/skills/ui/ui-core/references/verify.md +37 -0
- package/skills/ui/ui-engineering/SKILL.md +436 -0
- package/skills/ui/ui-engineering/references/avatars.md +74 -0
- package/skills/ui/ui-engineering/references/card-patterns.md +66 -0
- package/skills/ui/ui-engineering/references/floating-actions.md +65 -0
- package/skills/ui/ui-engineering/references/navigation.md +81 -0
- package/skills/ui/ui-engineering/references/overlays.md +74 -0
- package/skills/ui/ui-engineering/references/pagination.md +71 -0
- package/skills/ui/ui-engineering/references/progress-indicators.md +77 -0
- package/skills/ui/ui-engineering/references/quality-bar.md +293 -0
- package/skills/ui/ui-engineering/references/search.md +68 -0
- package/skills/ui/ui-engineering/references/tailwind-architecture.md +81 -0
- package/skills/ui/ui-theme-picker/SKILL.md +522 -0
- package/skills/ui/ui-theme-picker/references/component-sources.md +223 -0
- package/skills/ui/ui-theme-picker/references/styles.md +298 -0
- package/skills/ui/vitepress-docs/SKILL.md +439 -0
- package/skills/ui/vitepress-docs/references/components.md +333 -0
- package/skills/ui/vitepress-docs/references/layout.md +128 -0
- package/skills/ui/vitepress-docs/references/tokens.md +87 -0
- package/skills/ui/vitepress-docs/references/typography.md +76 -0
- package/skills/workflow/careful/SKILL.md +48 -0
- package/skills/workflow/context-restore/SKILL.md +69 -0
- package/skills/workflow/context-save/SKILL.md +96 -0
- package/skills/workflow/health/SKILL.md +99 -0
- package/skills/workflow/learn/SKILL.md +95 -0
- package/skills/workflow/office-hours/SKILL.md +136 -0
- package/skills/workflow/ship/SKILL.md +95 -0
- package/vendor.json +80 -0
|
@@ -0,0 +1,666 @@
|
|
|
1
|
+
# Build the screen
|
|
2
|
+
|
|
3
|
+
## The anti-slop tells (kill every one)
|
|
4
|
+
|
|
5
|
+
- Purple or blue glow gradients.
|
|
6
|
+
- Glowing buttons, oversized rounded cards.
|
|
7
|
+
- Three equal feature cards.
|
|
8
|
+
- The same five icons as every other AI output.
|
|
9
|
+
- Version labels in heroes (V0.6, BETA) unless it is a launch.
|
|
10
|
+
- Section-number eyebrows ("001", "01/4").
|
|
11
|
+
- Middle dots everywhere, decorative color dots.
|
|
12
|
+
- Filler words: Elevate, Seamless, Unleash, Next-Gen, Game-changer.
|
|
13
|
+
- Fake names and numbers: John Doe, Acme, 99.99%.
|
|
14
|
+
- Scroll cues, hero-bottom strips, mock-humble references.
|
|
15
|
+
- Cards in cards, div-fake product UI.
|
|
16
|
+
- Inter and Roboto as defaults.
|
|
17
|
+
|
|
18
|
+
## Accessibility (built in, not checked later)
|
|
19
|
+
|
|
20
|
+
- Color contrast: 4.5:1 for body text, 3:1 for large text and UI
|
|
21
|
+
components. Test with actual text, not color picker values.
|
|
22
|
+
- Focus management: every interactive element must be keyboard reachable.
|
|
23
|
+
Focus order follows visual order. No keyboard traps.
|
|
24
|
+
- Focus visible: never remove focus styles. Custom focus rings must be
|
|
25
|
+
at least 2px, high contrast, and visible on both light and dark
|
|
26
|
+
backgrounds.
|
|
27
|
+
- ARIA: use semantic HTML first. Add ARIA only when HTML falls short.
|
|
28
|
+
aria-label for icon-only buttons, aria-describedby for help text,
|
|
29
|
+
aria-live for dynamic updates.
|
|
30
|
+
- Screen reader: decorative icons get aria-hidden="true". Status
|
|
31
|
+
messages use aria-live="polite". Errors use aria-live="assertive".
|
|
32
|
+
- Touch targets: 44x44px minimum on mobile, 32x32px on desktop. Gaps
|
|
33
|
+
between targets count toward size.
|
|
34
|
+
- Motion: respect prefers-reduced-motion. Provide reduced-motion
|
|
35
|
+
alternatives for all animations.
|
|
36
|
+
- Forms: every input has a label. Error messages are linked with
|
|
37
|
+
aria-describedby. Required fields use required, not just asterisks.
|
|
38
|
+
- Landmarks: use header, main, nav, footer, aside. One main landmark per
|
|
39
|
+
page. Skip links for keyboard users.
|
|
40
|
+
- Text alternatives: meaningful images have alt text. Decorative images
|
|
41
|
+
have alt="". SVG icons use aria-hidden or title/desc.
|
|
42
|
+
- Error prevention: destructive actions have confirmation. Inputs have
|
|
43
|
+
validation before submission, not after.
|
|
44
|
+
- Consistent navigation: same nav on every page. Current page indicated
|
|
45
|
+
visually and with aria-current="page".
|
|
46
|
+
|
|
47
|
+
## Responsive design system
|
|
48
|
+
|
|
49
|
+
- Breakpoint scale: sm 640, md 768, lg 1024, xl 1280, 2xl 1536. Mobile
|
|
50
|
+
first, always.
|
|
51
|
+
- Reflow before resize: at each breakpoint, ask if the layout should
|
|
52
|
+
reflow or just resize. Reflow wins.
|
|
53
|
+
- Container queries over media queries when component width depends on
|
|
54
|
+
parent, not viewport.
|
|
55
|
+
- Touch targets: 44x44px minimum on touch devices. Spacing between
|
|
56
|
+
targets: 8px minimum gap.
|
|
57
|
+
- Density shifts: mobile gets larger touch targets and less dense
|
|
58
|
+
content. Desktop gets more columns and tighter spacing.
|
|
59
|
+
- Horizontal scroll banned: no element should overflow its container on
|
|
60
|
+
any viewport.
|
|
61
|
+
- Typography scales with viewport: use clamp() for font sizes, not
|
|
62
|
+
fixed breakpoint jumps.
|
|
63
|
+
- Images: max-width 100%, height auto. Use srcset and sizes for
|
|
64
|
+
responsive images. Art direction with <picture> when needed.
|
|
65
|
+
- Navigation: hamburger on mobile, full nav on desktop. Always visible,
|
|
66
|
+
never hidden behind hover.
|
|
67
|
+
- Tables: horizontal scroll on mobile, full table on desktop. Sticky
|
|
68
|
+
first column on mobile tables.
|
|
69
|
+
- Modals: full-screen on mobile, centered dialog on desktop. Bottom
|
|
70
|
+
sheet on mobile feels native.
|
|
71
|
+
- Forms: single column on mobile, multi-column on desktop when fields
|
|
72
|
+
are short. Labels above inputs on all viewports.
|
|
73
|
+
|
|
74
|
+
## Dark mode implementation
|
|
75
|
+
|
|
76
|
+
- CSS variable architecture: all colors via CSS variables. Light and dark
|
|
77
|
+
variants in :root and .dark.
|
|
78
|
+
- Tailwind strategy: use dark: prefix. Never hardcode colors in JSX.
|
|
79
|
+
All colors reference tokens.
|
|
80
|
+
- System preference: default to system. Allow manual override with
|
|
81
|
+
localStorage. Respect prefers-color-scheme.
|
|
82
|
+
- Color adjustments: reduce saturation by 10-20% in dark mode. Dark
|
|
83
|
+
backgrounds need lighter text, not darker.
|
|
84
|
+
- Neutral scale: invert for dark mode. Background goes from light to
|
|
85
|
+
dark. Text goes from dark to light. Borders go from light to
|
|
86
|
+
semi-transparent light.
|
|
87
|
+
- Accent: keep the same hue, increase lightness by 5-10% in dark mode.
|
|
88
|
+
Don't change the accent color between light and dark.
|
|
89
|
+
- Shadows: eliminate in dark mode or use very subtle diffused shadows.
|
|
90
|
+
Borders replace shadows for separation in dark mode.
|
|
91
|
+
- Images: don't invert. Use opacity adjustments for images in dark mode
|
|
92
|
+
if needed. SVG icons with currentColor adapt automatically.
|
|
93
|
+
- Text: never pure white (#fff) on pure black (#000). Use gray-50 to
|
|
94
|
+
gray-100 on gray-900 to gray-950. Minimum 4.5:1 contrast.
|
|
95
|
+
- Form inputs: darker background, lighter border, lighter text. Focus
|
|
96
|
+
ring must be visible on dark backgrounds.
|
|
97
|
+
- Code blocks: darker background, lighter text. Syntax highlighting
|
|
98
|
+
must adapt to dark mode.
|
|
99
|
+
- Testing: verify every screen in both light and dark mode. Check
|
|
100
|
+
contrast, readability, and visual hierarchy.
|
|
101
|
+
|
|
102
|
+
## Copy and UX writing standards
|
|
103
|
+
|
|
104
|
+
- Imperative mood for CTAs: "Create project", "Send message", not
|
|
105
|
+
"Create a project" or "Submit your request". Verb first.
|
|
106
|
+
- Sentence case for all UI text: capitalize first word and proper nouns
|
|
107
|
+
only. No title case, no all caps except for acronyms.
|
|
108
|
+
- Error messages: three parts. What happened, why it happened, how to
|
|
109
|
+
fix it. "Email is required" not "Error: invalid email".
|
|
110
|
+
- Success messages: what was done, not "Success!". "Project created"
|
|
111
|
+
not "Success! Your project has been created".
|
|
112
|
+
- Label brevity: one to three words. "Email" not "Email address".
|
|
113
|
+
"Save" not "Save changes". Use helper text for context.
|
|
114
|
+
- Micro-copy tone: calm, direct, human. No marketing speak. No
|
|
115
|
+
exclamation marks in functional text. One exclamation max per
|
|
116
|
+
marketing screen.
|
|
117
|
+
- Placeholder text: shows the format, not the label. "you@example.com"
|
|
118
|
+
not "Enter your email address".
|
|
119
|
+
- Button labels: action verb, no articles. "Delete account" not "Delete
|
|
120
|
+
the account". "Continue" not "Next".
|
|
121
|
+
- Help text: one sentence. Two max. Explain the constraint, not the
|
|
122
|
+
obvious. "8+ characters" not "Please enter at least 8 characters".
|
|
123
|
+
- Confirmation dialogs: title is the action, body is the consequence.
|
|
124
|
+
"Delete project" / "This will permanently remove all data. This
|
|
125
|
+
action cannot be undone."
|
|
126
|
+
- Empty states: what the user sees, what they can do. "No projects
|
|
127
|
+
yet. Create your first project to get started."
|
|
128
|
+
- Tooltips: one line, no punctuation. Context, not description.
|
|
129
|
+
"Sort by date" not "Click here to sort the list by date".
|
|
130
|
+
|
|
131
|
+
## Animation state machine
|
|
132
|
+
|
|
133
|
+
Define behavior for each state. Motion answers "what happened?"
|
|
134
|
+
|
|
135
|
+
| State | Trigger | Motion | Duration | Notes |
|
|
136
|
+
|-------|---------|--------|----------|-------|
|
|
137
|
+
| Idle | Resting | None | - | No idle animations. No pulses, no floating. |
|
|
138
|
+
| Entering | Appear | Fade + slight scale or translate | 200ms | Spring curve. State lands first. |
|
|
139
|
+
| Entered | Settled | None | - | Static until next event. |
|
|
140
|
+
| Active | Hover, press, focus | Subtle state change | 150ms in, 100ms out | One motion per event. |
|
|
141
|
+
| Exiting | Disappear | Fade out, reverse of enter | 150ms | Matches enter direction. |
|
|
142
|
+
| Exited | Gone | None | - | Remove from DOM after animation. |
|
|
143
|
+
| Disabled | Invalid state | None | - | Visual state only, no motion. |
|
|
144
|
+
| Error | Validation fails | Shake or highlight | 200ms | Subtle, not distracting. |
|
|
145
|
+
| Loading | Async operation | None or subtle pulse | Infinite only if justified | Prefer skeleton over spinner. |
|
|
146
|
+
| Updating | Data changes | Layout animation or flash | 150ms | Only the changed element. |
|
|
147
|
+
|
|
148
|
+
Rules:
|
|
149
|
+
- One motion per event. Two springs competing reads as glitch.
|
|
150
|
+
- Exits exist. No one-frame vanishes.
|
|
151
|
+
- State lands first. Motion is polish on top.
|
|
152
|
+
- Reduced motion: all states become instant. No springs, no entrances.
|
|
153
|
+
- Interruptible: next event cancels current animation. Nobody waits.
|
|
154
|
+
|
|
155
|
+
## Image and asset guidelines
|
|
156
|
+
|
|
157
|
+
- Format selection: WebP for photos, AVIF for graphics with gradients,
|
|
158
|
+
SVG for icons and illustrations, PNG only when transparency is
|
|
159
|
+
required and WebP/AVIF fail.
|
|
160
|
+
- Responsive images: use srcset and sizes. Provide 1x, 2x, and 3x
|
|
161
|
+
sources. Art direction with <picture> for major layout changes.
|
|
162
|
+
- Lazy loading: native loading="lazy" for below-fold images. Above-fold
|
|
163
|
+
images use loading="eager" with width and height attributes to
|
|
164
|
+
prevent layout shift.
|
|
165
|
+
- Placeholder patterns: low-quality image placeholder (LQIP) with blur
|
|
166
|
+
transition, solid color placeholder, or SVG silhouette. No broken
|
|
167
|
+
image icons.
|
|
168
|
+
- SVG optimization: remove metadata, minify paths, use currentColor for
|
|
169
|
+
dynamic coloring. Inline small SVGs, reference external for large.
|
|
170
|
+
- Icon fonts: avoid. Use SVG sprites or individual SVG files.
|
|
171
|
+
- Image sizing: never serve larger images than needed. Use image CDN or
|
|
172
|
+
build-time resizing. Max width per breakpoint.
|
|
173
|
+
- Decorative images: aria-hidden="true", empty alt. Don't clutter
|
|
174
|
+
screen readers with decoration.
|
|
175
|
+
- Favicon: 32x32 and 16x16 PNG, or SVG favicon. One favicon per site.
|
|
176
|
+
- Background images: use CSS background-image for decorative images.
|
|
177
|
+
Use <img> for content images. Never use img for pure decoration.
|
|
178
|
+
|
|
179
|
+
## Form design standards
|
|
180
|
+
|
|
181
|
+
- Label placement: above the input, left-aligned. Never floating
|
|
182
|
+
labels. Never placeholder-as-label.
|
|
183
|
+
- Label association: use htmlFor matching input id. Screen readers
|
|
184
|
+
announce the label with the input.
|
|
185
|
+
- Input sizing: height 40-44px on desktop, 44-48px on mobile. Full
|
|
186
|
+
width on mobile, constrained on desktop.
|
|
187
|
+
- Validation timing: validate on blur for single fields, on submit for
|
|
188
|
+
the whole form. No inline validation while typing unless the field
|
|
189
|
+
has a clear format constraint (email, phone).
|
|
190
|
+
- Error display: below the input, red text, error icon. Linked with
|
|
191
|
+
aria-describedby. Show only the first error per field.
|
|
192
|
+
- Success indication: green border or checkmark on valid fields after
|
|
193
|
+
interaction. Don't show before user interacts.
|
|
194
|
+
- Required fields: required attribute, asterisk after label in red.
|
|
195
|
+
Don't use color alone. Screen reader announces "(required)".
|
|
196
|
+
- Submit button: disabled while submitting. Shows spinner or "Saving..."
|
|
197
|
+
text. Re-enable on error.
|
|
198
|
+
- Multi-step forms: show progress indicator. Save state between steps.
|
|
199
|
+
Allow back navigation. Don't lose data on refresh.
|
|
200
|
+
- Field grouping: use fieldset and legend for related fields. Radio
|
|
201
|
+
buttons and checkboxes always grouped.
|
|
202
|
+
- Auto-complete: use appropriate autocomplete attributes. Name, email,
|
|
203
|
+
address, credit card. Helps users and password managers.
|
|
204
|
+
- Password fields: show/hide toggle. Never auto-fill password managers
|
|
205
|
+
incorrectly. Use autocomplete="current-password" or
|
|
206
|
+
"new-password".
|
|
207
|
+
- Form layout: single column on mobile, two columns on desktop when
|
|
208
|
+
fields are short. Max width 600px for forms. Don't stretch full
|
|
209
|
+
width on desktop.
|
|
210
|
+
|
|
211
|
+
## Loading and skeleton patterns
|
|
212
|
+
|
|
213
|
+
- Skeleton first: show skeleton before spinner. Skeleton matches the
|
|
214
|
+
content shape. Spinner is for unknown duration or full-page loading.
|
|
215
|
+
- Skeleton design: same layout as content, gray animated blocks. No
|
|
216
|
+
content-shaped skeletons that look like real data.
|
|
217
|
+
- Shimmer animation: light gradient moving across skeleton. 1.5s to
|
|
218
|
+
2s duration, ease-in-out infinite. Respects reduced-motion.
|
|
219
|
+
- Progressive loading: load critical content first, then enhancements.
|
|
220
|
+
Show content as soon as available, don't wait for everything.
|
|
221
|
+
- Optimistic UI: update UI immediately, revert on error. Show subtle
|
|
222
|
+
indicator that update is pending. Don't block user interaction.
|
|
223
|
+
- Spinner usage: small spinner for buttons and inline. Medium spinner
|
|
224
|
+
for cards and panels. Large spinner for full-page. No spinner for
|
|
225
|
+
content that loads in under 300ms.
|
|
226
|
+
- Placeholder text: "Loading..." not "Please wait". Time estimates when
|
|
227
|
+
available: "Uploading... 2 of 5 files".
|
|
228
|
+
- Button loading: disable button, show spinner inside, change text to
|
|
229
|
+
"Saving..." or similar. Never submit twice.
|
|
230
|
+
- Infinite scroll: show skeleton at bottom while loading more. Don't
|
|
231
|
+
show spinner at bottom. Have a "Load more" button for explicit
|
|
232
|
+
control.
|
|
233
|
+
- Error recovery: if loading fails, show error with retry button.
|
|
234
|
+
Don't silently fail or show empty state.
|
|
235
|
+
- Image loading: show blur placeholder, then fade in. Don't show
|
|
236
|
+
broken image icon. Lazy load below-fold images.
|
|
237
|
+
|
|
238
|
+
## Design token naming convention
|
|
239
|
+
|
|
240
|
+
- Semantic naming: use function, not appearance. --color-primary, not
|
|
241
|
+
--color-blue-500. --spacing-md, not --spacing-16px.
|
|
242
|
+
- Component tokens: --button-bg, --button-text, --input-border. Derived
|
|
243
|
+
from semantic tokens.
|
|
244
|
+
- Scale naming: 50-950 for color (50 lightest, 950 darkest). sm/md/lg
|
|
245
|
+
for spacing and sizing. xs, sm, md, lg, xl for icons and typography.
|
|
246
|
+
- Light/dark variants: --color-primary in :root, --color-primary in
|
|
247
|
+
.dark. Same name, different value. Never --color-primary-dark.
|
|
248
|
+
- Extension rules: add new tokens at the end of the scale. Never insert
|
|
249
|
+
in the middle. New scales need a reason and documentation.
|
|
250
|
+
- Token categories: color, spacing, radius, shadow, typography, motion,
|
|
251
|
+
z-index. One category per token prefix.
|
|
252
|
+
- Alias tokens: --color-text = --color-gray-900. Use aliases for
|
|
253
|
+
frequently used values. Reduces duplication.
|
|
254
|
+
- Deprecated tokens: mark with comment, don't delete. Migrate in next
|
|
255
|
+
major version. Keep old token working during transition.
|
|
256
|
+
- Documentation: every token has a comment explaining its purpose and
|
|
257
|
+
usage. No orphaned tokens.
|
|
258
|
+
|
|
259
|
+
## i18n and text expansion
|
|
260
|
+
|
|
261
|
+
- Text expansion budget: design for 30-50% text expansion. German,
|
|
262
|
+
French, Spanish can be 30-50% longer than English. Don't break
|
|
263
|
+
layouts.
|
|
264
|
+
- Flexible containers: use min-width and max-width, not fixed widths.
|
|
265
|
+
Allow text to wrap naturally. Avoid fixed-width buttons.
|
|
266
|
+
- Text truncation: use line-clamp for headlines. Ellipsis for buttons
|
|
267
|
+
and labels. Never truncate error messages or instructions.
|
|
268
|
+
- RTL support: use logical properties (margin-inline-start, not
|
|
269
|
+
margin-left). Use dir="rtl" for Arabic, Hebrew. Test both
|
|
270
|
+
directions.
|
|
271
|
+
- Locale-aware formatting: dates, numbers, currency. Use user's locale.
|
|
272
|
+
Don't hardcode formats. Use Intl API.
|
|
273
|
+
- Number formatting: thousands separators, decimal separators vary by
|
|
274
|
+
locale. 1,000.00 in US, 1.000,00 in DE. Use Intl.NumberFormat.
|
|
275
|
+
- Date formatting: relative dates ("2 hours ago") and absolute dates
|
|
276
|
+
vary by locale. Use Intl.DateTimeFormat.
|
|
277
|
+
- Currency: symbol position varies. $100 in US, 100€ in DE. Use
|
|
278
|
+
Intl.NumberFormat with currency style.
|
|
279
|
+
- Pluralization: "1 file" vs "2 files". Use ICU message format or
|
|
280
|
+
similar. Don't concatenate strings.
|
|
281
|
+
- String externalization: all UI text in translation files. No hardcoded
|
|
282
|
+
strings in components. Use keys, not raw text.
|
|
283
|
+
- Font support: ensure fonts support required character sets. Noto fonts
|
|
284
|
+
for broad language support. Test with actual translated text.
|
|
285
|
+
- BCP 47 tags: use proper language tags (en-US, fr-FR, ar-SA). Don't
|
|
286
|
+
use generic "en" or "fr" when region matters.
|
|
287
|
+
|
|
288
|
+
## Component composition patterns
|
|
289
|
+
|
|
290
|
+
- Compound components: related components that work together. <Select>,
|
|
291
|
+
<Select.Item>, <Select.Trigger>. Parent manages state, children
|
|
292
|
+
compose UI.
|
|
293
|
+
- Render props: pass function as child for flexibility. <List
|
|
294
|
+
items={items} renderItem={item => <Item {...item} />} />.
|
|
295
|
+
- Headless vs styled: separate logic from presentation. Headless
|
|
296
|
+
component handles state, accessibility, keyboard nav. Styled
|
|
297
|
+
component handles visuals.
|
|
298
|
+
- Slots: named slots for flexible composition. <Card header={...}
|
|
299
|
+
body={...} footer={...} />. Clear contract for each slot.
|
|
300
|
+
- Polymorphic components: render as different HTML elements. <Text
|
|
301
|
+
as="h1"> or <Text as="p">. Use "as" prop, never "component".
|
|
302
|
+
- Hook extraction: extract reusable logic to custom hooks. Use for
|
|
303
|
+
state, effects, accessibility. Keep hooks focused and single-purpose.
|
|
304
|
+
- Context for state sharing: use React Context for deeply nested state.
|
|
305
|
+
Avoid prop drilling beyond 2 levels. Split contexts by concern.
|
|
306
|
+
- Higher-order components: use sparingly. Prefer hooks. HOC for
|
|
307
|
+
cross-cutting concerns (auth, theme). Document the wrapped props.
|
|
308
|
+
- Component variants: use type variants, not conditional classes.
|
|
309
|
+
Button variants: primary, secondary, ghost. Use discriminated union.
|
|
310
|
+
- Composition over configuration: prefer props for composition, not
|
|
311
|
+
giant config objects. <Form><Input /><Input /></Form> over <Form
|
|
312
|
+
fields={[...]} />.
|
|
313
|
+
- Avoid premature abstraction: duplicate until it hurts. Extract when
|
|
314
|
+
three or more components share the same pattern. Not two.
|
|
315
|
+
|
|
316
|
+
## Keyboard shortcut and command palette design
|
|
317
|
+
|
|
318
|
+
- Shortcut formatting: use platform symbols. ⌘ for Mac, Ctrl for
|
|
319
|
+
Windows/Linux. Display as text: "⌘K" not "Cmd+K" or "Command+K".
|
|
320
|
+
- Shortcut conflicts: check against browser and OS shortcuts. Don't
|
|
321
|
+
override browser shortcuts (⌘T, ⌘W, ⌘Q).
|
|
322
|
+
- Discoverability: show shortcuts in menus, tooltips, and help pages.
|
|
323
|
+
Command palette is the primary discovery mechanism.
|
|
324
|
+
- Command grouping: group by category. Navigation, actions, settings.
|
|
325
|
+
Use dividers. Most used commands at top.
|
|
326
|
+
- Command search: fuzzy search by default. Search by name, shortcut,
|
|
327
|
+
and description. Recent commands at top.
|
|
328
|
+
- Command feedback: show what the command does before executing.
|
|
329
|
+
Preview for navigation commands. Confirm for destructive commands.
|
|
330
|
+
- Keyboard navigation: arrow keys to navigate, Enter to execute, Esc
|
|
331
|
+
to close. Tab to skip between groups. Type to filter.
|
|
332
|
+
- Context-aware commands: show different commands based on current
|
|
333
|
+
page or selection. Hide unavailable commands, don't disable.
|
|
334
|
+
- Command palette trigger: ⌘K or Ctrl+K. Always available. Never
|
|
335
|
+
hidden behind menu.
|
|
336
|
+
- Custom shortcuts: allow user customization. Show current shortcut.
|
|
337
|
+
Warn on conflicts. Persist in user settings.
|
|
338
|
+
|
|
339
|
+
## Notification and toast design
|
|
340
|
+
|
|
341
|
+
- Toast hierarchy: info, success, warning, error. Each has distinct
|
|
342
|
+
color and icon. Info is default, success is green, warning is amber,
|
|
343
|
+
error is red.
|
|
344
|
+
- Toast placement: bottom-right on desktop, bottom-center on mobile.
|
|
345
|
+
Don't cover primary content. Stack from bottom.
|
|
346
|
+
- Toast duration: 4s for info, 5s for success, 6s for warning, 8s for
|
|
347
|
+
error. User can dismiss early. Pause on hover.
|
|
348
|
+
- Toast actions: one action max. "Undo" for undoable actions. "View"
|
|
349
|
+
for navigation. No "OK" button. Dismiss is implicit.
|
|
350
|
+
- Toast stacking: max 3 toasts visible. New toasts push old ones up.
|
|
351
|
+
Don't stack more than 3. User sees all, not a wall.
|
|
352
|
+
- Persistent toasts: for errors requiring action. Don't auto-dismiss.
|
|
353
|
+
Require explicit dismiss or action.
|
|
354
|
+
- Inline vs toast: use toast for transient feedback. Use inline for
|
|
355
|
+
persistent status. Use alert for errors blocking the page.
|
|
356
|
+
- Toast icons: match the type. Checkmark for success, alert for error,
|
|
357
|
+
info for info. Don't use icons for dismiss.
|
|
358
|
+
- Toast accessibility: aria-live="polite" for info/success,
|
|
359
|
+
aria-live="assertive" for error. Focus stays on main content. Toast
|
|
360
|
+
doesn't steal focus.
|
|
361
|
+
- Toast styling: subtle shadow, border, background. Match the design
|
|
362
|
+
system. No glowing, no gradients. Compact on mobile.
|
|
363
|
+
|
|
364
|
+
## Error boundary and error state design
|
|
365
|
+
|
|
366
|
+
- Error boundaries: wrap each major section, not just the whole app.
|
|
367
|
+
One error boundary per route or feature. Isolate failures.
|
|
368
|
+
- Inline errors: show next to the field. Red border, error icon, error
|
|
369
|
+
message below. Don't alert for field errors.
|
|
370
|
+
- Full-page errors: when the whole page fails. Error message,
|
|
371
|
+
description, retry button. Don't show stack traces to users.
|
|
372
|
+
- Error message structure: what happened, why (if helpful), how to
|
|
373
|
+
recover. "Something went wrong" is never enough.
|
|
374
|
+
- Recovery actions: primary action is retry. Secondary action is go
|
|
375
|
+
home or contact support. Always give user a way out.
|
|
376
|
+
- Technical details: collapsible section or link. Show for debugging,
|
|
377
|
+
hide by default. Never show stack traces unless user asks.
|
|
378
|
+
- Network errors: distinguish between 4xx and 5xx. 401/403 means auth
|
|
379
|
+
issue, redirect to login. 404 means not found, show not found page.
|
|
380
|
+
5xx means server error, show retry.
|
|
381
|
+
- Form errors: field-level errors inline. Form-level errors above the
|
|
382
|
+
form. Don't mix them. Show form-level only after submit.
|
|
383
|
+
- Error prevention: destructive actions have confirmation. Auto-save
|
|
384
|
+
drafts. Show "You have unsaved changes" before navigation.
|
|
385
|
+
- Logging: log errors with context. User ID, action, timestamp. Don't
|
|
386
|
+
log sensitive data. Don't show internal error codes to users.
|
|
387
|
+
- Error pages: 404, 500, maintenance. Each has consistent design.
|
|
388
|
+
Navigation to home. Don't dead-end the user.
|
|
389
|
+
|
|
390
|
+
## Performance and rendering guidelines
|
|
391
|
+
|
|
392
|
+
- Layout stability: reserve space for async content. Use aspect-ratio
|
|
393
|
+
boxes. Prevent layout shift. CLS under 0.1.
|
|
394
|
+
- Paint complexity: avoid box-shadow on large areas. Use border
|
|
395
|
+
instead. Avoid backdrop-filter on scroll. Test with DevTools
|
|
396
|
+
Performance.
|
|
397
|
+
- Animation performance: animate transform and opacity only. Avoid
|
|
398
|
+
layout animations. Use will-change sparingly. Remove after animation.
|
|
399
|
+
- Bundle impact: tree-shake animation libraries. Import only what you
|
|
400
|
+
use. motion.dev is lighter than Framer Motion. Lenis only when dial=3.
|
|
401
|
+
- Image optimization: WebP/AVIF, srcset, lazy loading. Use image CDN.
|
|
402
|
+
Serve correct sizes. Don't load 4k images for 400px containers.
|
|
403
|
+
- Font loading: use font-display: swap. Preload critical fonts.
|
|
404
|
+
Subset fonts to needed characters. Avoid layout shift from font
|
|
405
|
+
swap.
|
|
406
|
+
- JavaScript: code split by route. Lazy load below-fold components.
|
|
407
|
+
Avoid large dependencies. Use dynamic imports.
|
|
408
|
+
- Rendering: avoid unnecessary re-renders. Use React.memo for pure
|
|
409
|
+
components. Use useMemo and useCallback for expensive operations.
|
|
410
|
+
Don't over-optimize.
|
|
411
|
+
- Caching: cache static assets. Use service workers for offline.
|
|
412
|
+
Cache API responses when appropriate. Stale-while-revalidate for
|
|
413
|
+
dynamic content.
|
|
414
|
+
- Metrics targets: LCP under 2.5s, FID under 100ms, CLS under 0.1.
|
|
415
|
+
Measure with real user metrics, not just lab tests.
|
|
416
|
+
- Motion dial impact: dial=3 adds GSAP, ScrollTrigger, Lenis. Only
|
|
417
|
+
load when needed. Don't load on pages that don't use them.
|
|
418
|
+
|
|
419
|
+
## Mobile-specific patterns
|
|
420
|
+
|
|
421
|
+
- Bottom sheets: use for mobile modals. Swipe to dismiss. Snap points
|
|
422
|
+
for height. Don't use centered modals on mobile.
|
|
423
|
+
- Swipe actions: swipe left for delete, swipe right for archive. Show
|
|
424
|
+
action buttons on swipe. Undo for destructive actions.
|
|
425
|
+
- Pull-to-refresh: for content feeds. Visual feedback during pull.
|
|
426
|
+
Don't use on forms or inputs. Disable when not applicable.
|
|
427
|
+
- Safe areas: respect safe area insets. Don't put content under
|
|
428
|
+
notches or home indicators. Use env(safe-area-inset-*).
|
|
429
|
+
- Thumb zone: primary actions in bottom third of screen. Secondary
|
|
430
|
+
actions in top. Navigation at bottom for mobile.
|
|
431
|
+
- Touch feedback: immediate visual feedback on touch. Ripple or
|
|
432
|
+
highlight. No 300ms delay. Use active state.
|
|
433
|
+
- Gestures: swipe for navigation, pinch for zoom, long-press for
|
|
434
|
+
context menu. Don't override system gestures.
|
|
435
|
+
- Keyboard handling: dismiss keyboard on scroll. Don't hide content
|
|
436
|
+
behind keyboard. Scroll to focused input.
|
|
437
|
+
- Orientation: support both portrait and landscape. Test both. Don't
|
|
438
|
+
lock orientation unless required.
|
|
439
|
+
- Performance: mobile devices have less power. Reduce animation
|
|
440
|
+
complexity. Lazy load aggressively. Test on low-end devices.
|
|
441
|
+
- Hover states: don't rely on hover for mobile. Use active and focus
|
|
442
|
+
states. Hover is enhancement, not requirement.
|
|
443
|
+
- Navigation: bottom tab bar for primary navigation. Hamburger menu
|
|
444
|
+
for secondary. Don't hide navigation behind gestures.
|
|
445
|
+
|
|
446
|
+
## Notification and badge design
|
|
447
|
+
|
|
448
|
+
- Badge purpose: show count, status, or newness. One purpose per badge.
|
|
449
|
+
Don't combine count and status.
|
|
450
|
+
- Badge placement: top-right of the element. Don't cover icon or text.
|
|
451
|
+
Use offset to position clearly.
|
|
452
|
+
- Badge size: 16-20px for small icons, 20-24px for medium, 24-28px
|
|
453
|
+
for large. Scale with the element.
|
|
454
|
+
- Badge content: number up to 99, then "99+". For status, use dot or
|
|
455
|
+
icon. For newness, use "New" text or dot.
|
|
456
|
+
- Badge color: accent color for count, semantic color for status. Red
|
|
457
|
+
for error, green for success, amber for warning.
|
|
458
|
+
- Badge animation: subtle pulse for new badges. Stop after first view.
|
|
459
|
+
Don't pulse forever. No animation for count badges.
|
|
460
|
+
- Notification center: list of notifications. Group by date. Mark all
|
|
461
|
+
as read. Clear visual hierarchy.
|
|
462
|
+
- Unread indicator: dot or bold text. Not both. Don't use color alone.
|
|
463
|
+
- Badge accessibility: aria-label with count. "3 notifications" not
|
|
464
|
+
"notification". Screen reader announces the count.
|
|
465
|
+
- Badge density: one badge per element. Don't stack badges. If multiple
|
|
466
|
+
statuses, use a dot with tooltip.
|
|
467
|
+
|
|
468
|
+
## Empty state design system
|
|
469
|
+
|
|
470
|
+
- Empty state purpose: explain why empty, what user can do. Not just
|
|
471
|
+
"No data". Tell the story.
|
|
472
|
+
- Empty state structure: illustration or icon, headline, description,
|
|
473
|
+
primary CTA. In that order.
|
|
474
|
+
- Illustration vs icon: illustration for major empty states (first
|
|
475
|
+
visit, no data). Icon for minor empty states (empty filter results).
|
|
476
|
+
Don't use illustration for every empty state.
|
|
477
|
+
- Empty state copy: headline is one line, max 8 words. Description is
|
|
478
|
+
one to two sentences. CTA is action verb. "Create your first project"
|
|
479
|
+
not "Click here to create a project".
|
|
480
|
+
- Empty state CTA: primary action only. One button. No secondary
|
|
481
|
+
actions. If multiple actions possible, show the most important one.
|
|
482
|
+
- Empty state placement: full panel for major empty states. Inline for
|
|
483
|
+
minor. Center for focused content. Don't hide empty state in corner.
|
|
484
|
+
- Filter empty state: "No results for [query]" with clear filter.
|
|
485
|
+
Show active filters. Offer to clear filters.
|
|
486
|
+
- Error state vs empty state: empty state is expected (no data yet).
|
|
487
|
+
Error state is unexpected (something broke). Different design,
|
|
488
|
+
different copy.
|
|
489
|
+
- Returning user empty state: acknowledge history. "You haven't
|
|
490
|
+
created any projects yet" not "No projects". Personalize when
|
|
491
|
+
possible.
|
|
492
|
+
- Empty state animation: subtle fade-in for illustration. No motion
|
|
493
|
+
for text. Keep it quiet. Empty state is not a showcase.
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
## Hero rules
|
|
497
|
+
|
|
498
|
+
- Fits the viewport: headline max 2 lines, subtext max 20 words.
|
|
499
|
+
- One primary CTA, max one secondary. Nothing under the CTA: no
|
|
500
|
+
taglines, no trust strips, no avatar rows, no feature bullets.
|
|
501
|
+
- No pills, fake stats, badges, or tiny logos.
|
|
502
|
+
- Banned: centered dark mesh, generic background image.
|
|
503
|
+
|
|
504
|
+
## Layout rules
|
|
505
|
+
|
|
506
|
+
- One layout family per section. A family appears once across 8
|
|
507
|
+
sections.
|
|
508
|
+
- Max two consecutive image-text splits.
|
|
509
|
+
- Grid over flex math. No w-[calc(33%-1rem)] style fractions.
|
|
510
|
+
- min-h-[100dvh], never h-screen.
|
|
511
|
+
- Bento: as many cells as content, no empty cells, 2-3 cells with real
|
|
512
|
+
visual variation.
|
|
513
|
+
- Split headers banned: stack vertically, body at 65ch.
|
|
514
|
+
- Sidebars: no multi-level nested scroll.
|
|
515
|
+
|
|
516
|
+
## Typography discipline
|
|
517
|
+
|
|
518
|
+
- No 6-line wraps. A headline over 3 lines is a font-size error.
|
|
519
|
+
- Eyebrows: max one per 3 sections. Signature style: text-[11px]
|
|
520
|
+
uppercase tracking-[0.18em].
|
|
521
|
+
- One copy register across the whole page.
|
|
522
|
+
- No em dashes in visible text. Ever.
|
|
523
|
+
|
|
524
|
+
## Content
|
|
525
|
+
|
|
526
|
+
- Real words, real numbers, real names.
|
|
527
|
+
- Lists over paragraphs. Spec tables become 2-column cards or grouped
|
|
528
|
+
chunks.
|
|
529
|
+
- Quotes under 3 lines with name and role.
|
|
530
|
+
- No Lorem Ipsum. Placeholder images: picsum with a seed, labeled TODO,
|
|
531
|
+
or generated.
|
|
532
|
+
|
|
533
|
+
## Icons, imagery, motion
|
|
534
|
+
|
|
535
|
+
- Icon family: Phosphor, Radix, Tabler, or Doton. One family, one stroke
|
|
536
|
+
weight. Lucide only on request.
|
|
537
|
+
- Duo-tone or triple-tone icons also look great.
|
|
538
|
+
- Real imagery: hero plus supporting images, even in minimal builds.
|
|
539
|
+
SVG grayscale filters on photos are banned.
|
|
540
|
+
- Motion: see the motion skill. Springs, one motion per event, nothing
|
|
541
|
+
loops.
|
|
542
|
+
- No external widget dependencies in the first pass. Build the core
|
|
543
|
+
first, add libraries only when they earn it.
|
|
544
|
+
|
|
545
|
+
## Chart and data visualization design
|
|
546
|
+
|
|
547
|
+
- Prefer minimal ink: remove gridlines, axis ticks, and borders until the
|
|
548
|
+
chart is unreadable, then add back the minimum needed.
|
|
549
|
+
- One accent per series. Use hue, not lightness, to distinguish series in
|
|
550
|
+
the same chart. Lightness is for emphasis within a series.
|
|
551
|
+
- Annotations over legends: label the line, don't make the reader match
|
|
552
|
+
color to name. Tooltips are a fallback, not the primary label.
|
|
553
|
+
- Type hierarchy in charts: title > axis label > tick label > annotation.
|
|
554
|
+
No more than three levels.
|
|
555
|
+
- Zero baseline for deltas, true zero for counts. A bar chart starting
|
|
556
|
+
at 50 exaggerates a 52-51 difference. A line chart can zoom when the
|
|
557
|
+
range is known.
|
|
558
|
+
- Interactivity earns complexity: static first, hover detail second,
|
|
559
|
+
draggable/brush only when the user asks for it. Every interactive
|
|
560
|
+
element must have a keyboard equivalent.
|
|
561
|
+
- Evil Charts is a strong reference for chart inspiration.
|
|
562
|
+
|
|
563
|
+
## Testimonial and social proof patterns
|
|
564
|
+
|
|
565
|
+
- One quote, one name, one role. Three lines max for the quote. The name
|
|
566
|
+
and role sit below, smaller and quieter. No avatar rows, no logo grids,
|
|
567
|
+
no "trusted by" marquees in the hero.
|
|
568
|
+
- The quote is the UI element, not the person. Design the quote mark,
|
|
569
|
+
the type treatment, the spacing. The photo is optional and small.
|
|
570
|
+
- Static over carousel. A carousel implies scarcity. Show three strong
|
|
571
|
+
quotes stacked or in a clean grid. If space demands a carousel, make it
|
|
572
|
+
obvious there are more and let the user control pace.
|
|
573
|
+
- Attribution format: "Name, Role at Company" in body or hint weight.
|
|
574
|
+
Never bold the name alone. The role gives the quote weight.
|
|
575
|
+
- Make.design testimonial pages are a strong reference for polish and
|
|
576
|
+
layout rhythm.
|
|
577
|
+
|
|
578
|
+
## Whitespace as a first-class principle
|
|
579
|
+
|
|
580
|
+
- Whitespace is a layout tool, not empty space. It separates, groups, and
|
|
581
|
+
establishes hierarchy the same way borders and shadows do, but quieter.
|
|
582
|
+
- Section padding: py-24 to py-32 on desktop, py-16 to py-24 on tablet,
|
|
583
|
+
py-12 to py-16 on mobile. Never drop below py-12 between distinct
|
|
584
|
+
sections.
|
|
585
|
+
- Component padding: p-6 to p-8 for cards, p-4 for compact controls.
|
|
586
|
+
Inconsistent padding is a visual error.
|
|
587
|
+
- Density ladder: hero is sparse, feature section is medium, data table
|
|
588
|
+
is dense. One density per section. Mixed density reads as sloppy.
|
|
589
|
+
- Kobbe.io is a strong reference for generous whitespace and clean
|
|
590
|
+
spacing rhythm.
|
|
591
|
+
|
|
592
|
+
## Type scale system
|
|
593
|
+
|
|
594
|
+
- One scale, one ratio. Use modular scale: major third (1.25), perfect
|
|
595
|
+
fourth (1.333), or golden ratio (1.618) depending on density.
|
|
596
|
+
- Display scale: clamp() for responsive type. Example: text-[clamp(2.5rem,5vw,4.5rem)]
|
|
597
|
+
for hero headlines. Never hardcode breakpoint-specific font sizes.
|
|
598
|
+
- Hierarchy: display > headline > section > body > caption. Five levels
|
|
599
|
+
max. Body at 16px base, 1.5 line-height, max 65ch width.
|
|
600
|
+
- Weight ladder: 400 for body, 500 for emphasis, 600 for labels, 700 for
|
|
601
|
+
display. No 800 or 900 in UI text.
|
|
602
|
+
- Tracking: tighten display type (-0.02em to -0.04em), loosen small
|
|
603
|
+
labels (0.02em to 0.05em). Body tracking is default.
|
|
604
|
+
- Leading: display at 1.05 to 1.1, body at 1.5 to 1.6, caption at 1.4.
|
|
605
|
+
Tight leading for big type, loose for small.
|
|
606
|
+
- Mono for data only. JetBrains Mono, IBM Plex Mono, or Geist Mono.
|
|
607
|
+
Never use mono for body copy.
|
|
608
|
+
|
|
609
|
+
## Color semantics
|
|
610
|
+
|
|
611
|
+
- One accent hue, multiple lightness stops. Use the same hue for primary
|
|
612
|
+
action, active state, focus ring, and selected state. Lightness
|
|
613
|
+
distinguishes the role, not hue.
|
|
614
|
+
- Accent usage order: primary CTA > active state > focus ring > selected
|
|
615
|
+
state > notification dot. Use it in this priority. When in doubt, the
|
|
616
|
+
primary CTA gets the full saturation.
|
|
617
|
+
- Neutral scale: nine stops from 0 to 100. Use 0-20 for backgrounds,
|
|
618
|
+
40-60 for body text, 80-100 for disabled and hints. Never pure black
|
|
619
|
+
(#000) on white; use gray-950 or gray-900.
|
|
620
|
+
- Semantic colors: success, warning, danger, info. Each gets one hue,
|
|
621
|
+
used only in that semantic role. Warning never borrows from accent.
|
|
622
|
+
Danger never borrows from warning.
|
|
623
|
+
- Dark mode: invert the neutral scale, keep the accent hue, reduce
|
|
624
|
+
saturation by 10-20%. Dark backgrounds need lighter text, not darker
|
|
625
|
+
text.
|
|
626
|
+
- 4.5:1 contrast minimum for body text, 3:1 for large text and UI
|
|
627
|
+
components. Test with actual text, not color picker values.
|
|
628
|
+
|
|
629
|
+
## Component state matrix
|
|
630
|
+
|
|
631
|
+
Every interactive component must define these states before it ships:
|
|
632
|
+
|
|
633
|
+
| State | Visual | Motion | Example |
|
|
634
|
+
|-------|--------|--------|---------|
|
|
635
|
+
| Default | Resting state, no highlight | None | Button at rest |
|
|
636
|
+
| Hover | Subtle background or border shift | 150ms ease-out | Button lightens |
|
|
637
|
+
| Focus | Focus ring, no outline | Instant | Ring appears |
|
|
638
|
+
| Active/Pressed | Scale 0.97 to 0.98, darker fill | 100ms spring | Button depresses |
|
|
639
|
+
| Disabled | Grayed, no interaction | None | Button unclickable |
|
|
640
|
+
| Loading | Spinner or skeleton inside | None or subtle pulse | Button shows spinner |
|
|
641
|
+
| Error | Red border or text, error icon | None or shake | Input shows error |
|
|
642
|
+
| Empty | Placeholder text or illustration | None or fade-in | Empty state panel |
|
|
643
|
+
| Selected | Accent background or border | 150ms ease-out | Tab or toggle active |
|
|
644
|
+
|
|
645
|
+
Rules:
|
|
646
|
+
- Motion is optional for non-interactive states (empty, error).
|
|
647
|
+
- Focus must always be visible. Never remove focus styles.
|
|
648
|
+
- Disabled state must be visually distinct from loading state.
|
|
649
|
+
- Error state must include a recovery action or explanation.
|
|
650
|
+
- Every state must have a keyboard equivalent. No mouse-only states.
|
|
651
|
+
|
|
652
|
+
## Icon system
|
|
653
|
+
|
|
654
|
+
- Stroke weight: 1.5px for data-dense interfaces, 2px for marketing and
|
|
655
|
+
landing pages. One weight per product.
|
|
656
|
+
- Sizing: 16px for inline with body text, 20px for section headers, 24px
|
|
657
|
+
for standalone icons, 32px+ for feature illustrations.
|
|
658
|
+
- Filled vs outline: filled for active/selected state, outline for
|
|
659
|
+
default. Never mix in the same component.
|
|
660
|
+
- Duo-tone: primary element filled, secondary element outline. Use for
|
|
661
|
+
decorative icons that need hierarchy without color.
|
|
662
|
+
- Triple-tone: three opacity stops on a single icon. Use for
|
|
663
|
+
illustrations and empty states, not navigation.
|
|
664
|
+
- Icon as decoration: earns its place. An icon that does not convey
|
|
665
|
+
information or state is decoration. One per component max.
|
|
666
|
+
- Doton is approved for duo-tone and triple-tone icon sets.
|