oh-my-customcodex 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 +21 -0
- package/README.md +327 -0
- package/dist/cli/index.js +32054 -0
- package/dist/index.js +5469 -0
- package/package.json +89 -0
- package/templates/.claude/agents/arch-documenter.md +38 -0
- package/templates/.claude/agents/arch-speckit-agent.md +66 -0
- package/templates/.claude/agents/be-django-expert.md +47 -0
- package/templates/.claude/agents/be-express-expert.md +31 -0
- package/templates/.claude/agents/be-fastapi-expert.md +45 -0
- package/templates/.claude/agents/be-go-backend-expert.md +45 -0
- package/templates/.claude/agents/be-nestjs-expert.md +29 -0
- package/templates/.claude/agents/be-springboot-expert.md +42 -0
- package/templates/.claude/agents/db-alembic-expert.md +73 -0
- package/templates/.claude/agents/db-postgres-expert.md +38 -0
- package/templates/.claude/agents/db-redis-expert.md +38 -0
- package/templates/.claude/agents/db-supabase-expert.md +37 -0
- package/templates/.claude/agents/de-airflow-expert.md +48 -0
- package/templates/.claude/agents/de-dbt-expert.md +36 -0
- package/templates/.claude/agents/de-kafka-expert.md +83 -0
- package/templates/.claude/agents/de-pipeline-expert.md +34 -0
- package/templates/.claude/agents/de-snowflake-expert.md +38 -0
- package/templates/.claude/agents/de-spark-expert.md +38 -0
- package/templates/.claude/agents/fe-design-expert.md +120 -0
- package/templates/.claude/agents/fe-flutter-agent.md +48 -0
- package/templates/.claude/agents/fe-svelte-agent.md +33 -0
- package/templates/.claude/agents/fe-vercel-agent.md +40 -0
- package/templates/.claude/agents/fe-vuejs-agent.md +34 -0
- package/templates/.claude/agents/infra-aws-expert.md +49 -0
- package/templates/.claude/agents/infra-docker-expert.md +49 -0
- package/templates/.claude/agents/lang-golang-expert.md +46 -0
- package/templates/.claude/agents/lang-java21-expert.md +42 -0
- package/templates/.claude/agents/lang-kotlin-expert.md +45 -0
- package/templates/.claude/agents/lang-python-expert.md +45 -0
- package/templates/.claude/agents/lang-rust-expert.md +45 -0
- package/templates/.claude/agents/lang-typescript-expert.md +45 -0
- package/templates/.claude/agents/mgr-claude-code-bible.md +62 -0
- package/templates/.claude/agents/mgr-creator.md +57 -0
- package/templates/.claude/agents/mgr-gitnerd.md +50 -0
- package/templates/.claude/agents/mgr-sauron.md +163 -0
- package/templates/.claude/agents/mgr-supplier.md +39 -0
- package/templates/.claude/agents/mgr-updater.md +40 -0
- package/templates/.claude/agents/qa-engineer.md +36 -0
- package/templates/.claude/agents/qa-planner.md +78 -0
- package/templates/.claude/agents/qa-writer.md +32 -0
- package/templates/.claude/agents/sec-codeql-expert.md +56 -0
- package/templates/.claude/agents/slack-cli-expert.md +98 -0
- package/templates/.claude/agents/souls/lang-golang-expert.soul.md +21 -0
- package/templates/.claude/agents/sys-memory-keeper.md +123 -0
- package/templates/.claude/agents/sys-naggy.md +76 -0
- package/templates/.claude/agents/tool-bun-expert.md +26 -0
- package/templates/.claude/agents/tool-npm-expert.md +31 -0
- package/templates/.claude/agents/tool-optimizer.md +37 -0
- package/templates/.claude/agents/wiki-curator.md +72 -0
- package/templates/.claude/config/required-plugins.json +30 -0
- package/templates/.claude/contexts/dev.md +20 -0
- package/templates/.claude/contexts/ecomode.md +110 -0
- package/templates/.claude/contexts/index.yaml +41 -0
- package/templates/.claude/contexts/research.md +28 -0
- package/templates/.claude/contexts/review.md +23 -0
- package/templates/.claude/hooks/hooks.json +533 -0
- package/templates/.claude/hooks/scripts/adaptive-harness-scan.sh +45 -0
- package/templates/.claude/hooks/scripts/agent-start-recorder.sh +40 -0
- package/templates/.claude/hooks/scripts/agent-teams-advisor.sh +76 -0
- package/templates/.claude/hooks/scripts/audit-log.sh +64 -0
- package/templates/.claude/hooks/scripts/auto-continue-guard.sh +33 -0
- package/templates/.claude/hooks/scripts/content-hash-validator.sh +75 -0
- package/templates/.claude/hooks/scripts/context-budget-advisor.sh +107 -0
- package/templates/.claude/hooks/scripts/cost-cap-advisor.sh +71 -0
- package/templates/.claude/hooks/scripts/cwd-change-detector.sh +36 -0
- package/templates/.claude/hooks/scripts/eval-core-batch-save.sh +46 -0
- package/templates/.claude/hooks/scripts/feedback-collector.sh +92 -0
- package/templates/.claude/hooks/scripts/file-change-validator.sh +26 -0
- package/templates/.claude/hooks/scripts/git-delegation-guard.sh +57 -0
- package/templates/.claude/hooks/scripts/model-escalation-advisor.sh +106 -0
- package/templates/.claude/hooks/scripts/omcodex-auto-update.sh +4 -0
- package/templates/.claude/hooks/scripts/omcustom-auto-update.sh +177 -0
- package/templates/.claude/hooks/scripts/rtk-intercept.sh +77 -0
- package/templates/.claude/hooks/scripts/rule-deletion-guard.sh +60 -0
- package/templates/.claude/hooks/scripts/schema-validator.sh +106 -0
- package/templates/.claude/hooks/scripts/secret-filter.sh +100 -0
- package/templates/.claude/hooks/scripts/session-autofix-prompt.sh +34 -0
- package/templates/.claude/hooks/scripts/session-autofix.sh +146 -0
- package/templates/.claude/hooks/scripts/session-env-check.sh +254 -0
- package/templates/.claude/hooks/scripts/skill-extractor-analyzer.sh +49 -0
- package/templates/.claude/hooks/scripts/stage-blocker.sh +16 -0
- package/templates/.claude/hooks/scripts/stale-todo-scanner.sh +91 -0
- package/templates/.claude/hooks/scripts/stall-detection-advisor.sh +112 -0
- package/templates/.claude/hooks/scripts/stop-console-audit.sh +46 -0
- package/templates/.claude/hooks/scripts/stuck-detector.sh +199 -0
- package/templates/.claude/hooks/scripts/task-outcome-recorder.sh +119 -0
- package/templates/.claude/hooks/scripts/task-state-precompact.sh +58 -0
- package/templates/.claude/hooks/scripts/user-prompt-preprocessor.sh +32 -0
- package/templates/.claude/hooks/skill-count-reminder.sh +34 -0
- package/templates/.claude/install-hooks.sh +100 -0
- package/templates/.claude/ontology/agents.yaml +546 -0
- package/templates/.claude/ontology/graphs/agent-skill.json +102 -0
- package/templates/.claude/ontology/graphs/full-graph.json +629 -0
- package/templates/.claude/ontology/graphs/routing.json +112 -0
- package/templates/.claude/ontology/graphs/skill-rule.json +78 -0
- package/templates/.claude/ontology/rules.yaml +251 -0
- package/templates/.claude/ontology/schema.yaml +144 -0
- package/templates/.claude/ontology/skills.yaml +575 -0
- package/templates/.claude/rules/MAY-optimization.md +42 -0
- package/templates/.claude/rules/MUST-agent-design.md +340 -0
- package/templates/.claude/rules/MUST-agent-identification.md +77 -0
- package/templates/.claude/rules/MUST-agent-teams.md +293 -0
- package/templates/.claude/rules/MUST-completion-verification.md +112 -0
- package/templates/.claude/rules/MUST-continuous-improvement.md +69 -0
- package/templates/.claude/rules/MUST-enforcement-policy.md +50 -0
- package/templates/.claude/rules/MUST-intent-transparency.md +74 -0
- package/templates/.claude/rules/MUST-language-policy.md +28 -0
- package/templates/.claude/rules/MUST-orchestrator-coordination.md +399 -0
- package/templates/.claude/rules/MUST-parallel-execution.md +184 -0
- package/templates/.claude/rules/MUST-permissions.md +32 -0
- package/templates/.claude/rules/MUST-safety.md +23 -0
- package/templates/.claude/rules/MUST-sync-verification.md +145 -0
- package/templates/.claude/rules/MUST-tool-identification.md +97 -0
- package/templates/.claude/rules/SHOULD-ecomode.md +123 -0
- package/templates/.claude/rules/SHOULD-error-handling.md +33 -0
- package/templates/.claude/rules/SHOULD-hud-statusline.md +51 -0
- package/templates/.claude/rules/SHOULD-interaction.md +77 -0
- package/templates/.claude/rules/SHOULD-memory-integration.md +371 -0
- package/templates/.claude/rules/SHOULD-ontology-rag-routing.md +49 -0
- package/templates/.claude/rules/SHOULD-wiki-sync.md +73 -0
- package/templates/.claude/rules/index.yaml +141 -0
- package/templates/.claude/schemas/tool-inputs.json +62 -0
- package/templates/.claude/skills/action-validator/SKILL.md +89 -0
- package/templates/.claude/skills/adaptive-harness/SKILL.md +335 -0
- package/templates/.claude/skills/adversarial-review/SKILL.md +80 -0
- package/templates/.claude/skills/agora/SKILL.md +194 -0
- package/templates/.claude/skills/airflow-best-practices/SKILL.md +94 -0
- package/templates/.claude/skills/alembic-best-practices/SKILL.md +295 -0
- package/templates/.claude/skills/ambiguity-gate/SKILL.md +94 -0
- package/templates/.claude/skills/analysis/SKILL.md +223 -0
- package/templates/.claude/skills/audit-agents/SKILL.md +118 -0
- package/templates/.claude/skills/aws-best-practices/SKILL.md +281 -0
- package/templates/.claude/skills/claude-code-bible/SKILL.md +93 -0
- package/templates/.claude/skills/claude-code-bible/scripts/fetch-docs.js +244 -0
- package/templates/.claude/skills/claude-native/SKILL.md +215 -0
- package/templates/.claude/skills/codex-exec/SKILL.md +206 -0
- package/templates/.claude/skills/codex-exec/scripts/codex-wrapper.cjs +430 -0
- package/templates/.claude/skills/create-agent/SKILL.md +94 -0
- package/templates/.claude/skills/cve-triage/SKILL.md +91 -0
- package/templates/.claude/skills/dag-orchestration/SKILL.md +201 -0
- package/templates/.claude/skills/dbt-best-practices/SKILL.md +55 -0
- package/templates/.claude/skills/de-lead-routing/SKILL.md +230 -0
- package/templates/.claude/skills/deep-plan/SKILL.md +344 -0
- package/templates/.claude/skills/deep-verify/SKILL.md +111 -0
- package/templates/.claude/skills/dev-lead-routing/SKILL.md +161 -0
- package/templates/.claude/skills/dev-refactor/SKILL.md +234 -0
- package/templates/.claude/skills/dev-review/SKILL.md +172 -0
- package/templates/.claude/skills/django-best-practices/SKILL.md +334 -0
- package/templates/.claude/skills/docker-best-practices/SKILL.md +276 -0
- package/templates/.claude/skills/evaluator-optimizer/SKILL.md +421 -0
- package/templates/.claude/skills/fastapi-best-practices/SKILL.md +271 -0
- package/templates/.claude/skills/fix-refs/SKILL.md +109 -0
- package/templates/.claude/skills/flutter-best-practices/SKILL.md +325 -0
- package/templates/.claude/skills/gemini-exec/SKILL.md +215 -0
- package/templates/.claude/skills/gemini-exec/scripts/gemini-wrapper.cjs +485 -0
- package/templates/.claude/skills/go-backend-best-practices/SKILL.md +135 -0
- package/templates/.claude/skills/go-best-practices/SKILL.md +204 -0
- package/templates/.claude/skills/hada-scout/SKILL.md +92 -0
- package/templates/.claude/skills/harness-eval/SKILL.md +95 -0
- package/templates/.claude/skills/harness-synthesizer/SKILL.md +145 -0
- package/templates/.claude/skills/help/SKILL.md +127 -0
- package/templates/.claude/skills/idea/SKILL.md +88 -0
- package/templates/.claude/skills/impeccable-design/SKILL.md +173 -0
- package/templates/.claude/skills/intent-detection/SKILL.md +293 -0
- package/templates/.claude/skills/intent-detection/patterns/agent-triggers.yaml +438 -0
- package/templates/.claude/skills/java21-best-practices/SKILL.md +190 -0
- package/templates/.claude/skills/jinja2-prompts/SKILL.md +86 -0
- package/templates/.claude/skills/kafka-best-practices/SKILL.md +53 -0
- package/templates/.claude/skills/kotlin-best-practices/SKILL.md +257 -0
- package/templates/.claude/skills/lists/SKILL.md +80 -0
- package/templates/.claude/skills/memory-management/SKILL.md +196 -0
- package/templates/.claude/skills/memory-recall/SKILL.md +172 -0
- package/templates/.claude/skills/memory-save/SKILL.md +128 -0
- package/templates/.claude/skills/model-escalation/SKILL.md +62 -0
- package/templates/.claude/skills/monitoring-setup/SKILL.md +215 -0
- package/templates/.claude/skills/multi-model-verification/SKILL.md +130 -0
- package/templates/.claude/skills/npm-audit/SKILL.md +74 -0
- package/templates/.claude/skills/npm-publish/SKILL.md +65 -0
- package/templates/.claude/skills/npm-version/SKILL.md +104 -0
- package/templates/.claude/skills/omcodex-auto-improve/SKILL.md +136 -0
- package/templates/.claude/skills/omcodex-feedback/SKILL.md +205 -0
- package/templates/.claude/skills/omcodex-improve-report/SKILL.md +65 -0
- package/templates/.claude/skills/omcodex-loop/SKILL.md +45 -0
- package/templates/.claude/skills/omcodex-release-notes/SKILL.md +117 -0
- package/templates/.claude/skills/omcodex-takeover/SKILL.md +115 -0
- package/templates/.claude/skills/omcodex-web/SKILL.md +95 -0
- package/templates/.claude/skills/optimize-analyze/SKILL.md +57 -0
- package/templates/.claude/skills/optimize-bundle/SKILL.md +69 -0
- package/templates/.claude/skills/optimize-report/SKILL.md +76 -0
- package/templates/.claude/skills/peer-messaging/SKILL.md +59 -0
- package/templates/.claude/skills/pipeline/SKILL.md +103 -0
- package/templates/.claude/skills/pipeline-architecture-patterns/SKILL.md +84 -0
- package/templates/.claude/skills/pipeline-guards/SKILL.md +173 -0
- package/templates/.claude/skills/post-release-followup/SKILL.md +134 -0
- package/templates/.claude/skills/postgres-best-practices/SKILL.md +67 -0
- package/templates/.claude/skills/pr-auto-improve/SKILL.md +129 -0
- package/templates/.claude/skills/professor-triage/SKILL.md +321 -0
- package/templates/.claude/skills/python-best-practices/SKILL.md +223 -0
- package/templates/.claude/skills/qa-lead-routing/SKILL.md +104 -0
- package/templates/.claude/skills/react-best-practices/SKILL.md +102 -0
- package/templates/.claude/skills/reasoning-sandwich/SKILL.md +64 -0
- package/templates/.claude/skills/redis-best-practices/SKILL.md +84 -0
- package/templates/.claude/skills/release-plan/SKILL.md +207 -0
- package/templates/.claude/skills/research/SKILL.md +493 -0
- package/templates/.claude/skills/result-aggregation/SKILL.md +165 -0
- package/templates/.claude/skills/rtk-exec/SKILL.md +199 -0
- package/templates/.claude/skills/rtk-exec/scripts/rtk-wrapper.cjs +377 -0
- package/templates/.claude/skills/rust-best-practices/SKILL.md +268 -0
- package/templates/.claude/skills/sauron-watch/SKILL.md +239 -0
- package/templates/.claude/skills/scout/SKILL.md +250 -0
- package/templates/.claude/skills/sdd/SKILL.md +24 -0
- package/templates/.claude/skills/sdd-dev/SKILL.md +257 -0
- package/templates/.claude/skills/sdd-development/SKILL.md +24 -0
- package/templates/.claude/skills/secretary-routing/SKILL.md +132 -0
- package/templates/.claude/skills/skill-extractor/SKILL.md +155 -0
- package/templates/.claude/skills/skills-sh-search/SKILL.md +210 -0
- package/templates/.claude/skills/snowflake-best-practices/SKILL.md +66 -0
- package/templates/.claude/skills/spark-best-practices/SKILL.md +53 -0
- package/templates/.claude/skills/springboot-best-practices/SKILL.md +74 -0
- package/templates/.claude/skills/springboot-best-practices/examples/config-properties-example.java +22 -0
- package/templates/.claude/skills/springboot-best-practices/examples/controller-example.java +28 -0
- package/templates/.claude/skills/springboot-best-practices/examples/controller-test-example.java +33 -0
- package/templates/.claude/skills/springboot-best-practices/examples/entity-example.java +22 -0
- package/templates/.claude/skills/springboot-best-practices/examples/exception-handler-example.java +30 -0
- package/templates/.claude/skills/springboot-best-practices/examples/repository-example.java +17 -0
- package/templates/.claude/skills/springboot-best-practices/examples/repository-test-example.java +23 -0
- package/templates/.claude/skills/springboot-best-practices/examples/security-config-example.java +27 -0
- package/templates/.claude/skills/springboot-best-practices/examples/service-example.java +33 -0
- package/templates/.claude/skills/status/SKILL.md +155 -0
- package/templates/.claude/skills/structured-dev-cycle/SKILL.md +200 -0
- package/templates/.claude/skills/stuck-recovery/SKILL.md +80 -0
- package/templates/.claude/skills/supabase-postgres-best-practices/SKILL.md +100 -0
- package/templates/.claude/skills/systematic-debugging/SKILL.md +288 -0
- package/templates/.claude/skills/systematic-debugging/condition-based-waiting-example.ts +278 -0
- package/templates/.claude/skills/systematic-debugging/condition-based-waiting.md +240 -0
- package/templates/.claude/skills/systematic-debugging/defense-in-depth.md +252 -0
- package/templates/.claude/skills/systematic-debugging/find-polluter.sh +147 -0
- package/templates/.claude/skills/systematic-debugging/root-cause-tracing.md +87 -0
- package/templates/.claude/skills/task-decomposition/SKILL.md +197 -0
- package/templates/.claude/skills/typescript-best-practices/SKILL.md +322 -0
- package/templates/.claude/skills/update-docs/SKILL.md +142 -0
- package/templates/.claude/skills/update-external/SKILL.md +169 -0
- package/templates/.claude/skills/vercel-deploy/SKILL.md +75 -0
- package/templates/.claude/skills/web-design-guidelines/SKILL.md +119 -0
- package/templates/.claude/skills/wiki/SKILL.md +426 -0
- package/templates/.claude/skills/wiki-rag/SKILL.md +154 -0
- package/templates/.claude/skills/worker-reviewer-pipeline/SKILL.md +165 -0
- package/templates/.claude/skills/writing-clearly-and-concisely/SKILL.md +66 -0
- package/templates/.claude/statusline.sh +380 -0
- package/templates/.claude/uninstall-hooks.sh +52 -0
- package/templates/.github/workflows/wiki-sync.yml +132 -0
- package/templates/AGENTS.md.en +255 -0
- package/templates/AGENTS.md.ko +255 -0
- package/templates/CLAUDE.md +263 -0
- package/templates/CLAUDE.md.en +256 -0
- package/templates/CLAUDE.md.ko +256 -0
- package/templates/deprecated-files.json +10 -0
- package/templates/guides/agents-md-quality/README.md +110 -0
- package/templates/guides/airflow/README.md +47 -0
- package/templates/guides/alembic/README.md +438 -0
- package/templates/guides/aws/common-patterns.md +169 -0
- package/templates/guides/aws/index.yaml +26 -0
- package/templates/guides/aws/well-architected.md +143 -0
- package/templates/guides/cc-token-saver/README.md +97 -0
- package/templates/guides/claude-code/01-overview.md +42 -0
- package/templates/guides/claude-code/03-tools.md +107 -0
- package/templates/guides/claude-code/04-agent-skills.md +90 -0
- package/templates/guides/claude-code/05-agent-sdk.md +129 -0
- package/templates/guides/claude-code/06-mcp.md +165 -0
- package/templates/guides/claude-code/07-prompt-engineering.md +100 -0
- package/templates/guides/claude-code/08-testing.md +56 -0
- package/templates/guides/claude-code/09-guardrails.md +78 -0
- package/templates/guides/claude-code/10-monitoring.md +87 -0
- package/templates/guides/claude-code/11-sub-agents.md +159 -0
- package/templates/guides/claude-code/12-workflow-patterns.md +182 -0
- package/templates/guides/claude-code/13-cli-flags.md +151 -0
- package/templates/guides/claude-code/index.yaml +61 -0
- package/templates/guides/dbt/README.md +32 -0
- package/templates/guides/django-best-practices/README.md +476 -0
- package/templates/guides/docker/compose-best-practices.md +284 -0
- package/templates/guides/docker/dockerfile-best-practices.md +262 -0
- package/templates/guides/docker/index.yaml +26 -0
- package/templates/guides/drizzle-orm/README.md +69 -0
- package/templates/guides/elements-of-style/elements-of-style.html +2609 -0
- package/templates/guides/fastapi/best-practices.md +232 -0
- package/templates/guides/fastapi/index.yaml +21 -0
- package/templates/guides/flutter/architecture.md +141 -0
- package/templates/guides/flutter/fundamentals.md +119 -0
- package/templates/guides/flutter/index.yaml +44 -0
- package/templates/guides/flutter/performance.md +119 -0
- package/templates/guides/flutter/security.md +120 -0
- package/templates/guides/flutter/state-management.md +144 -0
- package/templates/guides/flutter/testing.md +155 -0
- package/templates/guides/git-worktree-workflow/README.md +138 -0
- package/templates/guides/go-backend/index.yaml +26 -0
- package/templates/guides/go-backend/project-layout.md +243 -0
- package/templates/guides/go-backend/uber-style.md +212 -0
- package/templates/guides/golang/concurrency.md +282 -0
- package/templates/guides/golang/effective-go.md +309 -0
- package/templates/guides/golang/error-handling.md +250 -0
- package/templates/guides/golang/index.yaml +27 -0
- package/templates/guides/hook-data-flow/README.md +135 -0
- package/templates/guides/iceberg/README.md +49 -0
- package/templates/guides/impeccable-design/color-and-contrast.md +278 -0
- package/templates/guides/impeccable-design/index.yaml +12 -0
- package/templates/guides/impeccable-design/motion-design.md +390 -0
- package/templates/guides/impeccable-design/typography.md +386 -0
- package/templates/guides/impeccable-design/ux-writing.md +400 -0
- package/templates/guides/index.yaml +265 -0
- package/templates/guides/java21/index.yaml +29 -0
- package/templates/guides/java21/java-style-guide.md +248 -0
- package/templates/guides/java21/modern-java21.md +303 -0
- package/templates/guides/kafka/README.md +32 -0
- package/templates/guides/kotlin/coding-conventions.md +247 -0
- package/templates/guides/kotlin/idioms.md +234 -0
- package/templates/guides/kotlin/index.yaml +26 -0
- package/templates/guides/multi-model-routing/README.md +101 -0
- package/templates/guides/multi-provider-exec/README.md +83 -0
- package/templates/guides/postgres/README.md +58 -0
- package/templates/guides/python/index.yaml +26 -0
- package/templates/guides/python/pep8-style-guide.md +202 -0
- package/templates/guides/python/zen-of-python.md +79 -0
- package/templates/guides/redis/README.md +50 -0
- package/templates/guides/rust/error-handling.md +262 -0
- package/templates/guides/rust/index.yaml +26 -0
- package/templates/guides/rust/ownership.md +180 -0
- package/templates/guides/skill-bundle-design/README.md +106 -0
- package/templates/guides/slack-cli/README.md +145 -0
- package/templates/guides/snowflake/README.md +32 -0
- package/templates/guides/spark/README.md +32 -0
- package/templates/guides/springboot/best-practices.md +361 -0
- package/templates/guides/springboot/index.yaml +22 -0
- package/templates/guides/supabase-postgres/README.md +32 -0
- package/templates/guides/supabase-postgres/index.yaml +19 -0
- package/templates/guides/typescript/advanced-types.md +225 -0
- package/templates/guides/typescript/index.yaml +26 -0
- package/templates/guides/typescript/type-system.md +219 -0
- package/templates/guides/web-design/accessibility.md +66 -0
- package/templates/guides/web-design/index.yaml +20 -0
- package/templates/guides/web-design/performance.md +102 -0
- package/templates/guides/web-scraping/README.md +926 -0
- package/templates/guides/web-scraping/index.yaml +19 -0
- package/templates/guides/worktree-lifecycle/README.md +104 -0
- package/templates/index.yaml +18 -0
- package/templates/manifest.json +49 -0
- package/templates/workflows/auto-dev.yaml +46 -0
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
# Motion Design
|
|
2
|
+
|
|
3
|
+
> Reference: Impeccable Design Language — https://github.com/pbakaus/impeccable (Apache 2.0)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## The 100/300/500 Rule
|
|
8
|
+
|
|
9
|
+
Animation duration should match the conceptual weight of the change. Too fast and users miss feedback; too slow and the interface feels sluggish.
|
|
10
|
+
|
|
11
|
+
### Duration tiers
|
|
12
|
+
|
|
13
|
+
| Tier | Duration | Use cases |
|
|
14
|
+
|------|----------|-----------|
|
|
15
|
+
| Feedback | 100–150ms | Button press, checkbox toggle, hover state, ripple |
|
|
16
|
+
| State change | 200–300ms | Dropdown open, tooltip appear, tab switch, accordion |
|
|
17
|
+
| Structural | 300–500ms | Page transition, modal open, sidebar expand |
|
|
18
|
+
| Entry / onboarding | 500–800ms | Hero animations, first-run sequences, loading complete |
|
|
19
|
+
|
|
20
|
+
### Exit animations are shorter
|
|
21
|
+
|
|
22
|
+
Elements leaving the screen should animate out at roughly 75% of their entrance duration. The user's attention has already moved on:
|
|
23
|
+
|
|
24
|
+
```css
|
|
25
|
+
.modal-enter { animation-duration: 300ms; }
|
|
26
|
+
.modal-exit { animation-duration: 225ms; } /* 75% of 300ms */
|
|
27
|
+
|
|
28
|
+
.dropdown-enter { animation-duration: 200ms; }
|
|
29
|
+
.dropdown-exit { animation-duration: 150ms; }
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Easing Functions
|
|
35
|
+
|
|
36
|
+
Generic browser easings (`ease`, `ease-in`, `ease-out`, `ease-in-out`) are functional but imprecise. Custom cubic-bezier curves produce more polished results.
|
|
37
|
+
|
|
38
|
+
### The three essential curves
|
|
39
|
+
|
|
40
|
+
**Ease-out** — for elements appearing on screen (entering, expanding):
|
|
41
|
+
```css
|
|
42
|
+
/* Fast start, gentle landing */
|
|
43
|
+
animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Ease-in** — for elements leaving screen (exiting, collapsing):
|
|
47
|
+
```css
|
|
48
|
+
/* Gradual acceleration, fast exit */
|
|
49
|
+
animation-timing-function: cubic-bezier(0.7, 0, 0.84, 0);
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Ease-in-out** — for bidirectional transitions (sliding between states):
|
|
53
|
+
```css
|
|
54
|
+
/* Symmetrical: slow start, fast middle, slow end */
|
|
55
|
+
animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1);
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Exponential curves (more expressive)
|
|
59
|
+
|
|
60
|
+
| Curve | CSS | Character |
|
|
61
|
+
|-------|-----|-----------|
|
|
62
|
+
| Quart-out | `cubic-bezier(0.25, 1, 0.5, 1)` | Smooth default, good for most UI |
|
|
63
|
+
| Quint-out | `cubic-bezier(0.22, 1, 0.36, 1)` | Dramatic, large structural changes |
|
|
64
|
+
| Expo-out | `cubic-bezier(0.16, 1, 0.3, 1)` | Snappy, high-energy feedback |
|
|
65
|
+
|
|
66
|
+
### CSS custom properties for easing tokens
|
|
67
|
+
|
|
68
|
+
```css
|
|
69
|
+
:root {
|
|
70
|
+
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
|
|
71
|
+
--ease-in: cubic-bezier(0.7, 0, 0.84, 0);
|
|
72
|
+
--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
|
|
73
|
+
--ease-spring: cubic-bezier(0.25, 1, 0.5, 1);
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Anti-pattern: bounce and elastic
|
|
78
|
+
|
|
79
|
+
Bounce and elastic easings were popular in the early 2010s. They now read as amateurish and dated. They also perform poorly for accessibility (vestibular disorders). Do not use them:
|
|
80
|
+
|
|
81
|
+
```css
|
|
82
|
+
/* WRONG: dated, amateurish */
|
|
83
|
+
animation-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1); /* overshoot */
|
|
84
|
+
|
|
85
|
+
/* CORRECT: expo-out is energetic without bouncing */
|
|
86
|
+
animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Performance: Only Animate transform and opacity
|
|
92
|
+
|
|
93
|
+
Layout-triggering properties (`width`, `height`, `top`, `left`, `margin`, `padding`) force the browser to recalculate layout on every frame — expensive and jank-prone. Only `transform` and `opacity` skip layout and paint, running entirely on the GPU compositor.
|
|
94
|
+
|
|
95
|
+
### Safe properties
|
|
96
|
+
|
|
97
|
+
```css
|
|
98
|
+
/* CORRECT: compositor-only, 60fps */
|
|
99
|
+
.panel { transform: translateX(-100%); opacity: 0; }
|
|
100
|
+
.panel.open { transform: translateX(0); opacity: 1; }
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Avoid layout-triggering animations
|
|
104
|
+
|
|
105
|
+
```css
|
|
106
|
+
/* WRONG: triggers layout recalculation every frame */
|
|
107
|
+
.panel { left: -300px; }
|
|
108
|
+
.panel.open { left: 0; }
|
|
109
|
+
|
|
110
|
+
/* WRONG: forces paint */
|
|
111
|
+
.card { background-color: #fff; }
|
|
112
|
+
.card:hover { background-color: #f5f5f5; } /* fine for hover, bad inside keyframes */
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Animating height with CSS grid
|
|
116
|
+
|
|
117
|
+
Animating `height: 0` to `height: auto` is a common requirement (accordion, expand/collapse) that cannot use `transform` directly. The cleanest CSS-only solution uses `grid-template-rows`:
|
|
118
|
+
|
|
119
|
+
```css
|
|
120
|
+
.accordion-content {
|
|
121
|
+
display: grid;
|
|
122
|
+
grid-template-rows: 0fr;
|
|
123
|
+
transition: grid-template-rows 250ms var(--ease-out);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.accordion-content.open {
|
|
127
|
+
grid-template-rows: 1fr;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.accordion-content > div {
|
|
131
|
+
overflow: hidden; /* required for 0fr to clip content */
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Staggered Animations
|
|
138
|
+
|
|
139
|
+
Staggering applies progressively increasing delays to a list of elements, creating a wave effect. It communicates that items belong together while adding visual interest.
|
|
140
|
+
|
|
141
|
+
### CSS custom properties approach
|
|
142
|
+
|
|
143
|
+
```css
|
|
144
|
+
.list-item {
|
|
145
|
+
animation: fade-up 300ms var(--ease-out) both;
|
|
146
|
+
animation-delay: calc(var(--i) * 50ms);
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Set `--i` on each element:
|
|
151
|
+
|
|
152
|
+
```html
|
|
153
|
+
<li class="list-item" style="--i: 0">First</li>
|
|
154
|
+
<li class="list-item" style="--i: 1">Second</li>
|
|
155
|
+
<li class="list-item" style="--i: 2">Third</li>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Or set it in JavaScript:
|
|
159
|
+
|
|
160
|
+
```js
|
|
161
|
+
document.querySelectorAll('.list-item').forEach((el, i) => {
|
|
162
|
+
el.style.setProperty('--i', i);
|
|
163
|
+
});
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Cap total stagger duration at 500ms
|
|
167
|
+
|
|
168
|
+
A list of 20 items staggered at 50ms each takes 1000ms to complete — too long. Cap the maximum total delay:
|
|
169
|
+
|
|
170
|
+
```css
|
|
171
|
+
animation-delay: calc(min(var(--i), 8) * 50ms); /* max 400ms total */
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Or limit at the last item: stagger interval × item count should not exceed 500ms.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Accessibility: prefers-reduced-motion
|
|
179
|
+
|
|
180
|
+
Approximately 35% of adults over 40 have vestibular disorders that can be triggered by parallax, sliding transitions, and spinning elements. The `prefers-reduced-motion` media query is not optional.
|
|
181
|
+
|
|
182
|
+
### User statistics
|
|
183
|
+
|
|
184
|
+
This is not a fringe case. `prefers-reduced-motion: reduce` affects a significant portion of users — including those who enable it for performance reasons on low-power devices.
|
|
185
|
+
|
|
186
|
+
### Replace spatial motion with crossfades
|
|
187
|
+
|
|
188
|
+
The principle: preserve the informational purpose of the animation while removing the vestibular trigger.
|
|
189
|
+
|
|
190
|
+
```css
|
|
191
|
+
@keyframes slide-in {
|
|
192
|
+
from { transform: translateY(20px); opacity: 0; }
|
|
193
|
+
to { transform: translateY(0); opacity: 1; }
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
@keyframes fade-in {
|
|
197
|
+
from { opacity: 0; }
|
|
198
|
+
to { opacity: 1; }
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.panel {
|
|
202
|
+
animation: slide-in 300ms var(--ease-out);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
@media (prefers-reduced-motion: reduce) {
|
|
206
|
+
.panel {
|
|
207
|
+
animation: fade-in 150ms linear; /* shorter, opacity-only */
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Preserve functional animations
|
|
213
|
+
|
|
214
|
+
Some animations communicate state changes that users need (progress bars, loading spinners, form validation). These should be preserved even for reduced-motion users — reduce their speed and intensity, do not eliminate them:
|
|
215
|
+
|
|
216
|
+
```css
|
|
217
|
+
@media (prefers-reduced-motion: reduce) {
|
|
218
|
+
.spinner {
|
|
219
|
+
/* Slow down, keep the spin so user knows loading is happening */
|
|
220
|
+
animation-duration: 2s;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.progress-bar {
|
|
224
|
+
/* Shorten transition but keep it */
|
|
225
|
+
transition-duration: 50ms;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Global reset approach
|
|
231
|
+
|
|
232
|
+
A pragmatic approach for existing codebases:
|
|
233
|
+
|
|
234
|
+
```css
|
|
235
|
+
@media (prefers-reduced-motion: reduce) {
|
|
236
|
+
*,
|
|
237
|
+
*::before,
|
|
238
|
+
*::after {
|
|
239
|
+
animation-duration: 0.01ms !important;
|
|
240
|
+
animation-iteration-count: 1 !important;
|
|
241
|
+
transition-duration: 0.01ms !important;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
This is a blunt instrument. Prefer targeted overrides where functional animations need preservation.
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Perceived Performance
|
|
251
|
+
|
|
252
|
+
Animation can make interfaces feel faster even when task completion time is identical. These techniques exploit how the brain perceives wait time.
|
|
253
|
+
|
|
254
|
+
### The 80ms threshold
|
|
255
|
+
|
|
256
|
+
Users perceive delays under 80ms as instantaneous. Responses between 80–100ms feel slightly delayed but acceptable. Above 200ms, users consciously notice the wait.
|
|
257
|
+
|
|
258
|
+
Design principle: use the delay budget wisely. If a backend call takes 300ms, an optimistic UI update at 0ms prevents the user from ever perceiving the delay.
|
|
259
|
+
|
|
260
|
+
### Active vs passive waiting
|
|
261
|
+
|
|
262
|
+
A spinner saying "Loading..." is passive waiting — the user is frozen. A progress bar, animated skeleton screen, or optimistic UI update is active — the user feels progress is happening.
|
|
263
|
+
|
|
264
|
+
- Skeleton screens reduce perceived wait time by 10–30% compared to blank space
|
|
265
|
+
- Content that appears progressively (top to bottom) feels faster than all-at-once reveals
|
|
266
|
+
|
|
267
|
+
### Preemptive transitions
|
|
268
|
+
|
|
269
|
+
Start a transition before the user's action completes. Hover states that begin animating at hover start (not click) make actions feel faster:
|
|
270
|
+
|
|
271
|
+
```css
|
|
272
|
+
.button {
|
|
273
|
+
transition: background-color 150ms var(--ease-out),
|
|
274
|
+
transform 100ms var(--ease-out);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.button:hover {
|
|
278
|
+
/* Animate on hover, not just on click */
|
|
279
|
+
background-color: var(--primary-600);
|
|
280
|
+
transform: translateY(-1px);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.button:active {
|
|
284
|
+
transform: translateY(0);
|
|
285
|
+
transition-duration: 50ms;
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### Optimistic UI
|
|
290
|
+
|
|
291
|
+
Update the UI immediately on user action, then sync with the server. Show the final state first and roll back only on error:
|
|
292
|
+
|
|
293
|
+
```js
|
|
294
|
+
// Optimistic update pattern
|
|
295
|
+
async function toggleLike(postId) {
|
|
296
|
+
// 1. Update UI immediately
|
|
297
|
+
setLiked(true);
|
|
298
|
+
setCount(prev => prev + 1);
|
|
299
|
+
|
|
300
|
+
try {
|
|
301
|
+
// 2. Sync with server
|
|
302
|
+
await api.like(postId);
|
|
303
|
+
} catch {
|
|
304
|
+
// 3. Roll back on failure
|
|
305
|
+
setLiked(false);
|
|
306
|
+
setCount(prev => prev - 1);
|
|
307
|
+
showError('Could not save — please try again');
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## Performance Implementation
|
|
315
|
+
|
|
316
|
+
### will-change: use on trigger, not permanently
|
|
317
|
+
|
|
318
|
+
`will-change` promotes an element to its own GPU layer. Overuse wastes GPU memory and can slow rendering:
|
|
319
|
+
|
|
320
|
+
```css
|
|
321
|
+
/* WRONG: always promoted, wastes GPU memory */
|
|
322
|
+
.card { will-change: transform; }
|
|
323
|
+
|
|
324
|
+
/* CORRECT: promote only when animation is about to happen */
|
|
325
|
+
.card:hover { will-change: transform; }
|
|
326
|
+
|
|
327
|
+
/* Or in JS: add/remove on animation start/end */
|
|
328
|
+
el.addEventListener('mouseenter', () => el.style.willChange = 'transform');
|
|
329
|
+
el.addEventListener('animationend', () => el.style.willChange = 'auto');
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### Intersection Observer for scroll animations
|
|
333
|
+
|
|
334
|
+
Never use scroll event listeners for animation triggers — they fire on every scroll event and block the main thread. Use `IntersectionObserver`:
|
|
335
|
+
|
|
336
|
+
```js
|
|
337
|
+
const observer = new IntersectionObserver((entries) => {
|
|
338
|
+
entries.forEach(entry => {
|
|
339
|
+
if (entry.isIntersecting) {
|
|
340
|
+
entry.target.classList.add('animate-in');
|
|
341
|
+
observer.unobserve(entry.target); // stop observing once triggered
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
}, { threshold: 0.1 });
|
|
345
|
+
|
|
346
|
+
document.querySelectorAll('.animate-on-scroll').forEach(el => observer.observe(el));
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### Motion tokens
|
|
350
|
+
|
|
351
|
+
Centralize all durations and easings as tokens to enable systematic changes and theming:
|
|
352
|
+
|
|
353
|
+
```css
|
|
354
|
+
:root {
|
|
355
|
+
/* Duration */
|
|
356
|
+
--duration-fast: 100ms;
|
|
357
|
+
--duration-normal: 200ms;
|
|
358
|
+
--duration-slow: 350ms;
|
|
359
|
+
--duration-deliberate: 500ms;
|
|
360
|
+
|
|
361
|
+
/* Easing */
|
|
362
|
+
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
|
|
363
|
+
--ease-in: cubic-bezier(0.7, 0, 0.84, 0);
|
|
364
|
+
--ease-inout: cubic-bezier(0.65, 0, 0.35, 1);
|
|
365
|
+
|
|
366
|
+
/* Reduce motion override */
|
|
367
|
+
--duration-motion-safe: 200ms;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
@media (prefers-reduced-motion: reduce) {
|
|
371
|
+
:root {
|
|
372
|
+
--duration-motion-safe: 0.01ms;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## Anti-Patterns
|
|
380
|
+
|
|
381
|
+
| Anti-pattern | Problem | Fix |
|
|
382
|
+
|--------------|---------|-----|
|
|
383
|
+
| Animating everything | Dilutes meaning; users stop noticing what's important | Reserve motion for state changes that need emphasis |
|
|
384
|
+
| Feedback animation > 500ms | Feels broken; user re-clicks, creates double-trigger bugs | Keep feedback under 200ms |
|
|
385
|
+
| No reduced-motion support | Triggers vestibular disorders for ~35% of adults over 40 | Always implement `prefers-reduced-motion` |
|
|
386
|
+
| Bounce and elastic easing | Dated, amateurish, vestibular risk | Use expo-out for energy |
|
|
387
|
+
| `left`/`top`/`height` in keyframes | Triggers layout recalc every frame, causes jank | Use `transform` + `opacity` only |
|
|
388
|
+
| Stagger > 500ms total | Users wait for the list to finish before acting | Cap at 500ms total stagger |
|
|
389
|
+
| `will-change` on static elements | Wastes GPU memory, can slow render | Apply only during/before animation |
|
|
390
|
+
| Scroll listener for animations | Blocks main thread, causes jank | Use `IntersectionObserver` |
|