@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,81 @@
|
|
|
1
|
+
# Navigation patterns
|
|
2
|
+
|
|
3
|
+
Rules for choosing and implementing navigation patterns. For
|
|
4
|
+
accessibility and responsive behavior, see accessibility.md and
|
|
5
|
+
responsive.md.
|
|
6
|
+
|
|
7
|
+
## Sidebar vs topbar
|
|
8
|
+
|
|
9
|
+
- Sidebar: use when the app has 5 or more top-level destinations,
|
|
10
|
+
persistent state per section, or dense tooling (dashboards, IDEs,
|
|
11
|
+
mail clients). Left rail on desktop, drawer on mobile.
|
|
12
|
+
- Topbar: use when there are 3 to 5 destinations, the page is
|
|
13
|
+
content-led, or the product is marketing/landing. Horizontal links
|
|
14
|
+
or tabs.
|
|
15
|
+
- Mixed: sidebar for app chrome, topbar for page-level tabs within a
|
|
16
|
+
section. Don't nest both at the same level. One owns the primary
|
|
17
|
+
hierarchy.
|
|
18
|
+
- Collapse rule: sidebar collapses to icon rail at `md`, to drawer at
|
|
19
|
+
`sm`. Icon rail labels appear on hover or on `lg+`.
|
|
20
|
+
|
|
21
|
+
## Breadcrumbs
|
|
22
|
+
|
|
23
|
+
- Show when the user is more than one level deep in a hierarchy.
|
|
24
|
+
Suppress on the home/landing level.
|
|
25
|
+
- Truncate middle segments with an ellipsis when the path exceeds 4
|
|
26
|
+
segments. Keep the first and last two segments visible.
|
|
27
|
+
- Clickable segments: every crumb except the current page is a link.
|
|
28
|
+
Current page is plain text, aria-current="page".
|
|
29
|
+
- Separator: `/` or `›`. Pick one, stay consistent. Don't use chevrons
|
|
30
|
+
for every level in deep hierarchies. It becomes visual noise.
|
|
31
|
+
|
|
32
|
+
## Tab bar vs segmented control
|
|
33
|
+
|
|
34
|
+
- Tab bar: use for top-level destinations within a page or section.
|
|
35
|
+
Horizontal, always visible, under a section header.
|
|
36
|
+
- Segmented control: use for toggling between 2 to 4 views of the same
|
|
37
|
+
data. Compact, inline, looks like a toggle group.
|
|
38
|
+
- Don't mix: if the user needs to navigate to a different page, use
|
|
39
|
+
tabs or links. If the user needs to filter the same data, use a
|
|
40
|
+
segmented control.
|
|
41
|
+
|
|
42
|
+
## Active-state indication
|
|
43
|
+
|
|
44
|
+
- Current page: filled tab, bottom border, or background tint. Pick one
|
|
45
|
+
per product. Never underline + background + color change together.
|
|
46
|
+
- Visited state: optional. If used, keep it subtle (slightly darker
|
|
47
|
+
text, not a color change). Don't treat visited like selected.
|
|
48
|
+
- Hover state: background tint or underline. Never color shift alone.
|
|
49
|
+
Color is for active, not hover.
|
|
50
|
+
|
|
51
|
+
## Mobile nav collapse patterns
|
|
52
|
+
|
|
53
|
+
- Hamburger: use when there are more than 4 top-level destinations, or
|
|
54
|
+
when destinations are secondary. Icon-only button, aria-label
|
|
55
|
+
"Menu".
|
|
56
|
+
- Bottom tab bar: use for 3 to 5 primary destinations in a mobile app.
|
|
57
|
+
Fixed to viewport bottom, safe-area-inset padding.
|
|
58
|
+
- Tab bar in-page: use for 2 to 4 secondary destinations within a
|
|
59
|
+
single mobile screen. Horizontal scroll if needed, not dropdown.
|
|
60
|
+
- Don't hide primary navigation behind a hamburger on mobile. If a
|
|
61
|
+
destination is primary, it belongs in a tab bar or topbar.
|
|
62
|
+
|
|
63
|
+
## Nested nav: drawer vs flyout
|
|
64
|
+
|
|
65
|
+
- Drawer: use for navigation trees deeper than 2 levels, or when the
|
|
66
|
+
secondary nav has its own structure. Swipe to dismiss on mobile.
|
|
67
|
+
- Flyout: use for 2-level nav where the second level is short (3 to 5
|
|
68
|
+
items). Appears on hover/focus on desktop, tap on mobile.
|
|
69
|
+
- Avoid: flyouts deeper than 2 levels. If the tree is deep, use a
|
|
70
|
+
drawer or a dedicated page.
|
|
71
|
+
|
|
72
|
+
## Don'ts
|
|
73
|
+
|
|
74
|
+
- Don't use breadcrumbs on a single-level page.
|
|
75
|
+
- Don't mix tab-bar and topbar for the same hierarchy level.
|
|
76
|
+
- Don't hide the active state. The user should never have to guess
|
|
77
|
+
where they are.
|
|
78
|
+
- Don't use dropdowns for primary navigation. Dropdowns hide options.
|
|
79
|
+
Navigation should reveal them.
|
|
80
|
+
- Don't animate nav reflows with stagger. One motion: the new state
|
|
81
|
+
appears, the old one leaves.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Overlays
|
|
2
|
+
|
|
3
|
+
Rules for dropdowns, tooltips, popovers, and positioning. For
|
|
4
|
+
accessibility requirements, see accessibility.md.
|
|
5
|
+
|
|
6
|
+
## Dropdown / select / menu
|
|
7
|
+
|
|
8
|
+
- Positioning: below trigger, left-aligned by default. Above if
|
|
9
|
+
overflow. Collision handling is required, not optional.
|
|
10
|
+
- Width: match the trigger width, or min 200px. Don't let the dropdown
|
|
11
|
+
shrink below the widest item.
|
|
12
|
+
- Scroll: show scrollbar when items exceed viewport height minus 2x
|
|
13
|
+
item height. Max height 320px.
|
|
14
|
+
- Selection: single-select uses a checkmark or highlight. Multi-select
|
|
15
|
+
uses checkboxes. Don't use checkmarks for multi-select.
|
|
16
|
+
- Empty state: "No options" or "No results". Don't show an empty list
|
|
17
|
+
with no message.
|
|
18
|
+
- Keyboard: arrow keys navigate, Enter selects, Esc closes. See
|
|
19
|
+
accessibility.md.
|
|
20
|
+
|
|
21
|
+
## Tooltip
|
|
22
|
+
|
|
23
|
+
- Placement: top by default, bottom if not enough space above.
|
|
24
|
+
Left/right for long text. Don't use tooltips for critical
|
|
25
|
+
information. Tooltips are discoverable, not guaranteed.
|
|
26
|
+
- Trigger: hover for desktop, focus for keyboard. Don't show on click
|
|
27
|
+
alone.
|
|
28
|
+
- Delay: 300 to 500ms show delay on hover. No delay on focus. Don't
|
|
29
|
+
make the user wait for a tooltip they triggered with keyboard.
|
|
30
|
+
- Duration: stay visible while hovered. Don't auto-hide after a
|
|
31
|
+
timeout. The user controls dismissal.
|
|
32
|
+
- Rich vs plain: plain tooltip is text only, max 1 to 2 lines. Rich
|
|
33
|
+
tooltip includes an icon or link, max 200px wide. Don't use rich
|
|
34
|
+
tooltips for simple descriptions.
|
|
35
|
+
- Accessibility: tooltips are supplementary. The trigger must work
|
|
36
|
+
without the tooltip. Don't put critical instructions only in a
|
|
37
|
+
tooltip.
|
|
38
|
+
|
|
39
|
+
## Popover vs tooltip vs dropdown
|
|
40
|
+
|
|
41
|
+
- Popover: use when the overlay contains interactive content (forms,
|
|
42
|
+
buttons, links). Stays open on interaction. Focus moves inside.
|
|
43
|
+
- Tooltip: use when the overlay is non-interactive text. Dismisses on
|
|
44
|
+
hover/focus loss. Focus doesn't move inside.
|
|
45
|
+
- Dropdown: use when the overlay is a list of options. Selection is
|
|
46
|
+
explicit. Dismisses on selection or Esc.
|
|
47
|
+
- Don't use a tooltip for a form field hint. Use help text or a
|
|
48
|
+
placeholder. Tooltips are for supplementary info, not required
|
|
49
|
+
reading.
|
|
50
|
+
|
|
51
|
+
## Positioning and collision handling
|
|
52
|
+
|
|
53
|
+
- Default position: below trigger, left-aligned. Above if overflow.
|
|
54
|
+
- Flip: flip to the opposite side before clipping. Flip before
|
|
55
|
+
shifting.
|
|
56
|
+
- Shift: shift along the axis if still clipping after flip. Don't
|
|
57
|
+
shift more than 50% of the overlay width.
|
|
58
|
+
- Arrow: show arrow pointing to trigger when there's room. Hide when
|
|
59
|
+
close to edge. Arrow is decorative, not interactive.
|
|
60
|
+
- Safe areas: don't position overlays under notches, home indicators,
|
|
61
|
+
or system UI. Use env(safe-area-inset-*) on mobile.
|
|
62
|
+
|
|
63
|
+
## Don'ts
|
|
64
|
+
|
|
65
|
+
- Don't show tooltips on touch devices by default. Touch doesn't have
|
|
66
|
+
hover. Use long-press or a dedicated info button instead.
|
|
67
|
+
- Don't nest overlays. A dropdown inside a dropdown inside a popover is
|
|
68
|
+
a navigation dead end.
|
|
69
|
+
- Don't use dropdowns for single actions. If there's only one option,
|
|
70
|
+
show the action directly.
|
|
71
|
+
- Don't let overlays cover the trigger. The trigger must remain visible
|
|
72
|
+
or be clearly replaceable by the overlay.
|
|
73
|
+
- Don't use tooltips for error messages. Errors belong inline, near the
|
|
74
|
+
field.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Pagination and load-more patterns
|
|
2
|
+
|
|
3
|
+
Rules for choosing between numbered pagination, "load more", and
|
|
4
|
+
infinite scroll. For infinite-scroll implementation details, see
|
|
5
|
+
ui-core/references/build.md.
|
|
6
|
+
|
|
7
|
+
## Decision criteria
|
|
8
|
+
|
|
9
|
+
- Numbered pagination: use when the user needs to jump to a specific
|
|
10
|
+
page, compare pages, or the data is truly paginated (search results,
|
|
11
|
+
table data). Shows page numbers, prev/next, and total count.
|
|
12
|
+
- "Load more" button: use when the user is browsing a feed or list and
|
|
13
|
+
needs explicit control over pacing. Shows a button at the bottom of
|
|
14
|
+
the list.
|
|
15
|
+
- Infinite scroll: use when the content is a continuous feed (social,
|
|
16
|
+
notifications) and the user is consuming, not searching. See
|
|
17
|
+
ui-core/references/build.md for implementation rules.
|
|
18
|
+
- Don't mix: choose one pattern per list. A list with both "load more"
|
|
19
|
+
and infinite scroll is confusing.
|
|
20
|
+
|
|
21
|
+
## Cursor-based vs offset-based pagination
|
|
22
|
+
|
|
23
|
+
- Cursor-based: use for real-time or frequently changing data. The
|
|
24
|
+
cursor points to the last item, not a page number. UI shows "Load
|
|
25
|
+
more" or infinite scroll, not page numbers.
|
|
26
|
+
- Offset-based: use for static or rarely changing data (archived posts,
|
|
27
|
+
reports). UI shows numbered pages.
|
|
28
|
+
- UI difference: cursor-based never shows page numbers. Offset-based
|
|
29
|
+
can show page numbers, but doesn't have to.
|
|
30
|
+
|
|
31
|
+
## Page-size selection
|
|
32
|
+
|
|
33
|
+
- Show when the user is working with dense data (tables, lists) and
|
|
34
|
+
the page size affects usability. Hide for content feeds.
|
|
35
|
+
- Placement: above the list, not below. Users look for controls before
|
|
36
|
+
they start consuming.
|
|
37
|
+
- Options: 10, 25, 50, 100. Don't offer more than 4 options. Default
|
|
38
|
+
to 25 unless the data is dense (then 50) or sparse (then 10).
|
|
39
|
+
- Persist: remember the user's choice per view. Don't reset on every
|
|
40
|
+
navigation.
|
|
41
|
+
|
|
42
|
+
## Total counts
|
|
43
|
+
|
|
44
|
+
- Show total count when the user needs to know the scope ("Showing 1-25
|
|
45
|
+
of 342 results"). Hide for infinite scroll feeds where the total is
|
|
46
|
+
unknown or not meaningful.
|
|
47
|
+
- Format: "Showing 1-25 of 342" not "342 results". The first form
|
|
48
|
+
tells the user where they are, not just how much there is.
|
|
49
|
+
- Don't show "Page 1 of 15" without also showing the range. Page
|
|
50
|
+
numbers alone don't tell the user how much data they're missing.
|
|
51
|
+
|
|
52
|
+
## Scroll-position restoration
|
|
53
|
+
|
|
54
|
+
- Restore scroll position when navigating back to a paginated list.
|
|
55
|
+
The user expects to return to where they were, not the top.
|
|
56
|
+
- Implementation: store scroll position in a ref or state keyed by the
|
|
57
|
+
list identity. Restore on mount.
|
|
58
|
+
- Don't restore for infinite scroll feeds. In infinite scroll, the
|
|
59
|
+
content is new every time. Restoring position would show stale data.
|
|
60
|
+
|
|
61
|
+
## Don'ts
|
|
62
|
+
|
|
63
|
+
- Don't show page numbers for cursor-based pagination. The cursor is
|
|
64
|
+
opaque. Page numbers are meaningless.
|
|
65
|
+
- Don't use "load more" for search results. Search implies completion.
|
|
66
|
+
"Load more" implies there's more to find.
|
|
67
|
+
- Don't hide the total count for paginated data. The user needs to know
|
|
68
|
+
the scope to make decisions.
|
|
69
|
+
- Don't reset page size on every navigation. Persist per view.
|
|
70
|
+
- Don't use infinite scroll for task-oriented lists. Infinite scroll is
|
|
71
|
+
for consumption, not completion.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Progress indicators
|
|
2
|
+
|
|
3
|
+
Rules for choosing and implementing progress indicators. For skeleton
|
|
4
|
+
and spinner patterns, see ui-core/references/build.md.
|
|
5
|
+
|
|
6
|
+
## Determinate vs indeterminate
|
|
7
|
+
|
|
8
|
+
- Determinate: use when the progress can be measured (upload, install,
|
|
9
|
+
form completion). Shows percentage or step.
|
|
10
|
+
- Indeterminate: use when the duration is unknown but progress is
|
|
11
|
+
happening (loading data, processing). Shows animation, no percentage.
|
|
12
|
+
- Do not guess: if you do not know the duration, use indeterminate. A
|
|
13
|
+
determinate bar that stalls at 90% is worse than an indeterminate
|
|
14
|
+
spinner.
|
|
15
|
+
|
|
16
|
+
## Progress bar rules
|
|
17
|
+
|
|
18
|
+
- Height: 4 to 8px for inline bars, 8 to 12px for standalone bars.
|
|
19
|
+
Thinner bars are subtler. Thicker bars are more prominent.
|
|
20
|
+
- Fill direction: left to right for LTR, right to left for RTL. Use
|
|
21
|
+
logical properties or CSS transforms.
|
|
22
|
+
- Percentage label: show when the percentage is meaningful (more than
|
|
23
|
+
10% steps). Hide for rapid progress where the number changes faster
|
|
24
|
+
than the user can read it.
|
|
25
|
+
- Color: accent color for fill, muted border for track. Do not use
|
|
26
|
+
multiple colors to indicate "health". That is a status indicator, not
|
|
27
|
+
a progress bar.
|
|
28
|
+
- Animation: smooth transition between values. Do not jump. 300ms ease
|
|
29
|
+
is fine here because the bar is the feedback, not a micro-interaction.
|
|
30
|
+
|
|
31
|
+
## Step / wizard indicators
|
|
32
|
+
|
|
33
|
+
- Linear steps: use when every step must be completed in order
|
|
34
|
+
(onboarding, checkout). Show step number, label, and completion
|
|
35
|
+
state.
|
|
36
|
+
- Non-linear steps: use when steps can be skipped or reordered
|
|
37
|
+
(settings, configuration). Show steps as a list, not a progress bar.
|
|
38
|
+
- Completed state: checkmark or filled step. Never remove completed
|
|
39
|
+
steps. The user needs to see progress.
|
|
40
|
+
- Current step: accent color, larger or bolder. Do not use animation to
|
|
41
|
+
indicate the current step. Animation is for progress, not state.
|
|
42
|
+
- Future steps: muted text or outline. Do not gray them out completely.
|
|
43
|
+
The user needs to see what is coming.
|
|
44
|
+
|
|
45
|
+
## Multi-stage progress
|
|
46
|
+
|
|
47
|
+
- Multi-stage: use when an operation has distinct phases (upload +
|
|
48
|
+
processing + complete). Show stage name and progress within the
|
|
49
|
+
current stage.
|
|
50
|
+
- Stage transition: animate the stage name change, not the bar. The bar
|
|
51
|
+
resets for the new stage.
|
|
52
|
+
- Error in multi-stage: show which stage failed, why, and how to retry
|
|
53
|
+
that stage. Do not restart from stage one.
|
|
54
|
+
|
|
55
|
+
## Skeleton vs spinner vs progress bar
|
|
56
|
+
|
|
57
|
+
- Skeleton: use when the content shape is known and the load is fast
|
|
58
|
+
(under 2s). See ui-core/references/build.md.
|
|
59
|
+
- Spinner: use when the duration is unknown or the load is full-page.
|
|
60
|
+
See ui-core/references/build.md.
|
|
61
|
+
- Progress bar: use when the progress is measurable. Do not use a
|
|
62
|
+
spinner when you can show a bar.
|
|
63
|
+
- Do not show all three together. Pick one per loading state.
|
|
64
|
+
|
|
65
|
+
## Avoid
|
|
66
|
+
|
|
67
|
+
- Do not use indeterminate progress bars for operations that have a
|
|
68
|
+
known duration. If you know it takes 5 seconds, show a determinate
|
|
69
|
+
bar.
|
|
70
|
+
- Do not animate progress bars with spring curves. Linear or ease-out
|
|
71
|
+
only.
|
|
72
|
+
- Do not show percentage for very fast operations (under 1s). The
|
|
73
|
+
number changes too fast to read.
|
|
74
|
+
- Do not use progress bars for multi-step wizards without showing the
|
|
75
|
+
step names. A bar alone does not tell the user where they are.
|
|
76
|
+
- Do not hide progress indicators behind hover. Progress is critical
|
|
77
|
+
feedback. It must be visible.
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
# Quality Bar References
|
|
2
|
+
|
|
3
|
+
**The standard.** Every UI decision should trace back to these references.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## SaaS Gold Standard (Best "Feel": Snappy, Physics-Based)
|
|
7
|
+
|
|
8
|
+
| Site | What to Steal | Why It Works |
|
|
9
|
+
|------|---------------|--------------|
|
|
10
|
+
| **Linear** | Command palette (⌘K), page transitions, cursor states, issue hover cards, keyboard shortcuts everywhere | Gold standard. Everything feels instant and intentional. |
|
|
11
|
+
| **Raycast** | Website mirrors app speed; hover states, scroll reveals, copy-to-clipboard toast, keyboard-first nav | Razor-tight. No wasted motion. |
|
|
12
|
+
| **Stripe** | Subtle gradient animations, docs pages with live code that morphs on scroll, careful color use | Restrained but delightful. Code blocks that animate on scroll. |
|
|
13
|
+
| **Vercel** | Geometric motion, great restraint (not everything animates), clean type hierarchy | Confident minimalism. |
|
|
14
|
+
| **Arc (The Browser Company)** | Playful micro-copy + micro-animation combo, onboarding flow, personality | Personality without chaos. |
|
|
15
|
+
| **Attio / Cron (Notion Calendar)** | SaaS onboarding-style micro-interactions, drag-drop, inline editing | Product-led growth patterns. |
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## Agency/Showcase Tier (Heavier Animation, GSAP/WebGL)
|
|
19
|
+
|
|
20
|
+
| Site | What to Steal | When to Use |
|
|
21
|
+
|------|---------------|-------------|
|
|
22
|
+
| **Awwwards Site of the Day** | Current trends, not fixed set | Dial = 3 only |
|
|
23
|
+
| **Locomotive** | Smooth-scroll + parallax done right | Showcase landing pages |
|
|
24
|
+
| **Basement.studio** | Experimental interactions, WebGL | Dial = 3, creative brands |
|
|
25
|
+
| **Cuberto** | Character animation, fluid motion | Dial = 3 |
|
|
26
|
+
| **Resn** | Immersive WebGL experiences | Dial = 3 |
|
|
27
|
+
| **Active Theory** | Three.js + GSAP mastery | Dial = 3 |
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
## Libraries/Tools (Beyond Aceternity)
|
|
31
|
+
|
|
32
|
+
### Animation Engines
|
|
33
|
+
| Library | Use For | Notes |
|
|
34
|
+
|---------|---------|-------|
|
|
35
|
+
| **motion.dev (Framer Motion)** | Page transitions, layout animations, enter/exit, gestures, basic scroll | Primary motion lib. `npm i motion` |
|
|
36
|
+
| **GSAP + ScrollTrigger** | Scroll scrub, pin, snap, timelines, text/SVG morph, complex sequences | Showcase tier (dial=3). `npm i gsap` |
|
|
37
|
+
| **Lenis** | Smooth scroll, pairs with GSAP | `npm i @studio-freight/lenis` |
|
|
38
|
+
| **Rive** | Interactive vector animations that respond to state | Advanced, `npm i @rive-app/canvas` |
|
|
39
|
+
|
|
40
|
+
### UI Primitives
|
|
41
|
+
| Library | Use For | Notes |
|
|
42
|
+
|---------|---------|-------|
|
|
43
|
+
| **base-ui** | Dialogs, popovers, menus, selects, tooltips, combobox, tabs, accordion | Unstyled, accessible. `@base-ui-components/react` |
|
|
44
|
+
| **Vaul** | Drawers, bottom sheets, side sheets | Gesture-driven. `npm i vaul` |
|
|
45
|
+
| **cmdk** | Command palette (⌘K) | `npm i cmdk` |
|
|
46
|
+
| **Radix UI** | Alternative to base-ui | More packages, similar philosophy |
|
|
47
|
+
|
|
48
|
+
### Data & Forms
|
|
49
|
+
| Library | Use For | Notes |
|
|
50
|
+
|---------|---------|-------|
|
|
51
|
+
| **TanStack Table** | Data tables, sorting, filtering, pagination, virtualization | `@tanstack/react-table` + `@tanstack/react-virtual` |
|
|
52
|
+
| **Virtuoso** | Virtualized lists, feeds, chat, variable heights | `npm i react-virtuoso` |
|
|
53
|
+
| **React Hook Form + Zod** | Forms, validation, server actions | `npm i react-hook-form @hookform/resolvers zod` |
|
|
54
|
+
| **Sonner** | Toasts, notifications | `npm i sonner` |
|
|
55
|
+
|
|
56
|
+
### Interaction Layer
|
|
57
|
+
| Library | Use For |
|
|
58
|
+
|---------|---------|
|
|
59
|
+
| **dnd-kit** | Drag and drop |
|
|
60
|
+
| **Vaul** | Drawers (already listed) |
|
|
61
|
+
| **Radix/base-ui** | Popovers, tooltips, menus, selects |
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
## Inspiration Galleries (Browse, Don't Copy)
|
|
65
|
+
|
|
66
|
+
| Site | Best For |
|
|
67
|
+
|------|----------|
|
|
68
|
+
| **Awwwards** | Cutting-edge motion, WebGL |
|
|
69
|
+
| **Mobbin** | Real UI patterns (not just heroes): mobile + desktop |
|
|
70
|
+
| **Godly** | Curated landing pages |
|
|
71
|
+
| **SiteInspire** | Design inspiration |
|
|
72
|
+
| **Dribbble** | Micro-interaction concepts (search "micro-interaction") |
|
|
73
|
+
| **Evil Charts** | Chart inspiration for data visualization UI |
|
|
74
|
+
| **Kobbe.io** | Generous whitespace, clean typography, rounded aesthetic |
|
|
75
|
+
| **Make.design** | Testimonial pages and polished design systems |
|
|
76
|
+
| **Timmo.co.in** | Clean layout and modern SaaS feel |
|
|
77
|
+
|
|
78
|
+
## What to Steal (Transferable Principles)
|
|
79
|
+
|
|
80
|
+
| Reference | Principle to Extract |
|
|
81
|
+
|-----------|----------------------|
|
|
82
|
+
| **Linear** | Command palette as primary navigation. Hover cards that surface context without leaving the page. Page transitions that feel like state changes, not scenes. |
|
|
83
|
+
| **Raycast** | Hover states that are near-instant. Copy-to-clipboard feedback that is visible but not intrusive. Keyboard-first means every click target has a keyboard target. |
|
|
84
|
+
| **Stripe** | Gradient animations tied to scroll, not decoration. Code blocks that respond to user action. Color that leads the eye, not decorates it. |
|
|
85
|
+
| **Vercel** | Geometric motion where the shape change is the feedback. Type hierarchy so strong it needs no color. Restraint as a feature, not a limit. |
|
|
86
|
+
| **Arc** | Micro-copy that matches micro-animation. Onboarding that teaches through doing, not explaining. Personality in the pauses, not the noise. |
|
|
87
|
+
| **Attio/Cron** | Inline editing that feels like paper, not a form. Drag-drop that snaps with intention. Micro-interactions that confirm the action, not announce it. |
|
|
88
|
+
| **Kobbe.io** | Whitespace as rhythm. Generous section padding that lets content breathe. Typography with clean roundness that feels modern without being bubbly. |
|
|
89
|
+
| **Make.design** | Testimonial pages where the quote is the hero, not the logo. Attribution that adds weight through simplicity. Visual rhythm that makes scrolling feel intentional. |
|
|
90
|
+
| **Evil Charts** | Minimal ink: gridlines removed until the chart breaks, then added back sparingly. Annotations over legends. One accent per series, hue not lightness for distinction. |
|
|
91
|
+
| **Timmo.co.in** | Clean SaaS feel through consistent spacing and restrained color. Layout that trusts the content without over-decorating. |
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
## GitHub Repos to Study
|
|
95
|
+
|
|
96
|
+
| Repo | Why |
|
|
97
|
+
|------|-----|
|
|
98
|
+
| `gastownhall/beads` | Motion primitives, gesture handling |
|
|
99
|
+
| `addyosmani/agent-skills` | AI agent patterns |
|
|
100
|
+
| `mattpocock/skills` | TypeScript patterns |
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
## Token Templates (Starting Points)
|
|
104
|
+
|
|
105
|
+
### Clinical (Linear-style)
|
|
106
|
+
```css
|
|
107
|
+
:root {
|
|
108
|
+
--accent: 220 100% 50%; /* Blue */
|
|
109
|
+
--gray: 220 15% 20%; /* Cool gray */
|
|
110
|
+
--radius: 0.5rem; /* 8px */
|
|
111
|
+
--font-sans: 'Inter', system-ui;
|
|
112
|
+
--font-mono: 'JetBrains Mono', monospace;
|
|
113
|
+
--transition: 150ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Sharp/Editorial (Stripe-style)
|
|
118
|
+
```css
|
|
119
|
+
:root {
|
|
120
|
+
--accent: 340 100% 50%; /* Pink/red */
|
|
121
|
+
--gray: 240 10% 15%; /* Warm dark */
|
|
122
|
+
--radius: 0.375rem; /* 6px */
|
|
123
|
+
--font-sans: 'Space Grotesk', system-ui;
|
|
124
|
+
--font-display: 'Space Grotesk', system-ui;
|
|
125
|
+
--transition: 200ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Playful (Arc-style)
|
|
130
|
+
```css
|
|
131
|
+
:root {
|
|
132
|
+
--accent: 280 100% 60%; /* Purple */
|
|
133
|
+
--gray: 260 10% 15%; /* Purple-tinted dark */
|
|
134
|
+
--radius: 0.75rem; /* 12px */
|
|
135
|
+
--font-sans: 'DM Sans', system-ui;
|
|
136
|
+
--font-display: 'DM Sans', system-ui;
|
|
137
|
+
--transition: 250ms cubic-bezier(0.34, 1.56, 0.64, 1); /* Bouncier */
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Dense/Terminal (Bloomberg-style)
|
|
142
|
+
```css
|
|
143
|
+
:root {
|
|
144
|
+
--accent: 120 100% 40%; /* Green */
|
|
145
|
+
--gray: 0 0% 10%; /* True black/white */
|
|
146
|
+
--radius: 0; /* No radius */
|
|
147
|
+
--font-sans: 'IBM Plex Mono', monospace;
|
|
148
|
+
--font-mono: 'IBM Plex Mono', monospace;
|
|
149
|
+
--transition: 100ms ease-out;
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
## Motion Recipes (Copy-Paste Starting Points)
|
|
155
|
+
|
|
156
|
+
### Page Transition (Linear)
|
|
157
|
+
```tsx
|
|
158
|
+
// app/layout.tsx
|
|
159
|
+
<AnimatePresence mode="wait" initial={false}>
|
|
160
|
+
<motion.div
|
|
161
|
+
key={pathname}
|
|
162
|
+
initial={{ opacity: 0, y: 16 }}
|
|
163
|
+
animate={{ opacity: 1, y: 0 }}
|
|
164
|
+
exit={{ opacity: 0, y: -16 }}
|
|
165
|
+
transition={{ type: 'spring', stiffness: 500, damping: 30 }}
|
|
166
|
+
>
|
|
167
|
+
{children}
|
|
168
|
+
</motion.div>
|
|
169
|
+
</AnimatePresence>
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Modal/Sheet Enter/Exit
|
|
173
|
+
```tsx
|
|
174
|
+
const modalTransition = {
|
|
175
|
+
initial: { opacity: 0, scale: 0.97 },
|
|
176
|
+
animate: { opacity: 1, scale: 1 },
|
|
177
|
+
exit: { opacity: 0, scale: 0.97 },
|
|
178
|
+
transition: { type: 'spring', stiffness: 500, damping: 30 },
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Button Press (Raycast)
|
|
183
|
+
```tsx
|
|
184
|
+
<motion.button
|
|
185
|
+
whileHover={{ scale: 1.02 }}
|
|
186
|
+
whileTap={{ scale: 0.97 }}
|
|
187
|
+
transition={{ type: 'spring', stiffness: 600, damping: 20 }}
|
|
188
|
+
>
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Stagger (Onboarding Only)
|
|
192
|
+
```tsx
|
|
193
|
+
<motion.ul
|
|
194
|
+
initial="hidden"
|
|
195
|
+
animate="show"
|
|
196
|
+
variants={{
|
|
197
|
+
hidden: { opacity: 0 },
|
|
198
|
+
show: { transition: { staggerChildren: 0.05 } },
|
|
199
|
+
}}
|
|
200
|
+
>
|
|
201
|
+
{items.map(item => (
|
|
202
|
+
<motion.li key={item.id} variants={{ hidden: { opacity: 0, x: -20 }, show: { opacity: 1, x: 0 } }}>
|
|
203
|
+
{item.label}
|
|
204
|
+
</motion.li>
|
|
205
|
+
))}
|
|
206
|
+
</motion.ul>
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Scroll Reveal (Stripe)
|
|
210
|
+
```tsx
|
|
211
|
+
// Use GSAP for this
|
|
212
|
+
gsap.from('.reveal', {
|
|
213
|
+
y: 60,
|
|
214
|
+
opacity: 0,
|
|
215
|
+
duration: 1,
|
|
216
|
+
ease: 'power3.out',
|
|
217
|
+
scrollTrigger: { trigger: '.reveal', start: 'top 85%' },
|
|
218
|
+
})
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
## Component Checklist (Finish Gate)
|
|
223
|
+
|
|
224
|
+
Every component must pass:
|
|
225
|
+
|
|
226
|
+
- [ ] **One clear action**: Primary CTA obvious
|
|
227
|
+
- [ ] **Color in small doses**: 1 accent, used only for actions
|
|
228
|
+
- [ ] **Whitespace separates**: No borders/shadows for separation
|
|
229
|
+
- [ ] **Real type hierarchy**: Display / Body / Hint (not 5 bold sizes)
|
|
230
|
+
- [ ] **Feedback matches action**: Press = visual, Done = quiet, Destructive = confirm
|
|
231
|
+
- [ ] **Dark mode works**: `theme="system"` wired
|
|
232
|
+
- [ ] **Reduced motion works**: Instant state changes
|
|
233
|
+
- [ ] **No em dashes**: In visible text
|
|
234
|
+
- [ ] **Accessibility**: Keyboard, ARIA, focus visible, contrast AA
|
|
235
|
+
- [ ] **TypeScript strict**: No `any`, discriminated unions
|
|
236
|
+
- [ ] **Tailwind component-based**: Tokens first, raw CSS only with reason
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
## Anti-Patterns (Auto-Reject)
|
|
240
|
+
|
|
241
|
+
| Pattern | Rejection Reason |
|
|
242
|
+
|---------|------------------|
|
|
243
|
+
| Purple gradient background | AI slop marker |
|
|
244
|
+
| Glowing buttons | AI slop marker |
|
|
245
|
+
| Oversized rounded cards (2xl+) | AI slop marker |
|
|
246
|
+
| Floating orbs in hero | Unless product IS orbs |
|
|
247
|
+
| Stagger on every page load | Daily interactions = subtle/fast |
|
|
248
|
+
| Scroll-jacking | User owns scroll |
|
|
249
|
+
| Infinite marquee | Loops forever = no purpose |
|
|
250
|
+
| `transition: all 0.3s ease` | Lazy, animates layout |
|
|
251
|
+
| `ease-in-out` | Elevator curve, not UI |
|
|
252
|
+
| No reduced-motion support | Accessibility fail |
|
|
253
|
+
| Missing exit animation | One-frame vanish = flicker |
|
|
254
|
+
| Focus not trapped in modal | Keyboard trap |
|
|
255
|
+
| No ESC to close modal | UX fail |
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
## Decision Tree (When User Says Vague Things)
|
|
259
|
+
|
|
260
|
+
| User Says | You Ask | You Pick |
|
|
261
|
+
|-----------|---------|----------|
|
|
262
|
+
| "Make it pop" | "Linear-sharp? Arc-playful? Stripe-gradient?" | One |
|
|
263
|
+
| "Add animations" | Load `motion` → Run Decide phase | Only what passes |
|
|
264
|
+
| "Nice toast" | Load `ask-toast` → `ask-sonner` | `richColors`, action buttons |
|
|
265
|
+
| "Command palette" | Load `ask-command-menu` → `ask-cmdk` | Full keyboard nav |
|
|
266
|
+
| "Smooth scroll" | Dial check: if 3 → GSAP+Lenis, else motion.dev | Appropriate lib |
|
|
267
|
+
| "Data table" | Load `ask-table` → `ask-tanstack-table` | Virtualized, sortable |
|
|
268
|
+
| "Form" | Load `ask-form` → `ask-rhf` | Zod schema, server actions |
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
## Quick Reference: Skill Loading Map
|
|
272
|
+
|
|
273
|
+
```
|
|
274
|
+
User: "Build the FE/UI"
|
|
275
|
+
│
|
|
276
|
+
├─► ui-engineering (orchestrates all)
|
|
277
|
+
│ ├─► house-style (LAW)
|
|
278
|
+
│ ├─► ui (process)
|
|
279
|
+
│ ├─► pick-ui-library (per interaction)
|
|
280
|
+
│ │ ├─► ask-modal → ask-base-ui
|
|
281
|
+
│ │ ├─► ask-toast → ask-sonner
|
|
282
|
+
│ │ ├─► ask-animation → ask-motion (or ask-gsap if dial=3)
|
|
283
|
+
│ │ ├─► ask-command-menu → ask-cmdk
|
|
284
|
+
│ │ ├─► ask-form → ask-rhf
|
|
285
|
+
│ │ ├─► ask-table → ask-tanstack-table
|
|
286
|
+
│ │ ├─► ask-virtual-list → ask-virtuoso
|
|
287
|
+
│ │ └─► ask-drawer → ask-vaul
|
|
288
|
+
│ ├─► motion (name→decide→build→review)
|
|
289
|
+
│ ├─► impeccable (audit→polish→animate→verify)
|
|
290
|
+
│ └─► prototype (optional divergence)
|
|
291
|
+
│
|
|
292
|
+
└─► References: quality-bar + tokens + motion-recipes + component-checklist + navigation + search + pagination + progress-indicators + avatars + overlays + floating-actions + card-patterns + tailwind-architecture + ui-core (build, verify, system, accessibility, responsive, dark-mode, copy, direction, styles, redesign)
|
|
293
|
+
```
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Search patterns
|
|
2
|
+
|
|
3
|
+
Rules for search input placement, behavior, and results. For keyboard
|
|
4
|
+
nav within results, see accessibility.md. For command-palette search,
|
|
5
|
+
see the cmdk skill.
|
|
6
|
+
|
|
7
|
+
## Input placement
|
|
8
|
+
|
|
9
|
+
- Inline search: use when search is the primary action on a page
|
|
10
|
+
(inbox, docs, file browser). Full width on mobile, constrained on
|
|
11
|
+
desktop.
|
|
12
|
+
- Command palette: use when search is a power-user shortcut across the
|
|
13
|
+
whole product. Triggered by ⌘K, not always visible. See
|
|
14
|
+
ask-command-menu.
|
|
15
|
+
- Inline + command palette: both can coexist. Inline is the visible
|
|
16
|
+
entry point. Command palette is the keyboard-accessible expansion.
|
|
17
|
+
- Don't bury inline search inside a dropdown. If search is primary, it
|
|
18
|
+
should be visible.
|
|
19
|
+
|
|
20
|
+
## Autocomplete and suggestions
|
|
21
|
+
|
|
22
|
+
- Show suggestions after 2 or more characters, not on focus alone.
|
|
23
|
+
Focus alone is a convenience, not a search trigger.
|
|
24
|
+
- Debounce: 200-300ms for local data, 300-500ms for remote. Faster
|
|
25
|
+
feels instant. Slower feels laggy.
|
|
26
|
+
- Keyboard nav: arrow keys move through results, Enter selects, Esc
|
|
27
|
+
closes. See accessibility.md for focus management.
|
|
28
|
+
- Highlight: bold the matching substring in results. Don't highlight
|
|
29
|
+
the whole result. That defeats the purpose.
|
|
30
|
+
- Recent searches: show below the input when empty, above live results
|
|
31
|
+
when typing. Max 5 recent items. Allow delete per item and clear all.
|
|
32
|
+
|
|
33
|
+
## Empty search state
|
|
34
|
+
|
|
35
|
+
- No query yet: show placeholder text with a format hint ("Search
|
|
36
|
+
projects..."), not a label ("Search").
|
|
37
|
+
- No results: "No results for [query]" with a clear-filter action.
|
|
38
|
+
Don't show "Try different keywords". That's condescending.
|
|
39
|
+
- Error state: "Something went wrong" is never enough. Say what
|
|
40
|
+
happened and offer retry.
|
|
41
|
+
|
|
42
|
+
## Result highlighting
|
|
43
|
+
|
|
44
|
+
- Highlight matching text in the result, not the surrounding context.
|
|
45
|
+
Context is helpful, but the match is what the user is looking for.
|
|
46
|
+
- Don't highlight more than 2 or 3 segments per result. Too much
|
|
47
|
+
highlighting looks like noise.
|
|
48
|
+
- Case-insensitive matching. Preserve original casing in results.
|
|
49
|
+
|
|
50
|
+
## Keyboard nav within results
|
|
51
|
+
|
|
52
|
+
- Arrow keys navigate results, Enter selects, Esc closes. See
|
|
53
|
+
accessibility.md for focus-trap rules.
|
|
54
|
+
- Type-ahead: typing while results are open jumps to the next result
|
|
55
|
+
starting with that character. Don't require reopening the list.
|
|
56
|
+
- Don't trap focus in the search input. Tab should move to the next
|
|
57
|
+
interactive element, not cycle within results.
|
|
58
|
+
|
|
59
|
+
## Don'ts
|
|
60
|
+
|
|
61
|
+
- Don't search on focus. Search is an action, not a reveal.
|
|
62
|
+
- Don't show more than 8 to 10 results without a "Show all" link.
|
|
63
|
+
Infinite scroll in search results is disorienting.
|
|
64
|
+
- Don't highlight every occurrence. One or two matches per result is
|
|
65
|
+
enough.
|
|
66
|
+
- Don't use dropdowns for search results. Dropdowns imply a single
|
|
67
|
+
selection. Search results imply a list of options.
|
|
68
|
+
- Don't forget the empty state. An empty result is still a result.
|