@haposoft/cafekit 0.16.0-rc.8 β 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +117 -28
- package/bin/__tests__/codex-hooks-ownership.test.js +239 -0
- package/bin/__tests__/codex-hooks.test.js +175 -0
- package/bin/__tests__/codex-native.test.js +1882 -70
- package/bin/__tests__/develop-contract.test.js +442 -23
- package/bin/__tests__/grok-envelope.test.js +271 -0
- package/bin/__tests__/grok-platform.test.js +133 -0
- package/bin/__tests__/hook-payload.test.js +194 -0
- package/bin/__tests__/installer-safety.test.js +3 -3
- package/bin/__tests__/omp-bridge.test.js +168 -0
- package/bin/__tests__/omp-hooks.test.js +178 -0
- package/bin/__tests__/omp-runtime.test.js +150 -0
- package/bin/__tests__/optional-skill-inventory.test.js +249 -0
- package/bin/__tests__/output-styles.test.js +214 -0
- package/bin/__tests__/package-inventory.test.js +1735 -98
- package/bin/__tests__/runtime-dir.test.js +158 -0
- package/bin/__tests__/runtime-schema.test.js +113 -0
- package/bin/__tests__/secret-output-guardrail.test.js +122 -0
- package/bin/__tests__/skill-routing-source.test.js +172 -0
- package/bin/__tests__/specs-v2-execution-closeout.test.js +28 -1
- package/bin/install.js +15 -5
- package/bin/lib/codex-install.js +170 -5
- package/bin/lib/context.js +64 -3
- package/bin/lib/i18n.js +15 -36
- package/bin/lib/skill-deps.js +5 -5
- package/bin/phases/claude-runtime.js +23 -0
- package/bin/phases/claude-settings.js +8 -0
- package/bin/phases/codex-hooks.js +156 -0
- package/bin/phases/codex-runtime.js +29 -38
- package/bin/phases/copy-payload.js +15 -2
- package/bin/phases/omp-runtime.js +140 -0
- package/bin/phases/root-config.js +3 -0
- package/bin/phases/select-platform.js +22 -1
- package/bin/phases/select-skill-bundles.js +96 -0
- package/bin/phases/skill-inventory.js +71 -0
- package/bin/phases/skills-setup.js +9 -2
- package/bin/phases/summary.js +0 -4
- package/bin/phases/write-metadata.js +8 -5
- package/package.json +8 -2
- package/src/claude/CLAUDE.md +3 -3
- package/src/claude/agents/brainstormer.md +52 -69
- package/src/claude/agents/code-auditor.md +32 -14
- package/src/claude/agents/debugger.md +35 -20
- package/src/claude/agents/deployer.md +12 -5
- package/src/claude/agents/docs-keeper.md +11 -1
- package/src/claude/agents/implementer.md +25 -13
- package/src/claude/agents/inspector.md +6 -3
- package/src/claude/agents/project-manager.md +1 -1
- package/src/claude/agents/researcher.md +26 -55
- package/src/claude/agents/spec-maker.md +12 -7
- package/src/claude/agents/strategist.md +52 -0
- package/src/claude/agents/test-runner.md +117 -132
- package/src/claude/agents/ui-ux-designer.md +1 -1
- package/src/claude/hooks/__tests__/fixtures/statusline-default.golden +1 -0
- package/src/claude/hooks/__tests__/precompact.test.js +158 -0
- package/src/claude/hooks/__tests__/semantic-review-authority.test.js +2 -0
- package/src/claude/hooks/__tests__/spec-gate.test.js +348 -3
- package/src/claude/hooks/__tests__/state.test.js +7 -0
- package/src/claude/hooks/__tests__/statusline.test.js +196 -0
- package/src/claude/hooks/agent.cjs +13 -8
- package/src/claude/hooks/completion-authority.cjs +10 -4
- package/src/claude/hooks/docs-sync.cjs +14 -11
- package/src/claude/hooks/inspect-block.cjs +28 -8
- package/src/claude/hooks/lib/config.cjs +8 -2
- package/src/claude/hooks/lib/counter.cjs +7 -5
- package/src/claude/hooks/lib/hook-payload.cjs +160 -0
- package/src/claude/hooks/lib/hook-state-dir.cjs +39 -0
- package/src/claude/hooks/lib/runtime-dir.cjs +49 -0
- package/src/claude/hooks/lib/secret-keywords.cjs +42 -0
- package/src/claude/hooks/precompact.cjs +106 -0
- package/src/claude/hooks/privacy-block.cjs +4 -2
- package/src/claude/hooks/rules.cjs +5 -3
- package/src/claude/hooks/secret-output-guardrail.cjs +44 -0
- package/src/claude/hooks/semantic-review-authority.cjs +6 -4
- package/src/claude/hooks/session.cjs +37 -9
- package/src/claude/hooks/spec-gate.cjs +21 -11
- package/src/claude/hooks/spec-state.cjs +11 -7
- package/src/claude/hooks/state.cjs +7 -5
- package/src/claude/hooks/task-scaffold-guard.cjs +30 -9
- package/src/claude/hooks/usage.cjs +6 -5
- package/src/claude/migration-manifest.json +31 -15
- package/src/claude/output-styles/coding-level-0-eli5.md +103 -0
- package/src/claude/output-styles/coding-level-1-junior.md +124 -0
- package/src/claude/output-styles/coding-level-2-mid.md +146 -0
- package/src/claude/output-styles/coding-level-3-senior.md +148 -0
- package/src/claude/output-styles/coding-level-4-lead.md +159 -0
- package/src/claude/output-styles/coding-level-5-god.md +91 -0
- package/src/claude/references/debugger/core-philosophy.md +5 -3
- package/src/claude/references/debugger/frontend-verification.md +2 -2
- package/src/claude/references/debugger/log-ci-analysis.md +13 -1
- package/src/claude/references/debugger/parallel-agent-hydration.md +19 -34
- package/src/claude/references/debugger/performance-diagnostics.md +2 -2
- package/src/claude/references/debugger/root-cause-tracing.md +37 -6
- package/src/claude/references/debugger/side-effect-gate.md +3 -1
- package/src/claude/references/debugger/verification-protocol.md +13 -12
- package/src/claude/rules/orchestrator.md +7 -1
- package/src/claude/rules/process-management.md +39 -0
- package/src/claude/rules/review-audit-self-decision.md +48 -0
- package/src/claude/rules/skill-domain-routing.md +26 -24
- package/src/claude/rules/skill-workflow-routing.md +22 -14
- package/src/claude/rules/state-sync.md +7 -1
- package/src/claude/rules/workflow.md +5 -3
- package/src/claude/runtime.json +1 -0
- package/src/claude/runtime.schema.json +205 -0
- package/src/claude/scripts/generate-skill-catalog.cjs +156 -122
- package/src/claude/scripts/provenance.cjs +29 -9
- package/src/claude/scripts/spec-receipt.cjs +65 -4
- package/src/claude/scripts/workflow-policy.cjs +1 -1
- package/src/claude/settings/settings.json +16 -0
- package/src/claude/skills/agent-browser/SKILL.md +1 -1
- package/src/claude/skills/ai-multimodal/SKILL.md +1 -1
- package/src/claude/skills/brainstorm/SKILL.md +193 -172
- package/src/claude/skills/brainstorm/references/question-framework.md +105 -167
- package/src/claude/skills/chrome-devtools/SKILL.md +1 -1
- package/src/claude/skills/code-review/SKILL.md +43 -25
- package/src/claude/skills/code-review/references/spec-compliance-review.md +3 -4
- package/src/claude/skills/code-review/references/verification-gate.md +1 -1
- package/src/claude/skills/debug/SKILL.md +48 -19
- package/src/claude/skills/delegate/SKILL.md +1 -1
- package/src/claude/skills/develop/SKILL.md +92 -65
- package/src/claude/skills/develop/references/parallel-waves.md +36 -63
- package/src/claude/skills/develop/references/quality-gate.md +31 -4
- package/src/claude/skills/develop/references/subagent-patterns.md +21 -7
- package/src/claude/skills/docs/SKILL.md +42 -23
- package/src/claude/skills/docs/references/init-workflow.md +4 -4
- package/src/claude/skills/docs/references/reconstruct-workflow.md +6 -6
- package/src/claude/skills/docs/references/standard-docs-workflow.md +6 -2
- package/src/claude/skills/docs/references/summarize-workflow.md +2 -2
- package/src/claude/skills/docs/references/update-workflow.md +9 -7
- package/src/claude/skills/docs/templates/requirements-as-is.md +1 -1
- package/src/claude/skills/docx/SKILL.md +1 -1
- package/src/claude/skills/git/SKILL.md +1 -1
- package/src/claude/skills/git/references/commit-protocols.md +1 -1
- package/src/claude/skills/git/references/finish-branch.md +1 -1
- package/src/claude/skills/hotfix/SKILL.md +159 -170
- package/src/claude/skills/hotfix/references/diagnosis-protocol.md +14 -9
- package/src/claude/skills/hotfix/references/parallel-patterns.md +27 -13
- package/src/claude/skills/hotfix/references/prevention-gate.md +5 -0
- package/src/claude/skills/hotfix/references/review-cycle.md +21 -15
- package/src/claude/skills/hotfix/references/workflow-specialized.md +53 -21
- package/src/claude/skills/inspect/SKILL.md +55 -46
- package/src/claude/skills/inspect/references/internal-inspection.md +21 -5
- package/src/claude/skills/loop/SKILL.md +114 -0
- package/src/claude/skills/loop/references/bounded-loop-protocol.md +104 -0
- package/src/claude/skills/loop/references/metric-and-guard-contract.md +76 -0
- package/src/claude/skills/pdf/SKILL.md +1 -1
- package/src/claude/skills/pptx/SKILL.md +1 -1
- package/src/claude/skills/question/SKILL.md +16 -13
- package/src/claude/skills/research/SKILL.md +70 -43
- package/src/claude/skills/route/SKILL.md +94 -0
- package/src/claude/skills/route/references/agent-timing.md +46 -0
- package/src/claude/skills/route/references/chaining-patterns.md +53 -0
- package/src/claude/skills/route/references/task-taxonomy.md +48 -0
- package/src/claude/skills/specs/SKILL.md +51 -71
- package/src/claude/skills/specs/references/review.md +11 -8
- package/src/claude/skills/specs/references/templates.md +34 -18
- package/src/claude/skills/specs/templates/requirements-init.md +1 -1
- package/src/claude/skills/specs/templates/research.md +2 -2
- package/src/claude/skills/sync/SKILL.md +6 -6
- package/src/claude/skills/sync/references/sync-protocols.md +1 -1
- package/src/claude/skills/test/SKILL.md +120 -120
- package/src/claude/skills/test/references/execution-strategy.md +208 -361
- package/src/claude/skills/test/references/failure-triage.md +55 -121
- package/src/claude/skills/test/references/test-memory.md +20 -34
- package/src/claude/skills/ui-ux-pro-max/SKILL.md +1 -1
- package/src/claude/skills/web-testing/SKILL.md +1 -1
- package/src/claude/skills/xlsx/SKILL.md +1 -1
- package/src/claude/status.cjs +135 -33
- package/src/codex/AGENTS.md +14 -4
- package/src/codex/hooks/docs-sync.cjs +8 -3
- package/src/codex/hooks/lib/hook-context.cjs +18 -4
- package/src/codex/hooks/rules.cjs +29 -1
- package/src/codex/hooks/secret-output-guardrail.cjs +30 -0
- package/src/codex/hooks/spec-gate.cjs +3 -8
- package/src/codex/hooks/spec-state.cjs +3 -2
- package/src/codex/hooks.json +5 -0
- package/src/codex/rules/state-sync.md +7 -1
- package/src/codex/runtime.json +2 -0
- package/src/common/.env.example +1 -1
- package/src/omp/extensions/cafekit-bridge.mjs +233 -0
- package/src/omp/hooks/privacy-block.cjs +250 -0
- package/src/omp/runtime.json +33 -0
- package/bin/lib/rtk-run.js +0 -28
- package/bin/phases/setup-rtk.js +0 -159
- package/src/claude/skills/backend-development/SKILL.md +0 -101
- package/src/claude/skills/backend-development/references/backend-api-design.md +0 -495
- package/src/claude/skills/backend-development/references/backend-architecture.md +0 -454
- package/src/claude/skills/backend-development/references/backend-authentication.md +0 -338
- package/src/claude/skills/backend-development/references/backend-code-quality.md +0 -659
- package/src/claude/skills/backend-development/references/backend-debugging.md +0 -904
- package/src/claude/skills/backend-development/references/backend-devops.md +0 -491
- package/src/claude/skills/backend-development/references/backend-mindset.md +0 -387
- package/src/claude/skills/backend-development/references/backend-performance.md +0 -397
- package/src/claude/skills/backend-development/references/backend-security.md +0 -342
- package/src/claude/skills/backend-development/references/backend-technologies.md +0 -256
- package/src/claude/skills/backend-development/references/backend-testing.md +0 -429
- package/src/claude/skills/devops/.env.example +0 -76
- package/src/claude/skills/devops/SKILL.md +0 -102
- package/src/claude/skills/devops/references/browser-rendering.md +0 -305
- package/src/claude/skills/devops/references/cloudflare-d1-kv.md +0 -123
- package/src/claude/skills/devops/references/cloudflare-platform.md +0 -271
- package/src/claude/skills/devops/references/cloudflare-r2-storage.md +0 -280
- package/src/claude/skills/devops/references/cloudflare-workers-advanced.md +0 -312
- package/src/claude/skills/devops/references/cloudflare-workers-apis.md +0 -309
- package/src/claude/skills/devops/references/cloudflare-workers-basics.md +0 -418
- package/src/claude/skills/devops/references/docker-basics.md +0 -297
- package/src/claude/skills/devops/references/docker-compose.md +0 -292
- package/src/claude/skills/devops/references/gcloud-platform.md +0 -297
- package/src/claude/skills/devops/references/gcloud-services.md +0 -304
- package/src/claude/skills/devops/references/kubernetes-basics.md +0 -95
- package/src/claude/skills/devops/references/kubernetes-helm-advanced.md +0 -70
- package/src/claude/skills/devops/references/kubernetes-helm.md +0 -81
- package/src/claude/skills/devops/references/kubernetes-kubectl.md +0 -74
- package/src/claude/skills/devops/references/kubernetes-security-advanced.md +0 -94
- package/src/claude/skills/devops/references/kubernetes-security.md +0 -89
- package/src/claude/skills/devops/references/kubernetes-troubleshooting-advanced.md +0 -74
- package/src/claude/skills/devops/references/kubernetes-troubleshooting.md +0 -49
- package/src/claude/skills/devops/references/kubernetes-workflows-advanced.md +0 -75
- package/src/claude/skills/devops/references/kubernetes-workflows.md +0 -76
- package/src/claude/skills/devops/scripts/cloudflare_deploy.py +0 -269
- package/src/claude/skills/devops/scripts/docker_optimize.py +0 -332
- package/src/claude/skills/devops/scripts/requirements.txt +0 -20
- package/src/claude/skills/devops/scripts/tests/requirements.txt +0 -3
- package/src/claude/skills/devops/scripts/tests/test_cloudflare_deploy.py +0 -285
- package/src/claude/skills/devops/scripts/tests/test_docker_optimize.py +0 -436
- package/src/claude/skills/frontend-design/SKILL.md +0 -135
- package/src/claude/skills/frontend-design/references/ai-multimodal-overview.md +0 -165
- package/src/claude/skills/frontend-design/references/analysis-best-practices.md +0 -80
- package/src/claude/skills/frontend-design/references/analysis-prompts.md +0 -141
- package/src/claude/skills/frontend-design/references/analysis-techniques.md +0 -118
- package/src/claude/skills/frontend-design/references/animejs.md +0 -396
- package/src/claude/skills/frontend-design/references/anti-slop-rules.md +0 -103
- package/src/claude/skills/frontend-design/references/asset-generation.md +0 -337
- package/src/claude/skills/frontend-design/references/bento-motion-engine.md +0 -142
- package/src/claude/skills/frontend-design/references/design-extraction-overview.md +0 -71
- package/src/claude/skills/frontend-design/references/extraction-best-practices.md +0 -141
- package/src/claude/skills/frontend-design/references/extraction-output-templates.md +0 -162
- package/src/claude/skills/frontend-design/references/extraction-prompts.md +0 -127
- package/src/claude/skills/frontend-design/references/magicui-components.md +0 -129
- package/src/claude/skills/frontend-design/references/performance-guardrails.md +0 -169
- package/src/claude/skills/frontend-design/references/premium-design-patterns.md +0 -93
- package/src/claude/skills/frontend-design/references/redesign-audit-checklist.md +0 -114
- package/src/claude/skills/frontend-design/references/technical-accessibility.md +0 -119
- package/src/claude/skills/frontend-design/references/technical-best-practices.md +0 -97
- package/src/claude/skills/frontend-design/references/technical-optimization.md +0 -44
- package/src/claude/skills/frontend-design/references/technical-overview.md +0 -90
- package/src/claude/skills/frontend-design/references/technical-workflows.md +0 -150
- package/src/claude/skills/frontend-design/references/visual-analysis-overview.md +0 -95
- package/src/claude/skills/frontend-design/references/workflow-3d.md +0 -102
- package/src/claude/skills/frontend-design/references/workflow-describe.md +0 -87
- package/src/claude/skills/frontend-design/references/workflow-immersive.md +0 -87
- package/src/claude/skills/frontend-design/references/workflow-quick.md +0 -57
- package/src/claude/skills/frontend-design/references/workflow-screenshot.md +0 -63
- package/src/claude/skills/frontend-design/references/workflow-video.md +0 -74
- package/src/claude/skills/frontend-development/SKILL.md +0 -406
- package/src/claude/skills/frontend-development/resources/common-patterns.md +0 -331
- package/src/claude/skills/frontend-development/resources/complete-examples.md +0 -872
- package/src/claude/skills/frontend-development/resources/component-patterns.md +0 -502
- package/src/claude/skills/frontend-development/resources/data-fetching.md +0 -767
- package/src/claude/skills/frontend-development/resources/file-organization.md +0 -502
- package/src/claude/skills/frontend-development/resources/loading-and-error-states.md +0 -501
- package/src/claude/skills/frontend-development/resources/performance.md +0 -406
- package/src/claude/skills/frontend-development/resources/routing-guide.md +0 -364
- package/src/claude/skills/frontend-development/resources/styling-guide.md +0 -428
- package/src/claude/skills/frontend-development/resources/typescript-standards.md +0 -418
- package/src/claude/skills/mobile-development/SKILL.md +0 -218
- package/src/claude/skills/mobile-development/references/mobile-android.md +0 -604
- package/src/claude/skills/mobile-development/references/mobile-best-practices.md +0 -544
- package/src/claude/skills/mobile-development/references/mobile-debugging.md +0 -1089
- package/src/claude/skills/mobile-development/references/mobile-frameworks.md +0 -465
- package/src/claude/skills/mobile-development/references/mobile-ios.md +0 -496
- package/src/claude/skills/mobile-development/references/mobile-mindset.md +0 -542
- package/src/claude/skills/react-best-practices/AGENTS.md +0 -2249
- package/src/claude/skills/react-best-practices/README.md +0 -123
- package/src/claude/skills/react-best-practices/SKILL.md +0 -128
- package/src/claude/skills/react-best-practices/metadata.json +0 -15
- package/src/claude/skills/react-best-practices/rules/_sections.md +0 -46
- package/src/claude/skills/react-best-practices/rules/_template.md +0 -28
- package/src/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
- package/src/claude/skills/react-best-practices/rules/advanced-use-latest.md +0 -49
- package/src/claude/skills/react-best-practices/rules/async-api-routes.md +0 -38
- package/src/claude/skills/react-best-practices/rules/async-defer-await.md +0 -80
- package/src/claude/skills/react-best-practices/rules/async-dependencies.md +0 -36
- package/src/claude/skills/react-best-practices/rules/async-parallel.md +0 -28
- package/src/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
- package/src/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
- package/src/claude/skills/react-best-practices/rules/bundle-conditional.md +0 -31
- package/src/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
- package/src/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
- package/src/claude/skills/react-best-practices/rules/bundle-preload.md +0 -50
- package/src/claude/skills/react-best-practices/rules/client-event-listeners.md +0 -74
- package/src/claude/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
- package/src/claude/skills/react-best-practices/rules/js-batch-dom-css.md +0 -82
- package/src/claude/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
- package/src/claude/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
- package/src/claude/skills/react-best-practices/rules/js-cache-storage.md +0 -70
- package/src/claude/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
- package/src/claude/skills/react-best-practices/rules/js-early-exit.md +0 -50
- package/src/claude/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
- package/src/claude/skills/react-best-practices/rules/js-index-maps.md +0 -37
- package/src/claude/skills/react-best-practices/rules/js-length-check-first.md +0 -49
- package/src/claude/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
- package/src/claude/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
- package/src/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
- package/src/claude/skills/react-best-practices/rules/rendering-activity.md +0 -26
- package/src/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
- package/src/claude/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
- package/src/claude/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
- package/src/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
- package/src/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
- package/src/claude/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
- package/src/claude/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
- package/src/claude/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
- package/src/claude/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
- package/src/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
- package/src/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
- package/src/claude/skills/react-best-practices/rules/rerender-memo.md +0 -44
- package/src/claude/skills/react-best-practices/rules/rerender-transitions.md +0 -40
- package/src/claude/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
- package/src/claude/skills/react-best-practices/rules/server-cache-lru.md +0 -41
- package/src/claude/skills/react-best-practices/rules/server-cache-react.md +0 -26
- package/src/claude/skills/react-best-practices/rules/server-parallel-fetching.md +0 -79
- package/src/claude/skills/react-best-practices/rules/server-serialization.md +0 -38
|
@@ -1,396 +0,0 @@
|
|
|
1
|
-
# Anime.js v4 Reference Guide for AI Assistants
|
|
2
|
-
|
|
3
|
-
## π¨ CRITICAL: ALWAYS USE ANIME.JS V4 SYNTAX π¨
|
|
4
|
-
|
|
5
|
-
**This project uses Anime.js v4.x.x - DO NOT use v3 syntax under any circumstances**
|
|
6
|
-
|
|
7
|
-
**If you're about to write `import anime from 'animejs'` - STOP!**
|
|
8
|
-
**That's v3. This project uses v4. Use the correct import below.**
|
|
9
|
-
|
|
10
|
-
## π Quick Start - Essential Setup
|
|
11
|
-
|
|
12
|
-
### 1. Correct v4 Import (REQUIRED)
|
|
13
|
-
```javascript
|
|
14
|
-
// β
CORRECT v4 imports
|
|
15
|
-
import { animate, createTimeline, stagger, utils, svg, eases, engine } from 'animejs';
|
|
16
|
-
|
|
17
|
-
// β WRONG v3 import - NEVER USE THIS
|
|
18
|
-
// import anime from 'animejs';
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
### 2. Configure Time Units to Seconds (SET ONCE IN APP ENTRY POINT)
|
|
22
|
-
```javascript
|
|
23
|
-
// β οΈ IMPORTANT: Set this ONLY ONCE in your app's main entry point
|
|
24
|
-
// For React: App.js/App.tsx or index.js/index.tsx
|
|
25
|
-
// For Vue: main.js/main.ts
|
|
26
|
-
// For vanilla JS: The main script file that loads first
|
|
27
|
-
|
|
28
|
-
import { engine } from 'animejs';
|
|
29
|
-
|
|
30
|
-
// Set ONLY in the app's entry point, NOT in components
|
|
31
|
-
engine.timeUnit = 's';
|
|
32
|
-
|
|
33
|
-
// Now ALL durations use seconds everywhere: 1 = 1 second, 0.5 = 500ms
|
|
34
|
-
// DO NOT set this in individual components - it's a global setting!
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
### 3. Single-Line Format for Simple Animations (REQUIRED)
|
|
38
|
-
```javascript
|
|
39
|
-
// β
GOOD - Clean, readable, one line for simple tweens
|
|
40
|
-
animate('.element', { x: 250, duration: 1, ease: 'outQuad' });
|
|
41
|
-
|
|
42
|
-
// β BAD - Unnecessary multi-line for simple tweens
|
|
43
|
-
animate('.element', {
|
|
44
|
-
x: 250,
|
|
45
|
-
duration: 1,
|
|
46
|
-
ease: 'outQuad'
|
|
47
|
-
});
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## β
Quick Validation Checklist
|
|
51
|
-
|
|
52
|
-
Before generating anime.js code, verify:
|
|
53
|
-
- [ ] Using `import { animate, ... } from 'animejs'` NOT `import anime`
|
|
54
|
-
- [ ] Set `engine.timeUnit = 's'` ONLY ONCE in app entry point (NOT in components)
|
|
55
|
-
- [ ] Using seconds for all durations (1 = 1 second)
|
|
56
|
-
- [ ] Simple animations on ONE LINE
|
|
57
|
-
- [ ] Using `animate()` NOT `anime()`
|
|
58
|
-
- [ ] Using `createTimeline()` NOT `anime.timeline()`
|
|
59
|
-
- [ ] Using `ease:` NOT `easing:`
|
|
60
|
-
- [ ] Using `to:` for values, NOT `value:`
|
|
61
|
-
- [ ] Using `on` prefix for callbacks (onUpdate, onComplete)
|
|
62
|
-
- [ ] Using `loop` and `alternate` NOT `direction`
|
|
63
|
-
- [ ] Using correct v4 stagger syntax with `stagger()`
|
|
64
|
-
- [ ] Using shorthand properties (x, y, z) when possible
|
|
65
|
-
|
|
66
|
-
## π― Core API - Most Common Patterns
|
|
67
|
-
|
|
68
|
-
### Basic Animation (single line for simple tweens)
|
|
69
|
-
```javascript
|
|
70
|
-
// Simple tween - ALWAYS one line
|
|
71
|
-
animate('.element', { x: 250, rotate: 180, duration: 0.8, ease: 'inOutQuad' });
|
|
72
|
-
|
|
73
|
-
// Fade in - one line
|
|
74
|
-
animate('.element', { opacity: [0, 1], y: [20, 0], duration: 0.6, ease: 'outQuad' });
|
|
75
|
-
|
|
76
|
-
// Scale bounce - one line
|
|
77
|
-
animate('.element', { scale: [0, 1], duration: 0.8, ease: 'outElastic(1, 0.5)' });
|
|
78
|
-
|
|
79
|
-
// Infinite loop - one line
|
|
80
|
-
animate('.element', { rotate: 360, duration: 2, loop: true, ease: 'linear' });
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### Timeline Creation
|
|
84
|
-
```javascript
|
|
85
|
-
const tl = createTimeline({ defaults: { duration: 1, ease: 'outQuad' } });
|
|
86
|
-
|
|
87
|
-
tl.add('.element1', { x: 250 })
|
|
88
|
-
.add('.element2', { y: 100 }, '+=0.2') // 0.2s after previous
|
|
89
|
-
.add('.element3', { rotate: 180 }, '<'); // at start of previous
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### Stagger Animations (single line)
|
|
93
|
-
```javascript
|
|
94
|
-
animate('.elements', { x: 250, delay: stagger(0.1) }); // 0.1s between each
|
|
95
|
-
animate('.elements', { x: 250, delay: stagger(0.1, { from: 'center' }) });
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
## β Common AI Mistakes to Avoid
|
|
99
|
-
|
|
100
|
-
### MISTAKE #1: Using v3 Import Pattern
|
|
101
|
-
```javascript
|
|
102
|
-
// β WRONG - This is v3
|
|
103
|
-
import anime from 'animejs';
|
|
104
|
-
anime({ targets: '.element', translateX: 250 });
|
|
105
|
-
|
|
106
|
-
// β
CORRECT - Always use v4
|
|
107
|
-
import { animate } from 'animejs';
|
|
108
|
-
animate('.element', { x: 250 });
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### MISTAKE #2: Using 'targets' Property
|
|
112
|
-
```javascript
|
|
113
|
-
// β WRONG - 'targets' is v3
|
|
114
|
-
animate({ targets: '.element', translateX: 250 });
|
|
115
|
-
|
|
116
|
-
// β
CORRECT - First parameter is the target
|
|
117
|
-
animate('.element', { x: 250 });
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
### MISTAKE #3: Using 'easing' Instead of 'ease'
|
|
121
|
-
```javascript
|
|
122
|
-
// β WRONG
|
|
123
|
-
animate('.element', { x: 250, easing: 'easeInOutQuad' });
|
|
124
|
-
|
|
125
|
-
// β
CORRECT
|
|
126
|
-
animate('.element', { x: 250, ease: 'inOutQuad' });
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### MISTAKE #4: Using 'value' for Animation Values
|
|
130
|
-
```javascript
|
|
131
|
-
// β WRONG - 'value' is v3
|
|
132
|
-
animate('.element', { x: { value: 250 } });
|
|
133
|
-
|
|
134
|
-
// β
CORRECT - Use 'to' for values
|
|
135
|
-
animate('.element', { x: { to: 250 } });
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
### MISTAKE #5: Wrong Timeline Syntax
|
|
139
|
-
```javascript
|
|
140
|
-
// β WRONG - anime.timeline() is v3
|
|
141
|
-
const tl = anime.timeline();
|
|
142
|
-
|
|
143
|
-
// β
CORRECT - Use createTimeline
|
|
144
|
-
import { createTimeline } from 'animejs';
|
|
145
|
-
const tl = createTimeline();
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
## π Property Syntax Reference (v3 β v4)
|
|
149
|
-
|
|
150
|
-
### Animation Values
|
|
151
|
-
```javascript
|
|
152
|
-
// β
v4: Use 'to' for target values
|
|
153
|
-
{ opacity: { to: 0.5 } }
|
|
154
|
-
{ x: { to: [0, 100] } }
|
|
155
|
-
|
|
156
|
-
// β v3: DON'T use 'value'
|
|
157
|
-
// { opacity: { value: 0.5 } }
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### Easing Functions
|
|
161
|
-
```javascript
|
|
162
|
-
// β
v4: Use 'ease' (no 'ease' prefix)
|
|
163
|
-
{ ease: 'inOutQuad' }
|
|
164
|
-
{ ease: 'outElastic(1, 0.5)' }
|
|
165
|
-
{ ease: 'cubicBezier(0.4, 0, 0.2, 1)' }
|
|
166
|
-
|
|
167
|
-
// β v3: DON'T use 'easing' or 'ease' prefix
|
|
168
|
-
// { easing: 'easeInOutQuad' }
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### Direction & Looping
|
|
172
|
-
```javascript
|
|
173
|
-
// β
v4
|
|
174
|
-
{
|
|
175
|
-
loop: true, // infinite loop
|
|
176
|
-
loop: 3, // loop 3 times
|
|
177
|
-
alternate: true, // alternate direction
|
|
178
|
-
reversed: true // play in reverse
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
// β v3: DON'T use 'direction'
|
|
182
|
-
// { direction: 'alternate' }
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
### Transform Properties (Shorthand Preferred)
|
|
186
|
-
```javascript
|
|
187
|
-
// β
Both syntaxes work in v4:
|
|
188
|
-
animate('.element', { x: 100, y: 50, z: 25 }); // shorthand (preferred)
|
|
189
|
-
animate('.element', { translateX: 100, translateY: 50, translateZ: 25 }); // explicit
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
### Callbacks (ALL prefixed with 'on')
|
|
193
|
-
```javascript
|
|
194
|
-
// β
v4: Simple callback - keep on one line
|
|
195
|
-
animate('.element', { x: 250, duration: 1, onComplete: () => console.log('Done!') });
|
|
196
|
-
|
|
197
|
-
// β
v4: Multiple callbacks - use multi-line
|
|
198
|
-
animate('.element', {
|
|
199
|
-
x: 250,
|
|
200
|
-
duration: 1,
|
|
201
|
-
onBegin: (anim) => console.log('Started'),
|
|
202
|
-
onUpdate: (anim) => console.log('Progress:', anim.progress),
|
|
203
|
-
onComplete: (anim) => console.log('Finished')
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
// β v3: DON'T use unprefixed callbacks
|
|
207
|
-
// { update: () => {}, complete: () => {} }
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
## π Code Formatting Guidelines
|
|
211
|
-
|
|
212
|
-
### ALWAYS Use Single-Line Format for Simple Animations
|
|
213
|
-
**This is mandatory for readability** - Use for animations with β€4 properties:
|
|
214
|
-
```javascript
|
|
215
|
-
// β
GOOD - Clean, readable, one line
|
|
216
|
-
animate('.element', { x: 250, duration: 1, ease: 'outQuad' });
|
|
217
|
-
animate('.box', { opacity: 0.5, scale: 0.8, duration: 0.3 });
|
|
218
|
-
|
|
219
|
-
// β BAD - Unnecessary multi-line for simple tweens
|
|
220
|
-
animate('.element', {
|
|
221
|
-
x: 250,
|
|
222
|
-
duration: 1,
|
|
223
|
-
ease: 'outQuad'
|
|
224
|
-
});
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
### Multi-Line Format (Only for Complex Animations)
|
|
228
|
-
Use for animations with >4 properties or callbacks:
|
|
229
|
-
```javascript
|
|
230
|
-
// Complex animation with callbacks - multi-line is appropriate
|
|
231
|
-
animate('.element', {
|
|
232
|
-
x: { to: [0, 100, 50], duration: 2 },
|
|
233
|
-
y: { to: [0, -50, 0], duration: 2 },
|
|
234
|
-
scale: [0, 1.2, 1],
|
|
235
|
-
ease: 'outElastic(1, 0.5)',
|
|
236
|
-
onComplete: () => console.log('Done!')
|
|
237
|
-
});
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
## π¨ Common Animation Patterns
|
|
241
|
-
|
|
242
|
-
### Hover Animation (single line per animation)
|
|
243
|
-
```javascript
|
|
244
|
-
element.addEventListener('mouseenter', () => animate(element, { scale: 1.1, duration: 0.3, ease: 'outQuad' }));
|
|
245
|
-
element.addEventListener('mouseleave', () => animate(element, { scale: 1, duration: 0.3, ease: 'outQuad' }));
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
### Sequential Timeline
|
|
249
|
-
```javascript
|
|
250
|
-
const tl = createTimeline({ defaults: { duration: 0.5 } });
|
|
251
|
-
tl.add('.step1', { x: 100 })
|
|
252
|
-
.add('.step2', { y: 100 })
|
|
253
|
-
.add('.step3', { scale: 2 });
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
### Scroll-triggered Animation
|
|
257
|
-
```javascript
|
|
258
|
-
import { createScrollObserver } from 'animejs';
|
|
259
|
-
|
|
260
|
-
createScrollObserver({
|
|
261
|
-
target: '.scroll-element',
|
|
262
|
-
root: document.querySelector('.scroll-container'),
|
|
263
|
-
play: () => animate('.element', { x: 250, duration: 1 }),
|
|
264
|
-
visibility: 0.5
|
|
265
|
-
});
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
## π§ Advanced Features
|
|
269
|
-
|
|
270
|
-
### SVG Animations
|
|
271
|
-
```javascript
|
|
272
|
-
import { animate, svg } from 'animejs';
|
|
273
|
-
|
|
274
|
-
// Morph path (single line)
|
|
275
|
-
animate('#path1', { d: svg.morphTo('#path2'), duration: 1 });
|
|
276
|
-
|
|
277
|
-
// Draw SVG line
|
|
278
|
-
const drawable = svg.createDrawable('.svg-path');
|
|
279
|
-
animate(drawable, { draw: '0% 100%', duration: 2 });
|
|
280
|
-
|
|
281
|
-
// Motion path (single line for simple usage)
|
|
282
|
-
const motionPath = svg.createMotionPath('#motion-path');
|
|
283
|
-
animate('.element', { x: motionPath.translateX, y: motionPath.translateY, rotate: motionPath.rotate });
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
### Utility Functions
|
|
287
|
-
```javascript
|
|
288
|
-
import { utils } from 'animejs';
|
|
289
|
-
|
|
290
|
-
// DOM selection
|
|
291
|
-
const elements = utils.$('.elements');
|
|
292
|
-
|
|
293
|
-
// Get current value
|
|
294
|
-
const currentX = utils.get('.element', 'translateX');
|
|
295
|
-
|
|
296
|
-
// Set values immediately
|
|
297
|
-
utils.set('.element', { x: 100, opacity: 0.5 });
|
|
298
|
-
|
|
299
|
-
// Remove animations
|
|
300
|
-
utils.remove('.element');
|
|
301
|
-
|
|
302
|
-
// Math utilities
|
|
303
|
-
utils.random(0, 100);
|
|
304
|
-
utils.shuffle([1, 2, 3, 4]);
|
|
305
|
-
utils.lerp(0, 100, 0.5); // 50
|
|
306
|
-
utils.clamp(150, 0, 100); // 100
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
### TypeScript Support
|
|
310
|
-
```typescript
|
|
311
|
-
import { animate, createTimeline, JSAnimation, Timeline, AnimationParams, TimelineParams } from 'animejs';
|
|
312
|
-
|
|
313
|
-
// Single line for simple animations
|
|
314
|
-
const animation: JSAnimation = animate('.element', { x: 250, duration: 1 } as AnimationParams);
|
|
315
|
-
|
|
316
|
-
const timeline: Timeline = createTimeline({ defaults: { duration: 0.8 } } as TimelineParams);
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
## β‘ Performance Tips
|
|
320
|
-
|
|
321
|
-
1. **Use transforms over position properties**
|
|
322
|
-
```javascript
|
|
323
|
-
// β
Good - uses transform
|
|
324
|
-
animate('.element', { x: 100 });
|
|
325
|
-
|
|
326
|
-
// β Avoid - triggers layout
|
|
327
|
-
animate('.element', { left: 100 });
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
2. **Batch animations in timelines**
|
|
331
|
-
```javascript
|
|
332
|
-
// β
Good - single timeline
|
|
333
|
-
const tl = createTimeline();
|
|
334
|
-
elements.forEach(el => tl.add(el, { x: 100 }));
|
|
335
|
-
|
|
336
|
-
// β Avoid - multiple animations
|
|
337
|
-
elements.forEach(el => animate(el, { x: 100 }));
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
3. **Use will-change CSS property for complex animations**
|
|
341
|
-
```css
|
|
342
|
-
.animated-element {
|
|
343
|
-
will-change: transform, opacity;
|
|
344
|
-
}
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
## π« How to Identify V3 Code (DON'T USE)
|
|
348
|
-
|
|
349
|
-
If you see ANY of these patterns, it's v3 and MUST be updated:
|
|
350
|
-
|
|
351
|
-
```javascript
|
|
352
|
-
// All of these are V3 - NEVER USE:
|
|
353
|
-
anime({ ... })
|
|
354
|
-
anime.timeline()
|
|
355
|
-
anime.stagger()
|
|
356
|
-
anime.random()
|
|
357
|
-
anime.remove()
|
|
358
|
-
anime.get()
|
|
359
|
-
anime.set()
|
|
360
|
-
anime.running
|
|
361
|
-
{ targets: '...' }
|
|
362
|
-
{ easing: '...' }
|
|
363
|
-
{ value: ... }
|
|
364
|
-
{ direction: 'alternate' }
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
## π‘ AI Code Generation Rules
|
|
368
|
-
|
|
369
|
-
When asked to create animations with anime.js:
|
|
370
|
-
|
|
371
|
-
1. **ONLY** set `engine.timeUnit = 's'` ONCE in the app's main entry point (App.js, main.js, index.js) - NEVER in components
|
|
372
|
-
2. **ALWAYS** use seconds for all durations (1 = 1 second)
|
|
373
|
-
3. **ALWAYS** format simple animations on ONE LINE
|
|
374
|
-
4. **ALWAYS** start with v4 imports
|
|
375
|
-
5. **NEVER** use `anime()` function
|
|
376
|
-
6. **ALWAYS** use `animate()` for animations
|
|
377
|
-
7. **NEVER** include `targets` property
|
|
378
|
-
8. **ALWAYS** use `ease` not `easing`
|
|
379
|
-
9. **NEVER** use `value`, use `to` instead
|
|
380
|
-
10. **ALWAYS** prefix callbacks with `on`
|
|
381
|
-
11. **NEVER** use `direction`, use `alternate` and `reversed`
|
|
382
|
-
12. **ALWAYS** use `createTimeline()` for timelines
|
|
383
|
-
13. **PREFER** shorthand (`x`) over explicit (`translateX`)
|
|
384
|
-
14. **FORMAT** short animations on single line (β€4 properties)
|
|
385
|
-
15. **NEVER** generate v3 syntax under any circumstances
|
|
386
|
-
|
|
387
|
-
## NPM Installation
|
|
388
|
-
```bash
|
|
389
|
-
npm install animejs
|
|
390
|
-
```
|
|
391
|
-
|
|
392
|
-
## Version Check
|
|
393
|
-
```javascript
|
|
394
|
-
// Current version: 4.x.x
|
|
395
|
-
// If you see any code using anime({ targets: ... }), it's v3 and needs updating!
|
|
396
|
-
```
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
# Anti-Slop Rules: Avoiding AI Design Fingerprints
|
|
2
|
-
|
|
3
|
-
These are patterns LLMs gravitate toward by default. Treat them as "overused AI defaults" β not absolute bans. Context matters. A SaaS dashboard and a personal blog have different rules.
|
|
4
|
-
|
|
5
|
-
## Typography
|
|
6
|
-
|
|
7
|
-
**Strongly prefer alternatives to:**
|
|
8
|
-
- `Inter` β ubiquitous to the point of being invisible. Prefer `Geist`, `Outfit`, `Cabinet Grotesk`, `Satoshi`, `Plus Jakarta Sans`
|
|
9
|
-
- `Roboto` / `Arial` / `Open Sans` β browser defaults with no character
|
|
10
|
-
- `Space Grotesk` β overused in "tech startup" contexts
|
|
11
|
-
|
|
12
|
-
**Alternatives:** Variable fonts, display serifs (editorial), tight grotesks (minimal SaaS), humanist sans (consumer apps)
|
|
13
|
-
|
|
14
|
-
**Avoid:**
|
|
15
|
-
- Serif fonts on dashboards/data UIs β reserve for creative/editorial work
|
|
16
|
-
- Only Regular (400) + Bold (700) β use 500/600 for subtler hierarchy
|
|
17
|
-
- Orphaned words β use `text-wrap: balance` or `text-wrap: pretty`
|
|
18
|
-
- All-caps subheaders everywhere β try lowercase italic, sentence case, small-caps
|
|
19
|
-
|
|
20
|
-
## Color
|
|
21
|
-
|
|
22
|
-
**Strongly prefer alternatives to:**
|
|
23
|
-
- AI purple/blue gradient aesthetic β the single most common LLM design fingerprint
|
|
24
|
-
- Pure `#000000` β use off-black: `#0a0a0a`, `#111`, Zinc-950, or tinted dark
|
|
25
|
-
- Oversaturated accents (saturation > 80%) β desaturate to blend elegantly
|
|
26
|
-
- Gradient text on large headers β use sparingly, never on body copy
|
|
27
|
-
|
|
28
|
-
**Principles:**
|
|
29
|
-
- Max 1 accent color per project. Remove the rest.
|
|
30
|
-
- Stick to one gray family β never mix warm and cool grays
|
|
31
|
-
- Tint shadows to match background hue (dark navy shadow on navy bg), not pure black
|
|
32
|
-
- Flat design with zero texture feels sterile β add subtle noise/grain
|
|
33
|
-
|
|
34
|
-
## Layout
|
|
35
|
-
|
|
36
|
-
**Strongly prefer alternatives to:**
|
|
37
|
-
- 3-column equal card layouts as feature rows β the most generic AI layout. Use 2-col zig-zag, asymmetric grid, horizontal scroll, or masonry
|
|
38
|
-
- Centered hero with centered H1 at high variance β try split-screen, left-aligned, or asymmetric whitespace
|
|
39
|
-
- `h-screen` for full-height sections β always use `min-h-[100dvh]` (iOS Safari viewport bug)
|
|
40
|
-
- Complex flexbox `calc()` math for grids β use CSS Grid instead
|
|
41
|
-
|
|
42
|
-
**Avoid:**
|
|
43
|
-
- Everything centered and symmetrical β break with offset margins or mixed aspect ratios
|
|
44
|
-
- Equal card heights forced by flexbox β allow variable heights or use masonry
|
|
45
|
-
- Uniform border-radius everywhere β vary: tighter on inner elements, softer on containers
|
|
46
|
-
- Missing max-width β always constrain to ~1200-1440px with auto margins
|
|
47
|
-
|
|
48
|
-
## Content (The "Jane Doe" Effect)
|
|
49
|
-
|
|
50
|
-
**Avoid:**
|
|
51
|
-
- Generic names: "John Doe", "Jane Smith", "Sarah Chan" β use realistic, diverse names
|
|
52
|
-
- Round fake numbers: `99.99%`, `50%`, `$100.00` β use organic data: `47.2%`, `$99.00`
|
|
53
|
-
- Startup slop names: "Acme", "Nexus", "SmartFlow" β invent contextual brand names
|
|
54
|
-
- AI copywriting clichΓ©s: "Elevate", "Seamless", "Unleash", "Next-Gen", "Game-changer", "Delve", "Tapestry" β write plain, specific language
|
|
55
|
-
- Lorem Ipsum β write real draft copy, even if rough
|
|
56
|
-
- Exclamation marks in success messages β be confident, not loud
|
|
57
|
-
- "Oops!" error messages β be direct: "Connection failed. Try again."
|
|
58
|
-
- Title Case On Every Single Header β use sentence case
|
|
59
|
-
|
|
60
|
-
## Visual Effects
|
|
61
|
-
|
|
62
|
-
**Strongly prefer alternatives to:**
|
|
63
|
-
- Neon/outer glows (`box-shadow` glows) β use inner borders or subtle tinted shadows instead
|
|
64
|
-
- Custom mouse cursors β outdated, hurt performance and accessibility
|
|
65
|
-
- Standard `ease-in-out` / `linear` transitions β use spring physics or custom cubic-beziers
|
|
66
|
-
|
|
67
|
-
**Allowed with care:**
|
|
68
|
-
- Gradient text β sparingly on accent elements, never on body or large headers
|
|
69
|
-
- Glassmorphism β only when it goes beyond `backdrop-blur` (add inner border + refraction shadow)
|
|
70
|
-
|
|
71
|
-
## Components
|
|
72
|
-
|
|
73
|
-
**Strongly prefer alternatives to:**
|
|
74
|
-
- Unstyled/default shadcn components β always customize radii, colors, and shadows
|
|
75
|
-
- Generic card (border + shadow + white bg) at high visual density β use spacing/dividers instead
|
|
76
|
-
- Standard Lucide/Feather icons as the only icon set β try Phosphor, Heroicons, or custom SVG for differentiation
|
|
77
|
-
- Rocketship for "Launch", shield for "Security" β avoid clichΓ© icon metaphors
|
|
78
|
-
- 3-card carousel testimonials with dots β masonry wall, embedded posts, or single rotating quote
|
|
79
|
-
- Pill-shaped "New"/"Beta" badges everywhere β try square badges or plain text labels
|
|
80
|
-
- Avatar circles exclusively β try squircles or rounded squares
|
|
81
|
-
|
|
82
|
-
## External Resources
|
|
83
|
-
|
|
84
|
-
**Avoid:**
|
|
85
|
-
- Unsplash direct links β use `https://picsum.photos/seed/{name}/800/600` or SVG UI Avatars
|
|
86
|
-
- Same avatar image for multiple users β use unique assets
|
|
87
|
-
- Stock "diverse team" photos β use real photos, candid shots, or consistent illustration style
|
|
88
|
-
|
|
89
|
-
## AI Tells: Quick Self-Check
|
|
90
|
-
|
|
91
|
-
Before shipping, scan for these instant giveaways:
|
|
92
|
-
- [ ] Inter font anywhere in the project?
|
|
93
|
-
- [ ] Purple or blue gradient as the main aesthetic?
|
|
94
|
-
- [ ] Three equal-width cards in a row?
|
|
95
|
-
- [ ] Centered hero text over a dark gradient image?
|
|
96
|
-
- [ ] "John Doe" or "Acme Corp" in any content?
|
|
97
|
-
- [ ] Round placeholder numbers (50%, $100)?
|
|
98
|
-
- [ ] "Elevate your workflow" or similar AI copy?
|
|
99
|
-
- [ ] Pure `#000000` as background?
|
|
100
|
-
- [ ] Generic spinner (no skeleton loader)?
|
|
101
|
-
- [ ] No hover/active states on buttons?
|
|
102
|
-
|
|
103
|
-
If any box is checked, the design reads as AI-generated. Address before delivery.
|