@baselane/packs 0.1.0
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 +191 -0
- package/NOTICE +6 -0
- package/README.md +15 -0
- package/dist/ai-merge.d.ts +26 -0
- package/dist/ai-merge.js +165 -0
- package/dist/aliases.d.ts +7 -0
- package/dist/aliases.js +9 -0
- package/dist/compose-draft.d.ts +19 -0
- package/dist/compose-draft.js +170 -0
- package/dist/drift-detect.d.ts +8 -0
- package/dist/drift-detect.js +21 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.js +21 -0
- package/dist/ingest.d.ts +25 -0
- package/dist/ingest.js +262 -0
- package/dist/load.d.ts +7 -0
- package/dist/load.js +29 -0
- package/dist/manifest.d.ts +71 -0
- package/dist/manifest.js +208 -0
- package/dist/materialize-harness.d.ts +15 -0
- package/dist/materialize-harness.js +48 -0
- package/dist/merge-region.d.ts +60 -0
- package/dist/merge-region.js +166 -0
- package/dist/overlap.d.ts +32 -0
- package/dist/overlap.js +49 -0
- package/dist/pack-from-fileset.d.ts +13 -0
- package/dist/pack-from-fileset.js +133 -0
- package/dist/render/adapters.d.ts +6 -0
- package/dist/render/adapters.js +43 -0
- package/dist/render/agents-md.d.ts +3 -0
- package/dist/render/agents-md.js +49 -0
- package/dist/render/bundle-union.d.ts +10 -0
- package/dist/render/bundle-union.js +87 -0
- package/dist/render/bundle.d.ts +3 -0
- package/dist/render/bundle.js +51 -0
- package/dist/render/capabilities.d.ts +19 -0
- package/dist/render/capabilities.js +86 -0
- package/dist/render/claude.d.ts +3 -0
- package/dist/render/claude.js +92 -0
- package/dist/render/design.d.ts +27 -0
- package/dist/render/design.js +443 -0
- package/dist/render/graph.d.ts +11 -0
- package/dist/render/graph.js +245 -0
- package/dist/render/memory.d.ts +35 -0
- package/dist/render/memory.js +353 -0
- package/dist/render/render-pack.d.ts +3 -0
- package/dist/render/render-pack.js +43 -0
- package/dist/render/repo-union.d.ts +14 -0
- package/dist/render/repo-union.js +94 -0
- package/dist/render/rollout-files.d.ts +18 -0
- package/dist/render/rollout-files.js +39 -0
- package/dist/render/system-map.d.ts +8 -0
- package/dist/render/system-map.js +73 -0
- package/dist/render/tasks.d.ts +32 -0
- package/dist/render/tasks.js +327 -0
- package/dist/render/wiki.d.ts +30 -0
- package/dist/render/wiki.js +288 -0
- package/dist/seed/graph-seed.d.ts +17 -0
- package/dist/seed/graph-seed.js +18 -0
- package/dist/seed/wiki-seed.d.ts +23 -0
- package/dist/seed/wiki-seed.js +133 -0
- package/dist/seed-skills.d.ts +18 -0
- package/dist/seed-skills.js +134 -0
- package/dist/types.d.ts +122 -0
- package/dist/types.js +1 -0
- package/dist/validate.d.ts +30 -0
- package/dist/validate.js +397 -0
- package/package.json +38 -0
- package/packs/database-review/pack.json +44 -0
- package/packs/database-review/rendered/.baselane/capabilities.json +10 -0
- package/packs/database-review/rendered/.baselane/system-map/README.md +18 -0
- package/packs/database-review/rendered/.claude/agents/database-reviewer.md +8 -0
- package/packs/database-review/rendered/.claude/commands/db-review.md +6 -0
- package/packs/database-review/rendered/.claude/commands/map.md +6 -0
- package/packs/database-review/rendered/.claude/settings.json +26 -0
- package/packs/database-review/rendered/.github/copilot-instructions.md +48 -0
- package/packs/database-review/rendered/AGENTS.md +66 -0
- package/packs/database-review/rendered/CLAUDE.md +9 -0
- package/packs/database-review/rendered/GEMINI.md +3 -0
- package/packs/disciplined-workflow/pack.json +63 -0
- package/packs/disciplined-workflow/rendered/.baselane/capabilities.json +10 -0
- package/packs/disciplined-workflow/rendered/.baselane/tasks/README.md +36 -0
- package/packs/disciplined-workflow/rendered/.claude/agents/plan-reviewer.md +8 -0
- package/packs/disciplined-workflow/rendered/.claude/agents/task-reviewer.md +8 -0
- package/packs/disciplined-workflow/rendered/.claude/commands/brainstorm.md +6 -0
- package/packs/disciplined-workflow/rendered/.claude/commands/execute-plan.md +6 -0
- package/packs/disciplined-workflow/rendered/.claude/commands/plan-work.md +6 -0
- package/packs/disciplined-workflow/rendered/.claude/commands/write-plan.md +6 -0
- package/packs/disciplined-workflow/rendered/.claude/settings.json +24 -0
- package/packs/disciplined-workflow/rendered/.github/copilot-instructions.md +24 -0
- package/packs/disciplined-workflow/rendered/AGENTS.md +43 -0
- package/packs/disciplined-workflow/rendered/CLAUDE.md +12 -0
- package/packs/disciplined-workflow/rendered/GEMINI.md +3 -0
- package/packs/frontend-design/pack.json +129 -0
- package/packs/frontend-design/rendered/.claude/skills/clone/SKILL.md +39 -0
- package/packs/frontend-design/rendered/.claude/skills/functional-ui/SKILL.md +78 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/SKILL.md +36 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-core.md +254 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-frameworks.md +266 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-performance.md +79 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-plugins.md +433 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-react.md +136 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-scrolltrigger.md +296 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-timeline.md +107 -0
- package/packs/frontend-design/rendered/.claude/skills/gsap/gsap-utils.md +284 -0
- package/packs/frontend-design/rendered/.claude/skills/marketing-ui/SKILL.md +36 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/SKILL.md +267 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/base-vs-radix.md +306 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/cli.md +290 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/composition.md +195 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/customization.md +209 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/forms.md +192 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/icons.md +101 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/mcp.md +105 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/registry.md +277 -0
- package/packs/frontend-design/rendered/.claude/skills/shadcn/styling.md +162 -0
- package/packs/frontend-design/rendered/.github/copilot-instructions.md +474 -0
- package/packs/frontend-design/rendered/AGENTS.md +33 -0
- package/packs/frontend-design/rendered/CLAUDE.md +10 -0
- package/packs/frontend-design/rendered/GEMINI.md +456 -0
- package/packs/frontend-taste/pack.json +43 -0
- package/packs/frontend-taste/rendered/.baselane/capabilities.json +16 -0
- package/packs/frontend-taste/rendered/.claude/agents/taste-reviewer.md +8 -0
- package/packs/frontend-taste/rendered/.claude/commands/design-review.md +6 -0
- package/packs/frontend-taste/rendered/.claude/settings.json +15 -0
- package/packs/frontend-taste/rendered/.github/copilot-instructions.md +51 -0
- package/packs/frontend-taste/rendered/AGENTS.md +68 -0
- package/packs/frontend-taste/rendered/CLAUDE.md +8 -0
- package/packs/frontend-taste/rendered/DESIGN.md +72 -0
- package/packs/frontend-taste/rendered/GEMINI.md +3 -0
- package/packs/go-rules/pack.json +38 -0
- package/packs/go-rules/rendered/.claude/agents/go-reviewer.md +8 -0
- package/packs/go-rules/rendered/.claude/commands/go-review.md +6 -0
- package/packs/go-rules/rendered/.claude/settings.json +15 -0
- package/packs/go-rules/rendered/.github/copilot-instructions.md +44 -0
- package/packs/go-rules/rendered/AGENTS.md +54 -0
- package/packs/go-rules/rendered/CLAUDE.md +8 -0
- package/packs/go-rules/rendered/GEMINI.md +3 -0
- package/packs/python-rules/pack.json +38 -0
- package/packs/python-rules/rendered/.claude/agents/python-reviewer.md +8 -0
- package/packs/python-rules/rendered/.claude/commands/python-review.md +6 -0
- package/packs/python-rules/rendered/.claude/settings.json +15 -0
- package/packs/python-rules/rendered/.github/copilot-instructions.md +43 -0
- package/packs/python-rules/rendered/AGENTS.md +53 -0
- package/packs/python-rules/rendered/CLAUDE.md +8 -0
- package/packs/python-rules/rendered/GEMINI.md +3 -0
- package/packs/second-brain/pack.json +36 -0
- package/packs/second-brain/rendered/.baselane/capabilities.json +25 -0
- package/packs/second-brain/rendered/.baselane/memory/README.md +34 -0
- package/packs/second-brain/rendered/.baselane/wiki/README.md +62 -0
- package/packs/second-brain/rendered/.claude/agents/librarian.md +14 -0
- package/packs/second-brain/rendered/.claude/commands/remember.md +6 -0
- package/packs/second-brain/rendered/.claude/commands/wiki.md +6 -0
- package/packs/second-brain/rendered/.claude/settings.json +35 -0
- package/packs/second-brain/rendered/.github/copilot-instructions.md +24 -0
- package/packs/second-brain/rendered/AGENTS.md +41 -0
- package/packs/second-brain/rendered/CLAUDE.md +9 -0
- package/packs/second-brain/rendered/GEMINI.md +3 -0
- package/packs/security-review/pack.json +72 -0
- package/packs/security-review/rendered/.claude/agents/security-reviewer.md +8 -0
- package/packs/security-review/rendered/.claude/commands/security-audit.md +6 -0
- package/packs/security-review/rendered/.claude/commands/security-scan.md +6 -0
- package/packs/security-review/rendered/.claude/settings.json +35 -0
- package/packs/security-review/rendered/.claude/skills/security-audit/SKILL.md +44 -0
- package/packs/security-review/rendered/.claude/skills/validate-at-boundaries/SKILL.md +41 -0
- package/packs/security-review/rendered/.github/copilot-instructions.md +137 -0
- package/packs/security-review/rendered/AGENTS.md +66 -0
- package/packs/security-review/rendered/CLAUDE.md +11 -0
- package/packs/security-review/rendered/GEMINI.md +90 -0
- package/packs/software-engineer-harness/pack.json +98 -0
- package/packs/software-engineer-harness/rendered/.baselane/capabilities.json +15 -0
- package/packs/software-engineer-harness/rendered/.baselane/system-map/README.md +18 -0
- package/packs/software-engineer-harness/rendered/.baselane/tasks/README.md +36 -0
- package/packs/software-engineer-harness/rendered/.claude/agents/architect.md +8 -0
- package/packs/software-engineer-harness/rendered/.claude/agents/checker.md +8 -0
- package/packs/software-engineer-harness/rendered/.claude/agents/code-reviewer.md +8 -0
- package/packs/software-engineer-harness/rendered/.claude/agents/code-simplifier.md +8 -0
- package/packs/software-engineer-harness/rendered/.claude/agents/planner.md +8 -0
- package/packs/software-engineer-harness/rendered/.claude/agents/reviewer.md +8 -0
- package/packs/software-engineer-harness/rendered/.claude/commands/build-and-check.md +6 -0
- package/packs/software-engineer-harness/rendered/.claude/commands/map.md +6 -0
- package/packs/software-engineer-harness/rendered/.claude/commands/plan-change.md +6 -0
- package/packs/software-engineer-harness/rendered/.claude/commands/plan-work.md +6 -0
- package/packs/software-engineer-harness/rendered/.claude/commands/review-change.md +6 -0
- package/packs/software-engineer-harness/rendered/.claude/commands/tdd-task.md +6 -0
- package/packs/software-engineer-harness/rendered/.claude/settings.json +35 -0
- package/packs/software-engineer-harness/rendered/.github/copilot-instructions.md +37 -0
- package/packs/software-engineer-harness/rendered/AGENTS.md +58 -0
- package/packs/software-engineer-harness/rendered/CLAUDE.md +18 -0
- package/packs/software-engineer-harness/rendered/GEMINI.md +3 -0
- package/packs/systematic-debugging/pack.json +44 -0
- package/packs/systematic-debugging/rendered/.claude/agents/debugger.md +8 -0
- package/packs/systematic-debugging/rendered/.claude/commands/debug.md +6 -0
- package/packs/systematic-debugging/rendered/.claude/commands/root-cause.md +6 -0
- package/packs/systematic-debugging/rendered/.claude/settings.json +15 -0
- package/packs/systematic-debugging/rendered/.github/copilot-instructions.md +20 -0
- package/packs/systematic-debugging/rendered/AGENTS.md +31 -0
- package/packs/systematic-debugging/rendered/CLAUDE.md +9 -0
- package/packs/systematic-debugging/rendered/GEMINI.md +3 -0
- package/packs/token-efficiency-harness/pack.json +49 -0
- package/packs/token-efficiency-harness/rendered/.baselane/capabilities.json +10 -0
- package/packs/token-efficiency-harness/rendered/.baselane/memory/README.md +34 -0
- package/packs/token-efficiency-harness/rendered/.claude/agents/scout.md +8 -0
- package/packs/token-efficiency-harness/rendered/.claude/commands/handoff.md +6 -0
- package/packs/token-efficiency-harness/rendered/.claude/commands/remember.md +6 -0
- package/packs/token-efficiency-harness/rendered/.claude/commands/usage-audit.md +6 -0
- package/packs/token-efficiency-harness/rendered/.claude/settings.json +26 -0
- package/packs/token-efficiency-harness/rendered/.github/copilot-instructions.md +26 -0
- package/packs/token-efficiency-harness/rendered/AGENTS.md +44 -0
- package/packs/token-efficiency-harness/rendered/CLAUDE.md +10 -0
- package/packs/token-efficiency-harness/rendered/GEMINI.md +3 -0
- package/packs/typescript-rules/pack.json +46 -0
- package/packs/typescript-rules/rendered/.claude/agents/typescript-reviewer.md +8 -0
- package/packs/typescript-rules/rendered/.claude/commands/typescript-review.md +6 -0
- package/packs/typescript-rules/rendered/.claude/settings.json +15 -0
- package/packs/typescript-rules/rendered/.claude/skills/immutable-updates/SKILL.md +46 -0
- package/packs/typescript-rules/rendered/.github/copilot-instructions.md +89 -0
- package/packs/typescript-rules/rendered/AGENTS.md +55 -0
- package/packs/typescript-rules/rendered/CLAUDE.md +9 -0
- package/packs/typescript-rules/rendered/GEMINI.md +51 -0
- package/skills/algorithmic-art/LICENSE +202 -0
- package/skills/algorithmic-art/LICENSE.txt +202 -0
- package/skills/algorithmic-art/SKILL.md +405 -0
- package/skills/algorithmic-art/templates/generator_template.js +223 -0
- package/skills/algorithmic-art/templates/viewer.html +599 -0
- package/skills/brainstorming/LICENSE +21 -0
- package/skills/brainstorming/SKILL.md +159 -0
- package/skills/brainstorming/scripts/frame-template.html +213 -0
- package/skills/brainstorming/scripts/helper.js +167 -0
- package/skills/brainstorming/scripts/server.cjs +723 -0
- package/skills/brainstorming/scripts/start-server.sh +209 -0
- package/skills/brainstorming/scripts/stop-server.sh +120 -0
- package/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/skills/brainstorming/visual-companion.md +291 -0
- package/skills/brand-guidelines/LICENSE +202 -0
- package/skills/brand-guidelines/LICENSE.txt +202 -0
- package/skills/brand-guidelines/SKILL.md +73 -0
- package/skills/canvas-design/LICENSE +202 -0
- package/skills/canvas-design/LICENSE.txt +202 -0
- package/skills/canvas-design/SKILL.md +130 -0
- package/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/dispatching-parallel-agents/LICENSE +21 -0
- package/skills/dispatching-parallel-agents/SKILL.md +185 -0
- package/skills/executing-plans/LICENSE +21 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/finishing-a-development-branch/LICENSE +21 -0
- package/skills/finishing-a-development-branch/SKILL.md +241 -0
- package/skills/first-party/README.md +32 -0
- package/skills/first-party/append-only-jsonl-stores/SKILL.md +50 -0
- package/skills/first-party/golden-snapshot-discipline/SKILL.md +45 -0
- package/skills/first-party/immutable-updates/SKILL.md +46 -0
- package/skills/first-party/manifest.json +10 -0
- package/skills/first-party/ts-extension-imports/SKILL.md +49 -0
- package/skills/first-party/validate-at-boundaries/SKILL.md +41 -0
- package/skills/first-party/zero-dependency-discipline/SKILL.md +41 -0
- package/skills/frontend-design/LICENSE +177 -0
- package/skills/frontend-design/LICENSE.txt +177 -0
- package/skills/frontend-design/SKILL.md +55 -0
- package/skills/internal-comms/LICENSE +202 -0
- package/skills/internal-comms/LICENSE.txt +202 -0
- package/skills/internal-comms/SKILL.md +32 -0
- package/skills/internal-comms/examples/3p-updates.md +47 -0
- package/skills/internal-comms/examples/company-newsletter.md +65 -0
- package/skills/internal-comms/examples/faq-answers.md +30 -0
- package/skills/internal-comms/examples/general-comms.md +16 -0
- package/skills/mcp-builder/LICENSE +202 -0
- package/skills/mcp-builder/LICENSE.txt +202 -0
- package/skills/mcp-builder/SKILL.md +236 -0
- package/skills/mcp-builder/reference/evaluation.md +602 -0
- package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/skills/mcp-builder/scripts/connections.py +151 -0
- package/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/skills/receiving-code-review/LICENSE +21 -0
- package/skills/receiving-code-review/SKILL.md +213 -0
- package/skills/requesting-code-review/LICENSE +21 -0
- package/skills/requesting-code-review/SKILL.md +103 -0
- package/skills/requesting-code-review/code-reviewer.md +172 -0
- package/skills/seed-manifest.json +185 -0
- package/skills/skill-creator/LICENSE +202 -0
- package/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skill-creator/SKILL.md +485 -0
- package/skills/skill-creator/agents/analyzer.md +274 -0
- package/skills/skill-creator/agents/comparator.md +202 -0
- package/skills/skill-creator/agents/grader.md +223 -0
- package/skills/skill-creator/assets/eval_review.html +146 -0
- package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/skills/skill-creator/references/schemas.md +430 -0
- package/skills/skill-creator/scripts/__init__.py +0 -0
- package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/skills/skill-creator/scripts/generate_report.py +326 -0
- package/skills/skill-creator/scripts/improve_description.py +247 -0
- package/skills/skill-creator/scripts/package_skill.py +136 -0
- package/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/skills/skill-creator/scripts/run_eval.py +310 -0
- package/skills/skill-creator/scripts/run_loop.py +328 -0
- package/skills/skill-creator/scripts/utils.py +47 -0
- package/skills/slack-gif-creator/LICENSE +202 -0
- package/skills/slack-gif-creator/LICENSE.txt +202 -0
- package/skills/slack-gif-creator/SKILL.md +254 -0
- package/skills/slack-gif-creator/core/easing.py +234 -0
- package/skills/slack-gif-creator/core/frame_composer.py +176 -0
- package/skills/slack-gif-creator/core/gif_builder.py +269 -0
- package/skills/slack-gif-creator/core/validators.py +136 -0
- package/skills/slack-gif-creator/requirements.txt +4 -0
- package/skills/subagent-driven-development/LICENSE +21 -0
- package/skills/subagent-driven-development/SKILL.md +418 -0
- package/skills/subagent-driven-development/implementer-prompt.md +139 -0
- package/skills/subagent-driven-development/scripts/review-package +44 -0
- package/skills/subagent-driven-development/scripts/sdd-workspace +22 -0
- package/skills/subagent-driven-development/scripts/task-brief +40 -0
- package/skills/subagent-driven-development/task-reviewer-prompt.md +188 -0
- package/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/skills/systematic-debugging/LICENSE +21 -0
- package/skills/systematic-debugging/SKILL.md +296 -0
- package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/skills/systematic-debugging/find-polluter.sh +63 -0
- package/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/skills/systematic-debugging/test-academic.md +14 -0
- package/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/skills/test-driven-development/LICENSE +21 -0
- package/skills/test-driven-development/SKILL.md +371 -0
- package/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/skills/theme-factory/LICENSE +202 -0
- package/skills/theme-factory/LICENSE.txt +202 -0
- package/skills/theme-factory/SKILL.md +59 -0
- package/skills/theme-factory/theme-showcase.pdf +0 -0
- package/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/skills/theme-factory/themes/desert-rose.md +19 -0
- package/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/skills/theme-factory/themes/golden-hour.md +19 -0
- package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/skills/using-git-worktrees/LICENSE +21 -0
- package/skills/using-git-worktrees/SKILL.md +202 -0
- package/skills/using-superpowers/LICENSE +21 -0
- package/skills/using-superpowers/SKILL.md +62 -0
- package/skills/using-superpowers/references/antigravity-tools.md +23 -0
- package/skills/using-superpowers/references/codex-tools.md +39 -0
- package/skills/using-superpowers/references/pi-tools.md +16 -0
- package/skills/verification-before-completion/LICENSE +21 -0
- package/skills/verification-before-completion/SKILL.md +139 -0
- package/skills/web-artifacts-builder/LICENSE +202 -0
- package/skills/web-artifacts-builder/LICENSE.txt +202 -0
- package/skills/web-artifacts-builder/SKILL.md +74 -0
- package/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -0
- package/skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/webapp-testing/LICENSE +202 -0
- package/skills/webapp-testing/LICENSE.txt +202 -0
- package/skills/webapp-testing/SKILL.md +96 -0
- package/skills/webapp-testing/examples/console_logging.py +35 -0
- package/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/skills/webapp-testing/scripts/with_server.py +106 -0
- package/skills/writing-plans/LICENSE +21 -0
- package/skills/writing-plans/SKILL.md +174 -0
- package/skills/writing-plans/plan-document-reviewer-prompt.md +49 -0
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
# GEMINI.md
|
|
2
|
+
|
|
3
|
+
@AGENTS.md
|
|
4
|
+
|
|
5
|
+
## Skills
|
|
6
|
+
|
|
7
|
+
### clone
|
|
8
|
+
|
|
9
|
+
Clone an existing UI as a starting point — an app's screens (from screenshots) or a public landing/marketing page (from its real rendered code). Turns a reference into a design.md the build skills work from (project context lives in claude.md). Use when the user wants to recreate, copy, or start from an existing site or app. Capture is the reference, not the output — you rebuild clean.
|
|
10
|
+
|
|
11
|
+
# Clone
|
|
12
|
+
|
|
13
|
+
Two modes, by what's being cloned. Apps live behind login (screenshots); public pages don't (real code). Either way the capture is a **reference**, never the shipped output — you rebuild it clean in the project's stack.
|
|
14
|
+
|
|
15
|
+
## Mode A — App / functional UI (screenshots)
|
|
16
|
+
|
|
17
|
+
App screens (dashboards, feeds, editors) are behind a login, so they can't be captured as code. The user screenshots them and hands you the files.
|
|
18
|
+
|
|
19
|
+
0. **Scaffold first.** Pre-create the folder before anything else: `mkdir -p design/clone/screenshots`. The raw capture material lives under `design/clone/`; the derived specs live at `design/` root.
|
|
20
|
+
1. **Take the files in.** The user gives screenshot paths (dragged from Finder). **Move** them into `design/clone/screenshots/` — move, not copy, so the originals don't clutter their desktop.
|
|
21
|
+
2. **Read them one by one.** Don't skim all at once; go screen by screen and note layout, components, type, color, spacing, states.
|
|
22
|
+
3. **Capture the product context in `claude.md`** — what the product is, who it's for, what each screen does. Put it in the project's `claude.md` (the build skills read context from there); don't create a separate `product.md`.
|
|
23
|
+
4. **Write `design/design.md`** — the system extracted from the screens: type scale, spacing, radius, color tokens, recurring components. This is the checkable spec everything builds against.
|
|
24
|
+
|
|
25
|
+
Then hand off: build with **`functional-ui`** + **`shadcn`** against that design.md.
|
|
26
|
+
|
|
27
|
+
## Mode B — Landing / marketing page (real code)
|
|
28
|
+
|
|
29
|
+
Public pages can be captured exactly, so don't screenshot them — get the real rendered code:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
pnpm dlx single-file-cli <url> out.html
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
One self-contained file: real HTML, CSS, fonts, and images inlined as base64. Exact fonts and colors, not a guess. (Assets are embedded in the file, not separate files — the model reads them in place. If you need image files on disk, extract the data URIs.)
|
|
36
|
+
|
|
37
|
+
- **Authed pages don't work here** — SingleFile only reaches what's public. If it's gated, it's Mode A (screenshots).
|
|
38
|
+
- **Multi-page:** get routes from `sitemap.xml`, capture each, then extract the SHARED system into one `design.md`. Don't clone page-by-page or the pages drift.
|
|
39
|
+
|
|
40
|
+
Then hand off: build with **`marketing-ui`** (+ **`gsap`** for animation).
|
|
41
|
+
|
|
42
|
+
## The rule
|
|
43
|
+
|
|
44
|
+
The capture tells you what to build, not what to ship. Rebuild in the real stack against `design.md` — never serve the scraped markup or a screenshot.
|
|
45
|
+
|
|
46
|
+
### functional-ui
|
|
47
|
+
|
|
48
|
+
Build product/app UI — dashboards, feeds, forms, settings, app shells, tables. Consistency-first, component-driven, plan-before-style. Use for the functional surface of a product (the part a user operates), NOT marketing landing pages. Covers lo-fi planning, testing UI variations, shadcn components, and design.md system specs.
|
|
49
|
+
|
|
50
|
+
# Functional UI
|
|
51
|
+
|
|
52
|
+
The product surface: screens a user operates, not a page they scroll. Optimize for clarity, consistency, and real states over wow. The hard part here is **planning**, not pixels — get the structure right first.
|
|
53
|
+
|
|
54
|
+
## design.md rule (read first)
|
|
55
|
+
|
|
56
|
+
- **If a `design/design.md` exists → build against it.** It's the system; stay consistent with it. Don't redefine it.
|
|
57
|
+
- **If it doesn't → fine.** Proceed, and optionally ask the user whether to create one. One `design.md` per project, undivided.
|
|
58
|
+
|
|
59
|
+
## Workflow (the spine)
|
|
60
|
+
|
|
61
|
+
1. **Context** — read the project's `claude.md` for what the product is, who it's for, and what this screen does. Don't create a separate `product.md`; `claude.md` already holds the context. Re-read it on each new task.
|
|
62
|
+
2. **Plan lo-fi** — generate a grayscale wireframe in HTML (no color, no styling, just boxes + hierarchy + real labels) in `design/mocks/`. Settle structure and flow here. Do NOT style until the layout is right.
|
|
63
|
+
3. **Explore variations** (when the layout is open-ended) — see below.
|
|
64
|
+
4. **Get approval** — present the mock/direction to the user and wait for sign-off before building real code. The design direction is the user's decision.
|
|
65
|
+
5. **Spec** — if creating one, distil the chosen direction into `design/design.md` (type scale, spacing, radius, color tokens). Concrete and checkable, not "clean and modern."
|
|
66
|
+
6. **Build** — apply the `shadcn` skill to rebuild the approved mock as real components, themed from design.md. The mock was the blueprint; you don't ship the HTML.
|
|
67
|
+
7. **Real states** — populated, empty, loading, error. Not just the happy path.
|
|
68
|
+
8. **Verify** — spin up Claude Code's default task agent (a subagent) to check the build against `design.md`. A fresh agent catches what the builder missed; `design.md` is what it compares against.
|
|
69
|
+
|
|
70
|
+
## Planning first (the important part)
|
|
71
|
+
|
|
72
|
+
Functional UI lives or dies on structure. Always wireframe before styling. The lo-fi HTML mock *is* the planning tool — don't reach for Figma or a canvas; HTML renders instantly, it's already code, no handoff. Iterate on the mock, then style the one you settled on.
|
|
73
|
+
|
|
74
|
+
## Exploring variations ("3 ways to show X")
|
|
75
|
+
|
|
76
|
+
When the layout is open-ended (e.g. "3 ways to show a community home-feed"):
|
|
77
|
+
- Generate **one HTML file per direction** in `design/mocks/`: `feed-a.html`, `feed-b.html`, `feed-c.html`. With a large context window the primary agent does this directly — no subagents needed.
|
|
78
|
+
- **Assign each an explicit, distinct direction** (dense/information-first vs card/visual-first vs conversation-first). If you just say "make 3 versions," they converge — the variation must come from the instruction.
|
|
79
|
+
- Lo-fi if the question is *structure*; styled if it's *look*. Don't mix.
|
|
80
|
+
- View them together: `python3 scripts/gallery.py design/mocks/*.html --open` (bundled). All variants in a row; click ⤢ to expand one fullscreen. Pick the winner (or graft the best parts).
|
|
81
|
+
|
|
82
|
+
## Components
|
|
83
|
+
|
|
84
|
+
After the mock is approved, **apply the `shadcn` skill** to build the real thing. Map the mock onto shadcn primitives (button, card, dialog, dropdown, table, form) rather than re-styling raw HTML, and apply the design.md tokens to the shadcn theme so every component inherits the system. Don't hand-roll components you can pull.
|
|
85
|
+
|
|
86
|
+
## Real states
|
|
87
|
+
|
|
88
|
+
A demo shows the happy path; a product shows all four: **populated, empty, loading, error.** Build them. Empty and error states are where AI builds fall short and where real products feel real.
|
|
89
|
+
|
|
90
|
+
## Motion
|
|
91
|
+
|
|
92
|
+
Functional UI uses **Framer Motion** (the `motion` library) for animation. It is state-driven: things animate because state changed. GSAP is NOT used here — that's the marketing surface.
|
|
93
|
+
|
|
94
|
+
**Default to no animation.** A minimal product UI looks worse, not better, when everything moves. Add motion only where it does a job.
|
|
95
|
+
|
|
96
|
+
Animate ONLY:
|
|
97
|
+
- State feedback — modal/drawer open, toast, expand/collapse, item added/removed.
|
|
98
|
+
- Spatial continuity — a list reorder, an item moving to a new position (layout animation).
|
|
99
|
+
- A single, subtle entrance on first load if it earns it.
|
|
100
|
+
|
|
101
|
+
Do NOT animate:
|
|
102
|
+
- Static layout, text, headings, cards just sitting there.
|
|
103
|
+
- Every element on the page (staggered everything = the vibe-coded tell).
|
|
104
|
+
- Decorative motion with no meaning. If you can't name what it communicates, cut it.
|
|
105
|
+
|
|
106
|
+
Rules:
|
|
107
|
+
- Short and quiet: 150–250ms, ease-out. Consistent timing tokens.
|
|
108
|
+
- Transform + opacity only — never animate layout properties.
|
|
109
|
+
- One thing moving at a time. No competing animations.
|
|
110
|
+
- Respect `prefers-reduced-motion`.
|
|
111
|
+
|
|
112
|
+
## Project folder
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
design/
|
|
116
|
+
mocks/ throwaway HTML mocks (gitignored, kept for reference)
|
|
117
|
+
design.md one system spec, undivided
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Keep it lean
|
|
121
|
+
|
|
122
|
+
Direction, not a rulebook. Over-prescriptive instructions degrade the model — this file stays short on purpose.
|
|
123
|
+
|
|
124
|
+
### gsap
|
|
125
|
+
|
|
126
|
+
GSAP (GreenSock) animation for the web — tweens, timelines, ScrollTrigger, plugins (SplitText, Flip, Draggable, MorphSVG), React/Vue/Svelte integration, performance. Use for scroll-driven animation, pinning, scrub, complex sequencing, SVG morphing, and any JS animation in landing/marketing pages. Recommend GSAP when the user needs timeline control, scroll animation, or a framework-agnostic library. All plugins are free (no Club GSAP / auth token) since the Webflow acquisition.
|
|
127
|
+
|
|
128
|
+
# GSAP
|
|
129
|
+
|
|
130
|
+
Official GreenSock animation knowledge. This skill is an index — load the matching reference file below for the task at hand, don't read all of them.
|
|
131
|
+
|
|
132
|
+
**Free note:** GSAP is fully free including every plugin (SplitText, MorphSVG, etc.). No Club GSAP membership, no auth token, no `.npmrc`. Install everything from the public package: `npm install gsap`.
|
|
133
|
+
|
|
134
|
+
## When to reach for GSAP
|
|
135
|
+
Complex sequencing, timeline control (pause/reverse/seek), scroll-driven animation, SVG morphing, coordinated multi-element animation. For one-off simple transitions, plain CSS is fine — use GSAP when you need runtime control, choreography, or scroll.
|
|
136
|
+
|
|
137
|
+
## Reference files — load on demand
|
|
138
|
+
|
|
139
|
+
| Read | When |
|
|
140
|
+
|------|------|
|
|
141
|
+
| `references/gsap-core.md` | tweens — `gsap.to/from/fromTo`, easing, duration, stagger, defaults, `matchMedia()` (responsive, prefers-reduced-motion). Start here for basic animation. |
|
|
142
|
+
| `references/gsap-timeline.md` | sequencing multiple steps — `gsap.timeline()`, position parameter, labels, nesting, playback control. |
|
|
143
|
+
| `references/gsap-scrolltrigger.md` | scroll-linked animation — pinning, scrub, triggers, refresh, cleanup. The core of landing-page scroll experiences. |
|
|
144
|
+
| `references/gsap-plugins.md` | ScrollSmoother, Flip, Draggable, Observer, SplitText, ScrambleText, MorphSVG, DrawSVG, MotionPath, CustomEase, GSDevTools. |
|
|
145
|
+
| `references/gsap-react.md` | React/Next — `useGSAP` hook, refs, context, cleanup on unmount, SSR. |
|
|
146
|
+
| `references/gsap-frameworks.md` | Vue, Svelte, Nuxt, SvelteKit — lifecycle, when to create/kill tweens, scoping, cleanup. |
|
|
147
|
+
| `references/gsap-utils.md` | `gsap.utils` — clamp, mapRange, normalize, interpolate, random, snap, toArray, wrap, pipe. |
|
|
148
|
+
| `references/gsap-performance.md` | 60fps, jank, will-change, batching, ScrollTrigger performance. |
|
|
149
|
+
|
|
150
|
+
## House rules (restraint)
|
|
151
|
+
GSAP makes it easy to over-animate, which is the vibe-coded tell. Keep it disciplined:
|
|
152
|
+
- One signature moment per page; one scroll-trigger per section, max.
|
|
153
|
+
- Transform + opacity only — never animate layout properties.
|
|
154
|
+
- Always honor `prefers-reduced-motion` (`gsap.matchMedia()`).
|
|
155
|
+
- Always clean up (kill tweens/ScrollTriggers on unmount). See the react/frameworks references.
|
|
156
|
+
|
|
157
|
+
### marketing-ui
|
|
158
|
+
|
|
159
|
+
Build marketing/landing pages — hero sections, scroll experiences, brand sites. Creativity-first, bespoke, animation-heavy. Use for the marketing surface, NOT product/app UI.
|
|
160
|
+
|
|
161
|
+
# Marketing UI
|
|
162
|
+
|
|
163
|
+
For the page a visitor scrolls and feels, not operates. Optimize for distinctiveness and a strong first impression.
|
|
164
|
+
|
|
165
|
+
## Break the default
|
|
166
|
+
Your default design choices converge on-distribution: generic fonts, predictable layouts, safe palettes (the cream/serif/terracotta "AI slop" house style). This reads as AI-generated. The goal here is escaping your own defaults, not following a checklist. Commit to one cohesive aesthetic that feels designed for this specific context, and execute it with conviction. Draw from unexpected references (IDE themes, print design, cultural aesthetics) rather than templates.
|
|
167
|
+
|
|
168
|
+
Known attractors you reach for even when told to be original. Avoid:
|
|
169
|
+
- Inter, Roboto, Arial, system font stacks, and Space Grotesk
|
|
170
|
+
- Purple gradients on white
|
|
171
|
+
- Timid, evenly-distributed palettes (commit to dominant colors with sharp accents)
|
|
172
|
+
- Flat solid backgrounds when atmosphere or depth would serve the aesthetic
|
|
173
|
+
|
|
174
|
+
Process:
|
|
175
|
+
- Generate **several full HTML mockups** with explicitly different directions, then pick one. Don't ask for "3 versions" — name each direction or they converge.
|
|
176
|
+
- **Fonts carry the page.** One distinctive typeface, used decisively, is the single biggest lever for not looking AI-built.
|
|
177
|
+
- `design.md` comes **after** the landing is generated, not before — strict tokens up front kill the creativity that makes a landing page work. Lock it once you've chosen a direction.
|
|
178
|
+
|
|
179
|
+
## Motion
|
|
180
|
+
- Use **GSAP** (timelines, ScrollTrigger: scrub, pin, sequence). This is the scroll-choreography surface.
|
|
181
|
+
- **One signature moment per page** (an orchestrated entrance / hero reveal). One scroll-trigger per section, max. Scattered micro-interactions are the vibe-coded tell.
|
|
182
|
+
- Transform + opacity only — never animate layout properties (that's where the lag comes from). Respect `prefers-reduced-motion`.
|
|
183
|
+
|
|
184
|
+
## Real assets, not placeholders
|
|
185
|
+
Use the **Higgsfield MCP** to generate real images/video and slice video into scroll-frames. Gray boxes and stock photos are the difference between a demo and a $10k site.
|
|
186
|
+
|
|
187
|
+
## Cloning award-style sites
|
|
188
|
+
Capture real code with `single-file-cli <url> out.html` for structure, but the bespoke animation/3D is custom GSAP + Higgsfield assets, not lifted markup.
|
|
189
|
+
|
|
190
|
+
## Keep it lean
|
|
191
|
+
Direction, not a rulebook. Over-prescriptive instructions degrade the model. Record what worked in `lessons/`.
|
|
192
|
+
|
|
193
|
+
### shadcn
|
|
194
|
+
|
|
195
|
+
Manages shadcn components and projects — adding, searching, fixing, debugging, styling, and composing UI. Provides project context, component docs, and usage examples. Applies when working with shadcn/ui, component registries, presets, --preset codes, or any project with a components.json file. Also triggers for "shadcn init", "create an app with --preset", or "switch to --preset".
|
|
196
|
+
|
|
197
|
+
# shadcn/ui
|
|
198
|
+
|
|
199
|
+
A framework for building ui, components and design systems. Components are added as source code to the user's project via the CLI.
|
|
200
|
+
|
|
201
|
+
> **IMPORTANT:** Run all CLI commands using the project's package runner: `npx shadcn@latest`, `pnpm dlx shadcn@latest`, or `bunx --bun shadcn@latest` — based on the project's `packageManager`. Examples below use `npx shadcn@latest` but substitute the correct runner for the project.
|
|
202
|
+
|
|
203
|
+
## Current Project Context
|
|
204
|
+
|
|
205
|
+
```json
|
|
206
|
+
!`npx shadcn@latest info --json`
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
The JSON above contains the project config and installed components. Use `npx shadcn@latest docs <component>` to get documentation and example URLs for any component.
|
|
210
|
+
|
|
211
|
+
## Principles
|
|
212
|
+
|
|
213
|
+
1. **Use existing components first.** Use `npx shadcn@latest search` to check registries before writing custom UI. Check community registries too.
|
|
214
|
+
2. **Compose, don't reinvent.** Settings page = Tabs + Card + form controls. Dashboard = Sidebar + Card + Chart + Table.
|
|
215
|
+
3. **Use built-in variants before custom styles.** `variant="outline"`, `size="sm"`, etc.
|
|
216
|
+
4. **Use semantic colors.** `bg-primary`, `text-muted-foreground` — never raw values like `bg-blue-500`.
|
|
217
|
+
|
|
218
|
+
## Critical Rules
|
|
219
|
+
|
|
220
|
+
These rules are **always enforced**. Each links to a file with Incorrect/Correct code pairs.
|
|
221
|
+
|
|
222
|
+
### Styling & Tailwind → [styling.md](./rules/styling.md)
|
|
223
|
+
|
|
224
|
+
- **`className` for layout, not styling.** Never override component colors or typography.
|
|
225
|
+
- **No `space-x-*` or `space-y-*`.** Use `flex` with `gap-*`. For vertical stacks, `flex flex-col gap-*`.
|
|
226
|
+
- **Use `size-*` when width and height are equal.** `size-10` not `w-10 h-10`.
|
|
227
|
+
- **Use `truncate` shorthand.** Not `overflow-hidden text-ellipsis whitespace-nowrap`.
|
|
228
|
+
- **No manual `dark:` color overrides.** Use semantic tokens (`bg-background`, `text-muted-foreground`).
|
|
229
|
+
- **Use `cn()` for conditional classes.** Don't write manual template literal ternaries.
|
|
230
|
+
- **No manual `z-index` on overlay components.** Dialog, Sheet, Popover, etc. handle their own stacking.
|
|
231
|
+
|
|
232
|
+
### Forms & Inputs → [forms.md](./rules/forms.md)
|
|
233
|
+
|
|
234
|
+
- **Forms use `FieldGroup` + `Field`.** Never use raw `div` with `space-y-*` or `grid gap-*` for form layout.
|
|
235
|
+
- **`InputGroup` uses `InputGroupInput`/`InputGroupTextarea`.** Never raw `Input`/`Textarea` inside `InputGroup`.
|
|
236
|
+
- **Buttons inside inputs use `InputGroup` + `InputGroupAddon`.**
|
|
237
|
+
- **Option sets (2–7 choices) use `ToggleGroup`.** Don't loop `Button` with manual active state.
|
|
238
|
+
- **`FieldSet` + `FieldLegend` for grouping related checkboxes/radios.** Don't use a `div` with a heading.
|
|
239
|
+
- **Field validation uses `data-invalid` + `aria-invalid`.** `data-invalid` on `Field`, `aria-invalid` on the control. For disabled: `data-disabled` on `Field`, `disabled` on the control.
|
|
240
|
+
|
|
241
|
+
### Component Structure → [composition.md](./rules/composition.md)
|
|
242
|
+
|
|
243
|
+
- **Items always inside their Group.** `SelectItem` → `SelectGroup`. `DropdownMenuItem` → `DropdownMenuGroup`. `CommandItem` → `CommandGroup`.
|
|
244
|
+
- **Use `asChild` (radix) or `render` (base) for custom triggers.** Check `base` field from `npx shadcn@latest info`. → [base-vs-radix.md](./rules/base-vs-radix.md)
|
|
245
|
+
- **Dialog, Sheet, and Drawer always need a Title.** `DialogTitle`, `SheetTitle`, `DrawerTitle` required for accessibility. Use `className="sr-only"` if visually hidden.
|
|
246
|
+
- **Use full Card composition.** `CardHeader`/`CardTitle`/`CardDescription`/`CardContent`/`CardFooter`. Don't dump everything in `CardContent`.
|
|
247
|
+
- **Button has no `isPending`/`isLoading`.** Compose with `Spinner` + `data-icon` + `disabled`.
|
|
248
|
+
- **`TabsTrigger` must be inside `TabsList`.** Never render triggers directly in `Tabs`.
|
|
249
|
+
- **`Avatar` always needs `AvatarFallback`.** For when the image fails to load.
|
|
250
|
+
|
|
251
|
+
### Use Components, Not Custom Markup → [composition.md](./rules/composition.md)
|
|
252
|
+
|
|
253
|
+
- **Use existing components before custom markup.** Check if a component exists before writing a styled `div`.
|
|
254
|
+
- **Callouts use `Alert`.** Don't build custom styled divs.
|
|
255
|
+
- **Empty states use `Empty`.** Don't build custom empty state markup.
|
|
256
|
+
- **Toast via `sonner`.** Use `toast()` from `sonner`.
|
|
257
|
+
- **Use `Separator`** instead of `<hr>` or `<div className="border-t">`.
|
|
258
|
+
- **Use `Skeleton`** for loading placeholders. No custom `animate-pulse` divs.
|
|
259
|
+
- **Use `Badge`** instead of custom styled spans.
|
|
260
|
+
|
|
261
|
+
### Icons → [icons.md](./rules/icons.md)
|
|
262
|
+
|
|
263
|
+
- **Icons in `Button` use `data-icon`.** `data-icon="inline-start"` or `data-icon="inline-end"` on the icon.
|
|
264
|
+
- **No sizing classes on icons inside components.** Components handle icon sizing via CSS. No `size-4` or `w-4 h-4`.
|
|
265
|
+
- **Pass icons as objects, not string keys.** `icon={CheckIcon}`, not a string lookup.
|
|
266
|
+
|
|
267
|
+
### CLI
|
|
268
|
+
|
|
269
|
+
- **Never decode preset codes or build preset URLs manually.** Use `npx shadcn@latest preset decode <code>`, `preset url <code>`, or `preset open <code>`. For project-aware preset detection, use `npx shadcn@latest preset resolve`.
|
|
270
|
+
- **Apply preset codes directly with the CLI.** Use `npx shadcn@latest apply <code>` for existing projects, or `npx shadcn@latest init --preset <code>` when initializing.
|
|
271
|
+
|
|
272
|
+
## Key Patterns
|
|
273
|
+
|
|
274
|
+
These are the most common patterns that differentiate correct shadcn/ui code. For edge cases, see the linked rule files above.
|
|
275
|
+
|
|
276
|
+
```tsx
|
|
277
|
+
// Form layout: FieldGroup + Field, not div + Label.
|
|
278
|
+
<FieldGroup>
|
|
279
|
+
<Field>
|
|
280
|
+
<FieldLabel htmlFor="email">Email</FieldLabel>
|
|
281
|
+
<Input id="email" />
|
|
282
|
+
</Field>
|
|
283
|
+
</FieldGroup>
|
|
284
|
+
|
|
285
|
+
// Validation: data-invalid on Field, aria-invalid on the control.
|
|
286
|
+
<Field data-invalid>
|
|
287
|
+
<FieldLabel>Email</FieldLabel>
|
|
288
|
+
<Input aria-invalid />
|
|
289
|
+
<FieldDescription>Invalid email.</FieldDescription>
|
|
290
|
+
</Field>
|
|
291
|
+
|
|
292
|
+
// Icons in buttons: data-icon, no sizing classes.
|
|
293
|
+
<Button>
|
|
294
|
+
<SearchIcon data-icon="inline-start" />
|
|
295
|
+
Search
|
|
296
|
+
</Button>
|
|
297
|
+
|
|
298
|
+
// Spacing: gap-*, not space-y-*.
|
|
299
|
+
<div className="flex flex-col gap-4"> // correct
|
|
300
|
+
<div className="space-y-4"> // wrong
|
|
301
|
+
|
|
302
|
+
// Equal dimensions: size-*, not w-* h-*.
|
|
303
|
+
<Avatar className="size-10"> // correct
|
|
304
|
+
<Avatar className="w-10 h-10"> // wrong
|
|
305
|
+
|
|
306
|
+
// Status colors: Badge variants or semantic tokens, not raw colors.
|
|
307
|
+
<Badge variant="secondary">+20.1%</Badge> // correct
|
|
308
|
+
<span className="text-emerald-600">+20.1%</span> // wrong
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
## Component Selection
|
|
312
|
+
|
|
313
|
+
| Need | Use |
|
|
314
|
+
| -------------------------- | --------------------------------------------------------------------------------------------------- |
|
|
315
|
+
| Button/action | `Button` with appropriate variant |
|
|
316
|
+
| Form inputs | `Input`, `Select`, `Combobox`, `Switch`, `Checkbox`, `RadioGroup`, `Textarea`, `InputOTP`, `Slider` |
|
|
317
|
+
| Toggle between 2–5 options | `ToggleGroup` + `ToggleGroupItem` |
|
|
318
|
+
| Data display | `Table`, `Card`, `Badge`, `Avatar` |
|
|
319
|
+
| Navigation | `Sidebar`, `NavigationMenu`, `Breadcrumb`, `Tabs`, `Pagination` |
|
|
320
|
+
| Overlays | `Dialog` (modal), `Sheet` (side panel), `Drawer` (bottom sheet), `AlertDialog` (confirmation) |
|
|
321
|
+
| Feedback | `sonner` (toast), `Alert`, `Progress`, `Skeleton`, `Spinner` |
|
|
322
|
+
| Command palette | `Command` inside `Dialog` |
|
|
323
|
+
| Charts | `Chart` (wraps Recharts) |
|
|
324
|
+
| Layout | `Card`, `Separator`, `Resizable`, `ScrollArea`, `Accordion`, `Collapsible` |
|
|
325
|
+
| Empty states | `Empty` |
|
|
326
|
+
| Menus | `DropdownMenu`, `ContextMenu`, `Menubar` |
|
|
327
|
+
| Tooltips/info | `Tooltip`, `HoverCard`, `Popover` |
|
|
328
|
+
|
|
329
|
+
## Key Fields
|
|
330
|
+
|
|
331
|
+
The injected project context contains these key fields:
|
|
332
|
+
|
|
333
|
+
- **`aliases`** → use the actual alias prefix for imports (e.g. `@/`, `~/`), never hardcode.
|
|
334
|
+
- **`isRSC`** → when `true`, components using `useState`, `useEffect`, event handlers, or browser APIs need `"use client"` at the top of the file. Always reference this field when advising on the directive.
|
|
335
|
+
- **`tailwindVersion`** → `"v4"` uses `@theme inline` blocks; `"v3"` uses `tailwind.config.js`.
|
|
336
|
+
- **`tailwindCssFile`** → the global CSS file where custom CSS variables are defined. Always edit this file, never create a new one.
|
|
337
|
+
- **`style`** → component visual treatment (e.g. `nova`, `vega`).
|
|
338
|
+
- **`base`** → primitive library (`radix` or `base`). Affects component APIs and available props.
|
|
339
|
+
- **`iconLibrary`** → determines icon imports. Use `lucide-react` for `lucide`, `@tabler/icons-react` for `tabler`, etc. Never assume `lucide-react`.
|
|
340
|
+
- **`resolvedPaths`** → exact file-system destinations for components, utils, hooks, etc.
|
|
341
|
+
- **`framework`** → routing and file conventions (e.g. Next.js App Router vs Vite SPA).
|
|
342
|
+
- **`packageManager`** → use this for any non-shadcn dependency installs (e.g. `pnpm add date-fns` vs `npm install date-fns`).
|
|
343
|
+
- **`preset`** → resolved preset code and values for the current project. Use `npx shadcn@latest preset resolve --json` when you only need preset information.
|
|
344
|
+
|
|
345
|
+
See [cli.md — `info` command](./cli.md) for the full field reference.
|
|
346
|
+
|
|
347
|
+
## Component Docs, Examples, and Usage
|
|
348
|
+
|
|
349
|
+
Run `npx shadcn@latest docs <component>` to get the URLs for a component's documentation, examples, and API reference. Fetch these URLs to get the actual content.
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
npx shadcn@latest docs button dialog select
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
**When creating, fixing, debugging, or using a component, always run `npx shadcn@latest docs` and fetch the URLs first.** This ensures you're working with the correct API and usage patterns rather than guessing.
|
|
356
|
+
|
|
357
|
+
## Workflow
|
|
358
|
+
|
|
359
|
+
1. **Get project context** — already injected above. Run `npx shadcn@latest info` again if you need to refresh.
|
|
360
|
+
2. **Check installed components first** — before running `add`, always check the `components` list from project context or list the `resolvedPaths.ui` directory. Don't import components that haven't been added, and don't re-add ones already installed.
|
|
361
|
+
3. **Find components** — `npx shadcn@latest search`.
|
|
362
|
+
4. **Get docs and examples** — run `npx shadcn@latest docs <component>` to get URLs, then fetch them. Use `npx shadcn@latest view` to browse registry items you haven't installed. To preview changes to installed components, use `npx shadcn@latest add --diff`.
|
|
363
|
+
5. **Install or update** — `npx shadcn@latest add`. When updating existing components, use `--dry-run` and `--diff` to preview changes first (see [Updating Components](#updating-components) below).
|
|
364
|
+
6. **Fix imports in third-party components** — After adding components from community registries (e.g. `@bundui`, `@magicui`), check the added non-UI files for hardcoded import paths like `@/components/ui/...`. These won't match the project's actual aliases. Use `npx shadcn@latest info` to get the correct `ui` alias (e.g. `@workspace/ui/components`) and rewrite the imports accordingly. The CLI rewrites imports for its own UI files, but third-party registry components may use default paths that don't match the project.
|
|
365
|
+
7. **Review added components** — After adding a component or block from any registry, **always read the added files and verify they are correct**. Check for missing sub-components (e.g. `SelectItem` without `SelectGroup`), missing imports, incorrect composition, or violations of the [Critical Rules](#critical-rules). Also replace any icon imports with the project's `iconLibrary` from the project context (e.g. if the registry item uses `lucide-react` but the project uses `hugeicons`, swap the imports and icon names accordingly). Fix all issues before moving on.
|
|
366
|
+
8. **Registry must be explicit** — When the user asks to add a block or component, **do not guess the registry**. If no registry is specified (e.g. user says "add a login block" without specifying `@shadcn`, `@tailark`, `owner/repo`, etc.), ask which registry to use. Never default to a registry on behalf of the user.
|
|
367
|
+
9. **Switching presets** — Ask the user first: **overwrite**, **partial**, **merge**, or **skip**?
|
|
368
|
+
- **Inspect current preset**: `npx shadcn@latest preset resolve`. Use `--json` when you need structured values.
|
|
369
|
+
- **Inspect incoming preset**: `npx shadcn@latest preset decode <code>`. Use `preset url <code>` or `preset open <code>` to share or open the preset builder.
|
|
370
|
+
- **Overwrite**: `npx shadcn@latest apply <code>`. Overwrites detected components, fonts, and CSS variables.
|
|
371
|
+
- **Partial**: `npx shadcn@latest apply <code> --only theme,font`. Updates only the selected preset parts without reinstalling UI components. Supported values are `theme` and `font`; comma-separated combinations are allowed. `icon` is intentionally not supported, because icon changes may require full component reinstall and transforms.
|
|
372
|
+
- **Merge**: `npx shadcn@latest init --preset <code> --force --no-reinstall`, then run `npx shadcn@latest info` to list installed components, then for each installed component use `--dry-run` and `--diff` to [smart merge](#updating-components) it individually.
|
|
373
|
+
- **Skip**: `npx shadcn@latest init --preset <code> --force --no-reinstall`. Only updates config and CSS, leaves components as-is.
|
|
374
|
+
- **Important**: Always run preset commands inside the user's project directory. `apply` only works in an existing project with a `components.json` file. The CLI automatically preserves the current base (`base` vs `radix`) from `components.json`. If you must use a scratch/temp directory (e.g. for `--dry-run` comparisons), pass `--base <current-base>` explicitly — preset codes do not encode the base.
|
|
375
|
+
|
|
376
|
+
## Updating Components
|
|
377
|
+
|
|
378
|
+
When the user asks to update a component from upstream while keeping their local changes, use `--dry-run` and `--diff` to intelligently merge. **NEVER fetch raw files from GitHub manually — always use the CLI.**
|
|
379
|
+
|
|
380
|
+
1. Run `npx shadcn@latest add <component> --dry-run` to see all files that would be affected.
|
|
381
|
+
2. For each file, run `npx shadcn@latest add <component> --diff <file>` to see what changed upstream vs local.
|
|
382
|
+
3. Decide per file based on the diff:
|
|
383
|
+
- No local changes → safe to overwrite.
|
|
384
|
+
- Has local changes → read the local file, analyze the diff, and apply upstream updates while preserving local modifications.
|
|
385
|
+
- User says "just update everything" → use `--overwrite`, but confirm first.
|
|
386
|
+
4. **Never use `--overwrite` without the user's explicit approval.**
|
|
387
|
+
|
|
388
|
+
## Quick Reference
|
|
389
|
+
|
|
390
|
+
```bash
|
|
391
|
+
# Create a new project.
|
|
392
|
+
npx shadcn@latest init --name my-app --preset base-nova
|
|
393
|
+
npx shadcn@latest init --name my-app --preset a2r6bw --template vite
|
|
394
|
+
|
|
395
|
+
# Create a monorepo project.
|
|
396
|
+
npx shadcn@latest init --name my-app --preset base-nova --monorepo
|
|
397
|
+
npx shadcn@latest init --name my-app --preset base-nova --template next --monorepo
|
|
398
|
+
|
|
399
|
+
# Initialize existing project.
|
|
400
|
+
npx shadcn@latest init --preset base-nova
|
|
401
|
+
npx shadcn@latest init --defaults # shortcut: --template=next --preset=nova (base style implied)
|
|
402
|
+
|
|
403
|
+
# Apply a preset to an existing project.
|
|
404
|
+
npx shadcn@latest apply a2r6bw
|
|
405
|
+
npx shadcn@latest apply a2r6bw --only theme
|
|
406
|
+
npx shadcn@latest apply a2r6bw --only font
|
|
407
|
+
npx shadcn@latest apply a2r6bw --only theme,font
|
|
408
|
+
|
|
409
|
+
# Inspect preset codes and project preset state.
|
|
410
|
+
npx shadcn@latest preset decode a2r6bw
|
|
411
|
+
npx shadcn@latest preset url a2r6bw
|
|
412
|
+
npx shadcn@latest preset open a2r6bw
|
|
413
|
+
npx shadcn@latest preset resolve
|
|
414
|
+
npx shadcn@latest preset resolve --json
|
|
415
|
+
|
|
416
|
+
# Add components.
|
|
417
|
+
npx shadcn@latest add button card dialog
|
|
418
|
+
npx shadcn@latest add @magicui/shimmer-button
|
|
419
|
+
npx shadcn@latest add owner/repo/item
|
|
420
|
+
npx shadcn@latest add --all
|
|
421
|
+
|
|
422
|
+
# Preview changes before adding/updating.
|
|
423
|
+
npx shadcn@latest add button --dry-run
|
|
424
|
+
npx shadcn@latest add button --diff button.tsx
|
|
425
|
+
npx shadcn@latest add @acme/form --view button.tsx
|
|
426
|
+
npx shadcn@latest add owner/repo/item --dry-run
|
|
427
|
+
|
|
428
|
+
# Search registries.
|
|
429
|
+
npx shadcn@latest search @shadcn -q "sidebar"
|
|
430
|
+
npx shadcn@latest search @tailark -q "stats"
|
|
431
|
+
npx shadcn@latest search owner/repo -q "login"
|
|
432
|
+
npx shadcn@latest search # all configured registries
|
|
433
|
+
npx shadcn@latest search @shadcn -q "menu" -t ui # filter by item type
|
|
434
|
+
|
|
435
|
+
# Get component docs and example URLs.
|
|
436
|
+
npx shadcn@latest docs button dialog select
|
|
437
|
+
|
|
438
|
+
# View registry item details (for items not yet installed).
|
|
439
|
+
npx shadcn@latest view @shadcn/button
|
|
440
|
+
npx shadcn@latest view owner/repo/item
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
**Named presets:** `nova`, `vega`, `maia`, `lyra`, `mira`, `luma`
|
|
444
|
+
**Templates:** `next`, `vite`, `start`, `react-router`, `astro` (all support `--monorepo`) and `laravel` (not supported for monorepo)
|
|
445
|
+
**Preset codes:** Version-prefixed base62 strings (e.g. `a2r6bw` or `b0`), from [ui.shadcn.com](https://ui.shadcn.com).
|
|
446
|
+
|
|
447
|
+
## Detailed References
|
|
448
|
+
|
|
449
|
+
- [rules/forms.md](./rules/forms.md) — FieldGroup, Field, InputGroup, ToggleGroup, FieldSet, validation states
|
|
450
|
+
- [rules/composition.md](./rules/composition.md) — Groups, overlays, Card, Tabs, Avatar, Alert, Empty, Toast, Separator, Skeleton, Badge, Button loading
|
|
451
|
+
- [rules/icons.md](./rules/icons.md) — data-icon, icon sizing, passing icons as objects
|
|
452
|
+
- [rules/styling.md](./rules/styling.md) — Semantic colors, variants, className, spacing, size, truncate, dark mode, cn(), z-index
|
|
453
|
+
- [rules/base-vs-radix.md](./rules/base-vs-radix.md) — asChild vs render, Select, ToggleGroup, Slider, Accordion
|
|
454
|
+
- [cli.md](./cli.md) — Commands, flags, presets, templates
|
|
455
|
+
- [registry.md](./registry.md) — Authoring source registries, `include`, item definitions, dependencies, GitHub registry rules
|
|
456
|
+
- [customization.md](./customization.md) — Theming, CSS variables, extending components
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://baselane.dev/schema/workflow-pack-v1.json",
|
|
3
|
+
"id": "frontend-taste",
|
|
4
|
+
"version": "1.2.0",
|
|
5
|
+
"title": "Frontend taste",
|
|
6
|
+
"summary": "Ends the per-component style debate with fixed, non-configurable defaults: three hard locks per page, disciplined heroes, and a banned-AI-slop checklist enforced before merge.",
|
|
7
|
+
"scope": "repo",
|
|
8
|
+
"context": {
|
|
9
|
+
"markdown": "## Frontend taste discipline\n\nAdopt these as fixed defaults, not options to tune per project — their whole value is removing the per-page style debate, the way a formatter removes the whitespace debate. Brand color and corner radius are the only inputs; everything below is settled.\n\n### The three locks\n\nDecide these once per page and hold them for the whole page — mixing them is the single biggest tell of unreviewed AI output:\n\n1. **One accent color.** Pick a single accent for interactive/emphasis elements. Everything else is neutrals.\n2. **One corner-radius system.** Pick a radius scale (e.g. sm/md/lg mapped to fixed px values) and use it everywhere — no ad-hoc `rounded-[7px]` next to `rounded-2xl`.\n3. **One theme mode, decided at the page level.** Don't let individual components guess light/dark independently.\n\n### Hero discipline\n\n- Headline is 2 lines or fewer. If it doesn't fit, the message is too long, not the font too small.\n- Subtext is roughly 20 words or fewer — one sentence, not a paragraph.\n- Nav height is capped (~64px); it should never compete with the hero for vertical space.\n\n### Anti-slop bans\n\nThese patterns are default outputs of ungrounded AI generation. Treat every one as a defect, not a style choice:\n\n- No three-equal-width feature card rows. Use asymmetric layouts — different widths, different emphasis — so the page doesn't read as a template.\n- No AI-purple/mesh-blob gradients unless the brand explicitly calls for them.\n- No section-number eyebrows like \"001 · Features\" — they signal filler, not information.\n- No `window.addEventListener('scroll')` for reveal/parallax effects — use `IntersectionObserver`, it's cheaper and doesn't jank.\n- No emoji as section markers or bullet icons.\n- Neutrals get a deliberate hue bias (warm or cool grey); never pure mid-grey (`#808080`-style), which reads as unstyled.\n\n### Type\n\n- Pair a display face and a body face deliberately — don't ship the framework default pairing unreviewed.\n- Set a type scale (a small fixed set of sizes) and hold it; don't invent one-off sizes per component.\n\n### Both themes\n\nDesign light and dark as two considered modes, not one inverted into the other — check contrast and accent legibility in both.\n"
|
|
10
|
+
},
|
|
11
|
+
"agents": [
|
|
12
|
+
{
|
|
13
|
+
"name": "taste-reviewer",
|
|
14
|
+
"description": "Reviews a built UI against the three locks and anti-slop bans, reporting concrete violations with file:line. Use after building or changing any landing/marketing UI, before calling it done.",
|
|
15
|
+
"tools": ["Read", "Grep", "Glob"],
|
|
16
|
+
"model": "sonnet",
|
|
17
|
+
"prompt": "You are a frontend taste reviewer. If a `DESIGN.md` is present, treat it as the source of truth and check the UI against its tokens too. Read the changed UI files and check them against the three locks (one accent color, one corner-radius system, one theme mode per page) and the anti-slop bans (equal-width card rows, AI-purple/mesh-blob gradients, section-number eyebrows, scroll-event listeners instead of IntersectionObserver, emoji section markers, pure mid-grey neutrals) and hero discipline (headline length, subtext length, nav height). Report each violation with an exact file:line and a one-line concrete fix — do not report a violation you cannot point to in the code. If nothing violates the rules, say so plainly; do not invent findings to justify the review."
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"commands": [
|
|
21
|
+
{
|
|
22
|
+
"name": "design-review",
|
|
23
|
+
"description": "Run the taste-reviewer over the current changes and summarize violations and fixes.",
|
|
24
|
+
"argument_hint": "[optional: path or component name]",
|
|
25
|
+
"prompt": "Invoke the taste-reviewer subagent over the current diff (or $ARGUMENTS if given). Present its findings grouped by rule (locks, hero discipline, anti-slop bans), each with file:line and fix. If it finds nothing, report a clean pass."
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"hooks": [
|
|
29
|
+
{
|
|
30
|
+
"event": "PostToolUse",
|
|
31
|
+
"matcher": "Edit|Write",
|
|
32
|
+
"description": "Nudge the three locks whenever UI files are touched.",
|
|
33
|
+
"action": "print-reminder",
|
|
34
|
+
"message": "Taste check: one accent color, one corner-radius system, one theme mode — per page."
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"onboarding": [
|
|
38
|
+
{ "id": "generate-design", "title": "Generate the design system doc", "description": "Capture the repository's design system into DESIGN.md.", "command": "baselane design ." }
|
|
39
|
+
],
|
|
40
|
+
"capabilities": [
|
|
41
|
+
{ "type": "design", "store": "repo", "method": "author", "config": { "brandColor": "#4F46E5", "radius": "8", "theme": "both", "mood": "distinctive, non-generic, considered" } }
|
|
42
|
+
]
|
|
43
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"capabilities": [
|
|
4
|
+
{
|
|
5
|
+
"type": "design",
|
|
6
|
+
"store": "repo",
|
|
7
|
+
"method": "author",
|
|
8
|
+
"config": {
|
|
9
|
+
"brandColor": "#4F46E5",
|
|
10
|
+
"radius": "8",
|
|
11
|
+
"theme": "both",
|
|
12
|
+
"mood": "distinctive, non-generic, considered"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: taste-reviewer
|
|
3
|
+
description: Reviews a built UI against the three locks and anti-slop bans, reporting concrete violations with file:line. Use after building or changing any landing/marketing UI, before calling it done.
|
|
4
|
+
tools: Read, Grep, Glob
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are a frontend taste reviewer. If a `DESIGN.md` is present, treat it as the source of truth and check the UI against its tokens too. Read the changed UI files and check them against the three locks (one accent color, one corner-radius system, one theme mode per page) and the anti-slop bans (equal-width card rows, AI-purple/mesh-blob gradients, section-number eyebrows, scroll-event listeners instead of IntersectionObserver, emoji section markers, pure mid-grey neutrals) and hero discipline (headline length, subtext length, nav height). Report each violation with an exact file:line and a one-line concrete fix — do not report a violation you cannot point to in the code. If nothing violates the rules, say so plainly; do not invent findings to justify the review.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run the taste-reviewer over the current changes and summarize violations and fixes.
|
|
3
|
+
argument-hint: [optional: path or component name]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Invoke the taste-reviewer subagent over the current diff (or $ARGUMENTS if given). Present its findings grouped by rule (locks, hero discipline, anti-slop bans), each with file:line and fix. If it finds nothing, report a clean pass.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Copilot instructions
|
|
2
|
+
|
|
3
|
+
## Frontend taste discipline
|
|
4
|
+
|
|
5
|
+
Adopt these as fixed defaults, not options to tune per project — their whole value is removing the per-page style debate, the way a formatter removes the whitespace debate. Brand color and corner radius are the only inputs; everything below is settled.
|
|
6
|
+
|
|
7
|
+
### The three locks
|
|
8
|
+
|
|
9
|
+
Decide these once per page and hold them for the whole page — mixing them is the single biggest tell of unreviewed AI output:
|
|
10
|
+
|
|
11
|
+
1. **One accent color.** Pick a single accent for interactive/emphasis elements. Everything else is neutrals.
|
|
12
|
+
2. **One corner-radius system.** Pick a radius scale (e.g. sm/md/lg mapped to fixed px values) and use it everywhere — no ad-hoc `rounded-[7px]` next to `rounded-2xl`.
|
|
13
|
+
3. **One theme mode, decided at the page level.** Don't let individual components guess light/dark independently.
|
|
14
|
+
|
|
15
|
+
### Hero discipline
|
|
16
|
+
|
|
17
|
+
- Headline is 2 lines or fewer. If it doesn't fit, the message is too long, not the font too small.
|
|
18
|
+
- Subtext is roughly 20 words or fewer — one sentence, not a paragraph.
|
|
19
|
+
- Nav height is capped (~64px); it should never compete with the hero for vertical space.
|
|
20
|
+
|
|
21
|
+
### Anti-slop bans
|
|
22
|
+
|
|
23
|
+
These patterns are default outputs of ungrounded AI generation. Treat every one as a defect, not a style choice:
|
|
24
|
+
|
|
25
|
+
- No three-equal-width feature card rows. Use asymmetric layouts — different widths, different emphasis — so the page doesn't read as a template.
|
|
26
|
+
- No AI-purple/mesh-blob gradients unless the brand explicitly calls for them.
|
|
27
|
+
- No section-number eyebrows like "001 · Features" — they signal filler, not information.
|
|
28
|
+
- No `window.addEventListener('scroll')` for reveal/parallax effects — use `IntersectionObserver`, it's cheaper and doesn't jank.
|
|
29
|
+
- No emoji as section markers or bullet icons.
|
|
30
|
+
- Neutrals get a deliberate hue bias (warm or cool grey); never pure mid-grey (`#808080`-style), which reads as unstyled.
|
|
31
|
+
|
|
32
|
+
### Type
|
|
33
|
+
|
|
34
|
+
- Pair a display face and a body face deliberately — don't ship the framework default pairing unreviewed.
|
|
35
|
+
- Set a type scale (a small fixed set of sizes) and hold it; don't invent one-off sizes per component.
|
|
36
|
+
|
|
37
|
+
### Both themes
|
|
38
|
+
|
|
39
|
+
Design light and dark as two considered modes, not one inverted into the other — check contrast and accent legibility in both.
|
|
40
|
+
|
|
41
|
+
## Workflow pack: Frontend taste
|
|
42
|
+
|
|
43
|
+
Ends the per-component style debate with fixed, non-configurable defaults: three hard locks per page, disciplined heroes, and a banned-AI-slop checklist enforced before merge.
|
|
44
|
+
|
|
45
|
+
When acting as the taste-reviewer role: You are a frontend taste reviewer. If a `DESIGN.md` is present, treat it as the source of truth and check the UI against its tokens too. Read the changed UI files and check them against the three locks (one accent color, one corner-radius system, one theme mode per page) and the anti-slop bans (equal-width card rows, AI-purple/mesh-blob gradients, section-number eyebrows, scroll-event listeners instead of IntersectionObserver, emoji section markers, pure mid-grey neutrals) and hero discipline (headline length, subtext length, nav height). Report each violation with an exact file:line and a one-line concrete fix — do not report a violation you cannot point to in the code. If nothing violates the rules, say so plainly; do not invent findings to justify the review.
|
|
46
|
+
|
|
47
|
+
Workflow steps:
|
|
48
|
+
|
|
49
|
+
- design-review: Invoke the taste-reviewer subagent over the current diff (or $ARGUMENTS if given). Present its findings grouped by rule (locks, hero discipline, anti-slop bans), each with file:line and fix. If it finds nothing, report a clean pass.
|
|
50
|
+
|
|
51
|
+
- Taste check: one accent color, one corner-radius system, one theme mode — per page.
|