@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,527 @@
|
|
|
1
|
+
name: nerdev-docs
|
|
2
|
+
description: "Development-integrated docs: ADRs, design docs, incident postmortems, deploy runbooks with templates"
|
|
3
|
+
|
|
4
|
+
# nerdev-docs Skill
|
|
5
|
+
|
|
6
|
+
Development-integrated documentation. Docs that live with code, generate from code, evolve with code, and serve both humans and AI agents.
|
|
7
|
+
|
|
8
|
+
> **nerdev-co skill family:** This is one of three core skills. See also [`nerdev-monorepo`](../nerdev-monorepo/SKILL.md) for Turborepo + Bun monorepo structure, CI/CD, and deployment patterns, and [`nerdev-abstraction`](../nerdev-abstraction/SKILL.md) for interface-first, registry-based plug-and-play patterns. All three work together for nerdev-co projects.
|
|
9
|
+
>
|
|
10
|
+
> **AI agent docs:** `AGENTS.md` generation uses the [`agent-docs-writer`](../agent-docs-writer/SKILL.md) skill (referenced in Required Document Types).
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## Documentation Philosophy
|
|
14
|
+
|
|
15
|
+
**Documentation is not separate from development.** It's part of the same workflow:
|
|
16
|
+
- Written **before** or **during** implementation (not after)
|
|
17
|
+
- Generated **from** source of truth (code, schemas, configs)
|
|
18
|
+
- Versioned **with** code (same repo, same PR)
|
|
19
|
+
- Consumed **by** both humans and AI agents
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## Required Document Types
|
|
23
|
+
|
|
24
|
+
### 1. AGENTS.md (AI Agent Guidance) -- **MANDATORY**
|
|
25
|
+
Generated via `agent-docs-writer` skill. Every project root must have this.
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
project/
|
|
29
|
+
├── AGENTS.md # ← AI agent onboarding (generated)
|
|
30
|
+
├── README.md # ← Human onboarding
|
|
31
|
+
└── ...
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 2. Architecture Decision Records (ADRs)
|
|
35
|
+
**Location**: `docs/adr/YYYY-MM-DD-short-title.md`
|
|
36
|
+
|
|
37
|
+
```markdown
|
|
38
|
+
# ADR 001: Use TanStack Router over Next.js App Router
|
|
39
|
+
|
|
40
|
+
## Status
|
|
41
|
+
Accepted
|
|
42
|
+
|
|
43
|
+
## Context
|
|
44
|
+
Need file-based routing with type safety for canvas-heavy app.
|
|
45
|
+
Next.js SSR adds bundle overhead and hydration mismatches.
|
|
46
|
+
|
|
47
|
+
## Decision
|
|
48
|
+
Use Vite + TanStack Router for frontend.
|
|
49
|
+
|
|
50
|
+
## Consequences
|
|
51
|
+
- Smaller client bundle (~40% reduction)
|
|
52
|
+
- Type-safe routes with search param validation
|
|
53
|
+
- No SSR for canvas (client-only rendering)
|
|
54
|
+
- Migration path from Next.js documented
|
|
55
|
+
|
|
56
|
+
## References
|
|
57
|
+
- [TanStack Router vs Next.js](https://tanstack.com/router/latest/docs/framework/nextjs)
|
|
58
|
+
- PR #234: Frontend migration
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Template**: `docs/adr/template.md`
|
|
62
|
+
|
|
63
|
+
### 3. Design Docs (Pre-Implementation)
|
|
64
|
+
**Location**: `docs/design/feature-name.md`
|
|
65
|
+
|
|
66
|
+
```markdown
|
|
67
|
+
# Design: Real-time Cursor Sync
|
|
68
|
+
|
|
69
|
+
## Problem
|
|
70
|
+
Users need to see collaborators' cursors in real-time.
|
|
71
|
+
|
|
72
|
+
## Requirements
|
|
73
|
+
- <50ms latency local → remote
|
|
74
|
+
- Handle 50+ concurrent users per room
|
|
75
|
+
- Graceful degradation on reconnect
|
|
76
|
+
|
|
77
|
+
## Proposed Solution
|
|
78
|
+
```
|
|
79
|
+
User moves cursor
|
|
80
|
+
→ Throttled (16ms) WS message
|
|
81
|
+
→ Server broadcasts to room
|
|
82
|
+
→ Clients render with interpolation
|
|
83
|
+
→ Reconnect: full state sync
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Data Model
|
|
87
|
+
```typescript
|
|
88
|
+
interface CursorMessage {
|
|
89
|
+
type: 'cursor';
|
|
90
|
+
payload: {
|
|
91
|
+
userId: string;
|
|
92
|
+
userName: string;
|
|
93
|
+
x: number;
|
|
94
|
+
y: number;
|
|
95
|
+
timestamp: number;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## API Contract
|
|
101
|
+
- WS: `cursor` message type
|
|
102
|
+
- HTTP: `GET /api/rooms/:id/cursors` (initial load)
|
|
103
|
+
|
|
104
|
+
## Testing Strategy
|
|
105
|
+
- Unit: throttle, interpolation logic
|
|
106
|
+
- Integration: WS broadcast with 10 clients
|
|
107
|
+
- E2E: Two browsers, verify cursor visibility
|
|
108
|
+
|
|
109
|
+
## Rollout
|
|
110
|
+
- Feature flag: `FEATURE_CURSOR_SYNC`
|
|
111
|
+
- Canary: 10% of rooms
|
|
112
|
+
- Metrics: WS message rate, latency p95
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 4. Architecture Minimap (Visual Reference)
|
|
116
|
+
**Location**: `ARCHITECTURE_MINIMAP.md` (root)
|
|
117
|
+
|
|
118
|
+
```markdown
|
|
119
|
+
# Architecture Minimap
|
|
120
|
+
|
|
121
|
+
## System Overview
|
|
122
|
+
```mermaid
|
|
123
|
+
flowchart LR
|
|
124
|
+
subgraph Client
|
|
125
|
+
FE[Frontend :5173]
|
|
126
|
+
end
|
|
127
|
+
subgraph Server
|
|
128
|
+
HTTP[HTTP API :3001]
|
|
129
|
+
WS[WS Server :8080]
|
|
130
|
+
DB[(PostgreSQL)]
|
|
131
|
+
REDIS[(Redis)]
|
|
132
|
+
end
|
|
133
|
+
FE -->|REST| HTTP
|
|
134
|
+
FE -->|WS| WS
|
|
135
|
+
HTTP --> DB
|
|
136
|
+
WS --> REDIS
|
|
137
|
+
WS --> DB
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Data Flow: Shape Persistence
|
|
141
|
+
```mermaid
|
|
142
|
+
sequenceDiagram
|
|
143
|
+
participant User
|
|
144
|
+
participant FE
|
|
145
|
+
participant WS
|
|
146
|
+
participant HTTP
|
|
147
|
+
participant DB
|
|
148
|
+
User->>FE: Draw shape
|
|
149
|
+
FE->>FE: Compute diff
|
|
150
|
+
FE->>WS: shape-diff
|
|
151
|
+
WS->>FE: Broadcast diff
|
|
152
|
+
FE->>HTTP: Debounced save (1.5s)
|
|
153
|
+
HTTP->>DB: Upsert with version check
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Service Map
|
|
157
|
+
| Service | Port | Protocol | Responsibility |
|
|
158
|
+
|---------|------|----------|----------------|
|
|
159
|
+
| Frontend | 5173 | HTTP/WS | Canvas, UI, Auth |
|
|
160
|
+
| HTTP API | 3001 | REST | Auth, Rooms, Shapes |
|
|
161
|
+
| WS Server | 8080 | WS | Real-time sync, Presence |
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### 5. Feature Timeline / Changelog
|
|
165
|
+
**Location**: `docs/features.md`
|
|
166
|
+
|
|
167
|
+
```markdown
|
|
168
|
+
# Feature Timeline
|
|
169
|
+
|
|
170
|
+
## Phase 1: Bootstrap (Jan 2025)
|
|
171
|
+
- [x] Monorepo scaffolding (Turborepo + Bun)
|
|
172
|
+
- [x] HTTP + WS server skeletons
|
|
173
|
+
- [x] Frontend Vite + TanStack Router setup
|
|
174
|
+
- [x] Prisma schema + Neon connection
|
|
175
|
+
|
|
176
|
+
## Phase 2: Core Canvas (Jul 2025)
|
|
177
|
+
- [x] Canvas engine with Rough.js
|
|
178
|
+
- [x] Tools: Pencil, Rectangle, Ellipse, Arrow, Line, Text
|
|
179
|
+
- [x] Undo/Redo (delta-based, cap 100)
|
|
180
|
+
- [x] Export: PNG, SVG, JSON
|
|
181
|
+
|
|
182
|
+
## Phase 3: Auth & Rooms (Jul 2025)
|
|
183
|
+
- [x] Signup/Signin with bcrypt
|
|
184
|
+
- [x] Session cookies (httpOnly)
|
|
185
|
+
- [x] Room CRUD (create, join via slug)
|
|
186
|
+
- [x] Role-based access (owner, editor, viewer)
|
|
187
|
+
|
|
188
|
+
## Phase 4: Real-time Sync (Jul 2025)
|
|
189
|
+
- [x] WebSocket server (Bun.serve)
|
|
190
|
+
- [x] Diff-based broadcasting
|
|
191
|
+
- [x] Cursor sync with interpolation
|
|
192
|
+
- [x] Reconnection with full-state sync
|
|
193
|
+
|
|
194
|
+
## Phase 5: Production Hardening (Aug 2026)
|
|
195
|
+
- [x] Optimistic concurrency (version field)
|
|
196
|
+
- [x] CI/CD pipeline (GitHub Actions)
|
|
197
|
+
- [x] PM2 + Nginx deployment
|
|
198
|
+
- [x] Incident documentation process
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### 6. Incident Postmortems
|
|
202
|
+
**Location**: `docs/incidents/YYYY-MM-DD-incident-name.md`
|
|
203
|
+
|
|
204
|
+
```markdown
|
|
205
|
+
# Incident: WebSocket Connection Storm (2026-08-15)
|
|
206
|
+
|
|
207
|
+
## Summary
|
|
208
|
+
WS server CPU hit 100%, 500+ connections dropped, 5min recovery.
|
|
209
|
+
|
|
210
|
+
## Timeline
|
|
211
|
+
- 14:22: Deploy v2.3.1 (new cursor throttling)
|
|
212
|
+
- 14:23: CPU spike observed
|
|
213
|
+
- 14:25: Alert fired (CPU > 80%)
|
|
214
|
+
- 14:27: Manual restart WS server
|
|
215
|
+
- 14:28: Service restored
|
|
216
|
+
|
|
217
|
+
## Root Cause
|
|
218
|
+
Cursor throttling used `setInterval` per connection instead of shared timer.
|
|
219
|
+
500 connections = 500 intervals = event loop saturation.
|
|
220
|
+
|
|
221
|
+
## Fix
|
|
222
|
+
```typescript
|
|
223
|
+
// Before (broken)
|
|
224
|
+
connection.on('cursor', () => {
|
|
225
|
+
setInterval(sendCursor, 16); // Per connection!
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
// After (fixed)
|
|
229
|
+
const cursorBroadcaster = setInterval(() => {
|
|
230
|
+
rooms.forEach(room => broadcastCursors(room));
|
|
231
|
+
}, 16);
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## Prevention
|
|
235
|
+
- [x] Load test WS with 1000 connections
|
|
236
|
+
- [x] Add CPU/memory alerts per process
|
|
237
|
+
- [x] Code review checklist: no per-connection intervals
|
|
238
|
+
- [x] Document WS scaling limits in ARCHITECTURE_MINIMAP.md
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### 7. Deployment Runbook
|
|
242
|
+
**Location**: `deploy.md` (root)
|
|
243
|
+
|
|
244
|
+
```markdown
|
|
245
|
+
# Deployment Runbook
|
|
246
|
+
|
|
247
|
+
## Prerequisites
|
|
248
|
+
- AWS EC2 (t3.small minimum)
|
|
249
|
+
- Neon PostgreSQL branch
|
|
250
|
+
- Domain + Certbot SSL
|
|
251
|
+
|
|
252
|
+
## First-Time Setup
|
|
253
|
+
```bash
|
|
254
|
+
# On EC2
|
|
255
|
+
sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx pm2
|
|
256
|
+
git clone https://github.com/nerdev-co/project.git
|
|
257
|
+
cd project
|
|
258
|
+
cp .env.example .env # Fill in values
|
|
259
|
+
bun install
|
|
260
|
+
bun run build
|
|
261
|
+
pm2 start ecosystem.config.json
|
|
262
|
+
sudo nginx -t && sudo systemctl reload nginx
|
|
263
|
+
sudo certbot --nginx -d app.example.com
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## Routine Deploy (via GitHub Actions)
|
|
267
|
+
1. Push to `main` → CI runs
|
|
268
|
+
2. On success → Deploy workflow triggers
|
|
269
|
+
3. Workflow: `scp dist/` → `bun install` → `prisma migrate deploy` → `pm2 reload all`
|
|
270
|
+
|
|
271
|
+
## Rollback
|
|
272
|
+
```bash
|
|
273
|
+
pm2 reload all --update-env # If env changed
|
|
274
|
+
pm2 restart all # Quick restart
|
|
275
|
+
git revert <commit> && push # Code rollback
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## Troubleshooting
|
|
279
|
+
| Symptom | Check | Fix |
|
|
280
|
+
|---------|-------|-----|
|
|
281
|
+
| 502 Bad Gateway | `pm2 list` | `pm2 restart all` |
|
|
282
|
+
| WS connection fails | `nginx error.log` | Check proxy_pass / upgrade headers |
|
|
283
|
+
| DB migration fails | `pm2 logs http-backend` | `prisma migrate resolve --rolled-back` |
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### 8. API Contracts (Generated)
|
|
287
|
+
**Location**: `openapi.yaml` (root) + `asyncapi.yaml` (if event-driven)
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
# Generate from code
|
|
291
|
+
bun run openapi:gen # From Elysia routes
|
|
292
|
+
bun run asyncapi:gen # From event definitions
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### 9. Contribution Guide
|
|
296
|
+
**Location**: `CONTRIBUTING.md` (root)
|
|
297
|
+
|
|
298
|
+
```markdown
|
|
299
|
+
# Contributing
|
|
300
|
+
|
|
301
|
+
## Development Setup
|
|
302
|
+
```bash
|
|
303
|
+
bun install
|
|
304
|
+
cp .env.example .env
|
|
305
|
+
docker compose up -d db redis
|
|
306
|
+
bunx prisma migrate dev
|
|
307
|
+
bun run dev
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
## Workflow
|
|
311
|
+
1. Create issue or pick existing
|
|
312
|
+
2. Branch: `feat/short-description` or `fix/short-description`
|
|
313
|
+
3. Write design doc (if new feature): `docs/design/feature.md`
|
|
314
|
+
4. Implement with tests
|
|
315
|
+
5. Update ADR if architecture decision
|
|
316
|
+
6. Update feature timeline
|
|
317
|
+
7. PR: description links issue + design doc
|
|
318
|
+
8. CI must pass (typecheck, lint, build, test)
|
|
319
|
+
|
|
320
|
+
## Code Standards
|
|
321
|
+
- camelCase files/functions, PascalCase types
|
|
322
|
+
- JSDoc on all exports
|
|
323
|
+
- No `any` -- use `unknown` or proper types
|
|
324
|
+
- Shared code in `packages/`
|
|
325
|
+
- Diff-based WS sync (no full state)
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
## Generation Scripts (package.json)
|
|
330
|
+
|
|
331
|
+
```json
|
|
332
|
+
{
|
|
333
|
+
"scripts": {
|
|
334
|
+
"docs:gen": "bun run scripts/generate-docs.ts",
|
|
335
|
+
"openapi:gen": "bun run scripts/generate-openapi.ts",
|
|
336
|
+
"asyncapi:gen": "bun run scripts/generate-asyncapi.ts",
|
|
337
|
+
"adr:new": "bun run scripts/new-adr.ts",
|
|
338
|
+
"design:new": "bun run scripts/new-design.ts",
|
|
339
|
+
"incident:new": "bun run scripts/new-incident.ts"
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Generate ADR Script
|
|
345
|
+
```typescript
|
|
346
|
+
// scripts/new-adr.ts
|
|
347
|
+
const title = process.argv[2];
|
|
348
|
+
if (!title) {
|
|
349
|
+
console.error('Usage: bun run adr:new "short title"');
|
|
350
|
+
process.exit(1);
|
|
351
|
+
}
|
|
352
|
+
const date = new Date().toISOString().split('T')[0];
|
|
353
|
+
const slug = title.toLowerCase().replace(/[^a-z0-9]+/g, '-');
|
|
354
|
+
const filename = `docs/adr/${date}-${slug}.md`;
|
|
355
|
+
const template = await Bun.file('docs/adr/template.md').text();
|
|
356
|
+
const content = template
|
|
357
|
+
.replace('{{TITLE}}', title)
|
|
358
|
+
.replace('{{DATE}}', date)
|
|
359
|
+
.replace('{{NUMBER}}', String(await getNextAdrNumber()).padStart(3, '0'));
|
|
360
|
+
await Bun.write(filename, content);
|
|
361
|
+
console.log(`Created ${filename}`);
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
### Generate Design Doc Script
|
|
365
|
+
```typescript
|
|
366
|
+
// scripts/new-design.ts
|
|
367
|
+
const feature = process.argv[2];
|
|
368
|
+
if (!feature) {
|
|
369
|
+
console.error('Usage: bun run design:new "feature name"');
|
|
370
|
+
process.exit(1);
|
|
371
|
+
}
|
|
372
|
+
const filename = `docs/design/${feature.toLowerCase().replace(/\s+/g, '-')}.md`;
|
|
373
|
+
const template = await Bun.file('docs/design/template.md').text();
|
|
374
|
+
await Bun.write(filename, template.replace('{{FEATURE}}', feature));
|
|
375
|
+
console.log(`Created ${filename}`);
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
## Documentation Linting
|
|
380
|
+
|
|
381
|
+
```yaml
|
|
382
|
+
# .github/workflows/docs.yml
|
|
383
|
+
jobs:
|
|
384
|
+
docs-lint:
|
|
385
|
+
runs-on: ubuntu-latest
|
|
386
|
+
steps:
|
|
387
|
+
- uses: actions/checkout@v4
|
|
388
|
+
- uses: oven-sh/setup-bun@v1
|
|
389
|
+
- run: bun install
|
|
390
|
+
- run: bun run docs:lint # markdownlint + link check
|
|
391
|
+
|
|
392
|
+
docs-generate:
|
|
393
|
+
runs-on: ubuntu-latest
|
|
394
|
+
needs: docs-lint
|
|
395
|
+
steps:
|
|
396
|
+
- uses: actions/checkout@v4
|
|
397
|
+
- uses: oven-sh/setup-bun@v1
|
|
398
|
+
- run: bun install
|
|
399
|
+
- run: bun run docs:gen
|
|
400
|
+
- run: bun run openapi:gen
|
|
401
|
+
- uses: actions/upload-artifact@v4
|
|
402
|
+
with:
|
|
403
|
+
name: generated-docs
|
|
404
|
+
path: docs/generated/
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### Markdown Lint Config
|
|
408
|
+
```json
|
|
409
|
+
// .markdownlint.json
|
|
410
|
+
{
|
|
411
|
+
"MD013": false, // Line length
|
|
412
|
+
"MD024": { "siblings_only": true }, // Duplicate headings
|
|
413
|
+
"MD033": false, // Inline HTML (for Mermaid)
|
|
414
|
+
"MD041": false // First line heading
|
|
415
|
+
}
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
## AI-Agent Consumption Patterns
|
|
420
|
+
|
|
421
|
+
### AGENTS.md Structure (from agent-docs-writer)
|
|
422
|
+
```markdown
|
|
423
|
+
# AGENTS.md
|
|
424
|
+
|
|
425
|
+
## Project Overview
|
|
426
|
+
One-paragraph summary + architecture diagram.
|
|
427
|
+
|
|
428
|
+
## Quick Start
|
|
429
|
+
Commands to run dev, build, test.
|
|
430
|
+
|
|
431
|
+
## Key Conventions
|
|
432
|
+
- Naming, file structure, patterns
|
|
433
|
+
|
|
434
|
+
## Common Tasks
|
|
435
|
+
- "Add a new tool" → steps + files to touch
|
|
436
|
+
- "Add API endpoint" → steps + files to touch
|
|
437
|
+
- "Debug WS issue" → logs + endpoints
|
|
438
|
+
|
|
439
|
+
## Architecture Map
|
|
440
|
+
Mermaid diagram + service table.
|
|
441
|
+
|
|
442
|
+
## Gotchas
|
|
443
|
+
- "Don't import Prisma directly in routes"
|
|
444
|
+
- "WS messages must be discriminated unions"
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
### Code Annotations for AI
|
|
448
|
+
```typescript
|
|
449
|
+
/**
|
|
450
|
+
* @ai-context This is the main canvas rendering loop.
|
|
451
|
+
* @ai-side-effect Mutates `dirtyRegions` for partial redraw.
|
|
452
|
+
* @ai-related-files packages/core/interfaces/tool.ts, apps/frontend/src/draw/tools/*
|
|
453
|
+
*/
|
|
454
|
+
export function renderFrame(context: RenderContext): void {
|
|
455
|
+
// ...
|
|
456
|
+
}
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
|
|
460
|
+
## Documentation Checklist per PR
|
|
461
|
+
|
|
462
|
+
- [ ] **New feature?** → Design doc in `docs/design/`
|
|
463
|
+
- [ ] **Architecture decision?** → ADR in `docs/adr/`
|
|
464
|
+
- [ ] **API change?** → `bun run openapi:gen` updated
|
|
465
|
+
- [ ] **Event change?** → `bun run asyncapi:gen` updated
|
|
466
|
+
- [ ] **Breaking change?** → Changelog entry + migration guide
|
|
467
|
+
- [ ] **Incident occurred?** → Postmortem in `docs/incidents/`
|
|
468
|
+
- [ ] **Deploy process changed?** → `deploy.md` updated
|
|
469
|
+
- [ ] **Onboarding info missing?** → `AGENTS.md` / `README.md` updated
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
## Tooling
|
|
473
|
+
|
|
474
|
+
| Tool | Purpose |
|
|
475
|
+
|------|---------|
|
|
476
|
+
| `markdownlint` | Lint markdown files |
|
|
477
|
+
| `markdown-link-check` | Verify links |
|
|
478
|
+
| `mermaid-cli` | Render diagrams in CI |
|
|
479
|
+
| `typedoc` | Generate API docs from JSDoc |
|
|
480
|
+
| `openapi-generator` | Generate clients from OpenAPI |
|
|
481
|
+
| `asyncapi-generator` | Generate code from AsyncAPI |
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
## Integration with Other Skills
|
|
485
|
+
|
|
486
|
+
| Skill | Provides |
|
|
487
|
+
|-------|----------|
|
|
488
|
+
| `nerdev-monorepo` | Repo structure, required files list |
|
|
489
|
+
| `nerdev-abstraction` | Interface docs, plugin protocol docs |
|
|
490
|
+
| `agent-docs-writer` | `AGENTS.md` generation |
|
|
491
|
+
| `this skill` | All other docs + generation scripts |
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+
## Quick Start for New Projects
|
|
495
|
+
|
|
496
|
+
```bash
|
|
497
|
+
# 1. Scaffold docs structure
|
|
498
|
+
mkdir -p docs/adr docs/design docs/incidents docs/generated
|
|
499
|
+
|
|
500
|
+
# 2. Copy templates
|
|
501
|
+
cp ~/.config/opencode/skills/nerdev-docs/templates/* docs/
|
|
502
|
+
|
|
503
|
+
# 3. Add scripts to package.json
|
|
504
|
+
# (see Generation Scripts above)
|
|
505
|
+
|
|
506
|
+
# 4. Create first ADR
|
|
507
|
+
bun run adr:new "Initial architecture decisions"
|
|
508
|
+
|
|
509
|
+
# 5. Create first design doc
|
|
510
|
+
bun run design:new "Core domain model"
|
|
511
|
+
|
|
512
|
+
# 6. Generate AGENTS.md
|
|
513
|
+
skill agent-docs-writer
|
|
514
|
+
# Follow prompts
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
## Templates Location
|
|
519
|
+
|
|
520
|
+
```
|
|
521
|
+
~/.config/opencode/skills/nerdev-docs/templates/
|
|
522
|
+
├── adr-template.md
|
|
523
|
+
├── design-template.md
|
|
524
|
+
├── incident-template.md
|
|
525
|
+
├── contributing-template.md
|
|
526
|
+
└── deploy-template.md
|
|
527
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# ADR {{NUMBER}}: {{TITLE}}
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
Proposed | Accepted | Rejected | Superseded
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
What is the issue that we're seeing that is motivating this decision or change?
|
|
8
|
+
|
|
9
|
+
## Decision
|
|
10
|
+
What is the change that we're proposing and/or doing?
|
|
11
|
+
|
|
12
|
+
## Consequences
|
|
13
|
+
What becomes easier or more difficult to do because of this change?
|
|
14
|
+
|
|
15
|
+
### Positive
|
|
16
|
+
-
|
|
17
|
+
|
|
18
|
+
### Negative
|
|
19
|
+
-
|
|
20
|
+
|
|
21
|
+
### Risks
|
|
22
|
+
-
|
|
23
|
+
|
|
24
|
+
## Alternatives Considered
|
|
25
|
+
| Alternative | Pros | Cons | Why Not Chosen |
|
|
26
|
+
|-------------|------|------|----------------|
|
|
27
|
+
| | | | |
|
|
28
|
+
|
|
29
|
+
## Implementation Notes
|
|
30
|
+
-
|
|
31
|
+
|
|
32
|
+
## References
|
|
33
|
+
-
|
|
34
|
+
|
|
35
|
+
## Related ADRs
|
|
36
|
+
- ADR XXX:
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
*Created: {{DATE}}*
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Contributing to {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
Thank you for contributing! This guide helps you get started.
|
|
4
|
+
|
|
5
|
+
## Code of Conduct
|
|
6
|
+
By participating, you agree to our [Code of Conduct](CODE_OF_CONDUCT.md).
|
|
7
|
+
|
|
8
|
+
## Quick Start
|
|
9
|
+
```bash
|
|
10
|
+
# 1. Clone & install
|
|
11
|
+
git clone https://github.com/{{ORG}}/{{REPO}}.git
|
|
12
|
+
cd {{REPO}}
|
|
13
|
+
bun install
|
|
14
|
+
|
|
15
|
+
# 2. Configure environment
|
|
16
|
+
cp .env.example .env
|
|
17
|
+
# Edit .env with your values
|
|
18
|
+
|
|
19
|
+
# 3. Start infrastructure
|
|
20
|
+
docker compose up -d db redis
|
|
21
|
+
|
|
22
|
+
# 4. Setup database
|
|
23
|
+
bunx prisma migrate dev
|
|
24
|
+
bun run db:seed # Optional: seed demo data
|
|
25
|
+
|
|
26
|
+
# 5. Start development
|
|
27
|
+
bun run dev
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Development Workflow
|
|
31
|
+
|
|
32
|
+
### Branch Naming
|
|
33
|
+
| Type | Prefix | Example |
|
|
34
|
+
|------|--------|---------|
|
|
35
|
+
| Feature | `feat/` | `feat/cursor-sync` |
|
|
36
|
+
| Bug Fix | `fix/` | `fix/websocket-reconnect` |
|
|
37
|
+
| Refactor | `refactor/` | `refactor/tool-registry` |
|
|
38
|
+
| Docs | `docs/` | `docs/adr-auth-strategy` |
|
|
39
|
+
| Chore | `chore/` | `chore/update-deps` |
|
|
40
|
+
|
|
41
|
+
### Commit Messages
|
|
42
|
+
Follow [Conventional Commits](https://www.conventionalcommits.org/):
|
|
43
|
+
```
|
|
44
|
+
type(scope): description
|
|
45
|
+
|
|
46
|
+
[optional body]
|
|
47
|
+
|
|
48
|
+
[optional footer]
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Examples:
|
|
52
|
+
```
|
|
53
|
+
feat(canvas): add eraser tool with pressure sensitivity
|
|
54
|
+
|
|
55
|
+
fix(ws): handle reconnection with exponential backoff
|
|
56
|
+
|
|
57
|
+
docs(adr): record decision to use TanStack Router
|
|
58
|
+
|
|
59
|
+
chore(deps): upgrade bun to 1.2.0
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Pull Request Process
|
|
63
|
+
1. **Create design doc** (new features): `docs/design/feature-name.md`
|
|
64
|
+
2. **Implement** with tests
|
|
65
|
+
3. **Update docs**: ADR, feature timeline, API specs
|
|
66
|
+
4. **Run checks locally**:
|
|
67
|
+
```bash
|
|
68
|
+
bun run lint
|
|
69
|
+
bun run check-types
|
|
70
|
+
bun run build
|
|
71
|
+
bun run test
|
|
72
|
+
```
|
|
73
|
+
5. **Open PR** with:
|
|
74
|
+
- Link to issue
|
|
75
|
+
- Link to design doc (if applicable)
|
|
76
|
+
- Screenshots/videos (UI changes)
|
|
77
|
+
- Test results
|
|
78
|
+
6. **CI must pass** (typecheck, lint, build, test)
|
|
79
|
+
7. **Code review** (1 approval minimum)
|
|
80
|
+
8. **Squash merge** to `main`
|
|
81
|
+
|
|
82
|
+
## Code Standards
|
|
83
|
+
|
|
84
|
+
### Naming Conventions
|
|
85
|
+
| Element | Convention |
|
|
86
|
+
|---------|------------|
|
|
87
|
+
| Files | `camelCase.ts` |
|
|
88
|
+
| Functions/Variables | `camelCase` |
|
|
89
|
+
| Types/Interfaces | `PascalCase` |
|
|
90
|
+
| Enums | `PascalCase` |
|
|
91
|
+
| Constants | `UPPER_SNAKE_CASE` |
|
|
92
|
+
| React Components | `PascalCase` |
|
|
93
|
+
| CSS Classes | `kebab-case` |
|
|
94
|
+
|
|
95
|
+
### TypeScript
|
|
96
|
+
- No `any` -- use `unknown` or proper types
|
|
97
|
+
- Strict mode enabled
|
|
98
|
+
- JSDoc on all exports
|
|
99
|
+
- Discriminated unions for WS messages
|
|
100
|
+
|
|
101
|
+
### Architecture
|
|
102
|
+
- Shared code in `packages/`
|
|
103
|
+
- Service layer for business logic
|
|
104
|
+
- Diff-based WS sync (no full state)
|
|
105
|
+
- Repository pattern for data access
|
|
106
|
+
|
|
107
|
+
### Testing
|
|
108
|
+
- Unit: `*.test.ts` alongside source
|
|
109
|
+
- Integration: `tests/integration/`
|
|
110
|
+
- E2E: `tests/e2e/`
|
|
111
|
+
- Target: >80% coverage on critical paths
|
|
112
|
+
|
|
113
|
+
## Documentation Standards
|
|
114
|
+
- **Design docs** for new features (`docs/design/`)
|
|
115
|
+
- **ADRs** for architecture decisions (`docs/adr/`)
|
|
116
|
+
- **Incident postmortems** for production issues (`docs/incidents/`)
|
|
117
|
+
- **API specs** generated from code (`openapi.yaml`, `asyncapi.yaml`)
|
|
118
|
+
- **AGENTS.md** for AI agents (auto-generated)
|
|
119
|
+
|
|
120
|
+
## Release Process
|
|
121
|
+
1. Version bump in `package.json` (workspace root)
|
|
122
|
+
2. Changelog generated from commits
|
|
123
|
+
3. Git tag: `v{major}.{minor}.{patch}`
|
|
124
|
+
4. GitHub Release with notes
|
|
125
|
+
5. Deploy workflow triggers automatically
|
|
126
|
+
|
|
127
|
+
## Getting Help
|
|
128
|
+
- **Questions**: GitHub Discussions
|
|
129
|
+
- **Bugs**: GitHub Issues (use template)
|
|
130
|
+
- **Security**: Email security@{{ORG}}.com
|
|
131
|
+
- **IRC/Slack**: #{{REPO}}-dev
|
|
132
|
+
|
|
133
|
+
## Recognition
|
|
134
|
+
Contributors are recognized in:
|
|
135
|
+
- `AUTHORS.md`
|
|
136
|
+
- Release notes
|
|
137
|
+
- GitHub Contributors graph
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
*Based on nerdev-co conventions. See `nerdev-monorepo` and `nerdev-abstraction` skills for details.*
|