codeply-cli 0.5.5 → 0.6.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 -21
- package/THIRD_PARTY_NOTICES.md +65 -65
- package/bin/codeply.js +8 -3
- package/lib/agent.mjs +2596 -2268
- package/lib/ai.js +135 -27
- package/lib/ai.mjs +6 -6
- package/lib/apply-patch.js +217 -217
- package/lib/arity-table.json +138 -138
- package/lib/arity.js +70 -70
- package/lib/auth.mjs +6 -6
- package/lib/autopilot.js +84 -0
- package/lib/bot-mail.js +46 -0
- package/lib/bots.js +142 -15
- package/lib/brain.js +914 -0
- package/lib/call-assist.js +120 -0
- package/lib/chatgpt.js +282 -282
- package/lib/cloud-browser.mjs +143 -143
- package/lib/cloud.mjs +1396 -1312
- package/lib/commands.js +103 -103
- package/lib/computer.js +136 -0
- package/lib/design-library/assemble-artifact.mjs +21 -21
- package/lib/design-library/cleanup.mjs +45 -45
- package/lib/design-library/index.json +22379 -22379
- package/lib/design-library/make-table-data.mjs +39 -39
- package/lib/design-tools.mjs +173 -0
- package/lib/diagnostics.js +192 -192
- package/lib/dsh-acp.mjs +444 -0
- package/lib/edit-engine.js +364 -364
- package/lib/github-agent.mjs +326 -326
- package/lib/handoff.mjs +245 -0
- package/lib/history.js +78 -75
- package/lib/life-sources.js +319 -0
- package/lib/life-store.js +356 -0
- package/lib/life-triggers.js +286 -0
- package/lib/life.js +487 -0
- package/lib/mail-watch.js +3 -3
- package/lib/mcp.js +258 -258
- package/lib/native-tools.mjs +17 -5
- package/lib/oauth-connectors.js +76 -21
- package/lib/permissions.js +109 -109
- package/lib/plugins.js +356 -353
- package/lib/reach.js +67 -67
- package/lib/render-md.mjs +647 -617
- package/lib/screen.js +77 -0
- package/lib/server.mjs +458 -457
- package/lib/session-db.js +220 -220
- package/lib/share.js +208 -168
- package/lib/skills.js +4 -1
- package/lib/snapshot.js +146 -146
- package/lib/subagents.js +4 -2
- package/lib/telemetry.js +105 -105
- package/lib/terminal-hints.js +154 -154
- package/lib/textarea.mjs +264 -258
- package/lib/tools.mjs +326 -40
- package/lib/tui.mjs +1459 -1086
- package/lib/typecheck-worker.js +147 -147
- package/lib/web-tools.js +209 -209
- package/package.json +1 -1
- package/skills/SOURCE.md +58 -58
- package/skills/accessibility/SKILL.md +147 -147
- package/skills/agent-architecture-audit/SKILL.md +257 -257
- package/skills/agent-eval/SKILL.md +147 -147
- package/skills/agent-harness-construction/SKILL.md +74 -74
- package/skills/agent-introspection-debugging/SKILL.md +154 -154
- package/skills/agent-payment-x402/SKILL.md +225 -225
- package/skills/agent-self-evaluation/SKILL.md +182 -182
- package/skills/agent-self-evaluation/references/evaluation-criteria.md +71 -71
- package/skills/agent-self-evaluation/references/hook-integration.md +64 -64
- package/skills/agent-sort/SKILL.md +216 -216
- package/skills/agentic-engineering/SKILL.md +64 -64
- package/skills/agentic-os/SKILL.md +388 -388
- package/skills/ai-first-engineering/SKILL.md +52 -52
- package/skills/ai-regression-testing/SKILL.md +386 -386
- package/skills/android-clean-architecture/SKILL.md +340 -340
- package/skills/angular-developer/SKILL.md +155 -155
- package/skills/angular-developer/references/angular-animations.md +160 -160
- package/skills/angular-developer/references/angular-aria.md +410 -410
- package/skills/angular-developer/references/cli.md +86 -86
- package/skills/angular-developer/references/component-harnesses.md +59 -59
- package/skills/angular-developer/references/component-styling.md +91 -91
- package/skills/angular-developer/references/components.md +117 -117
- package/skills/angular-developer/references/creating-services.md +97 -97
- package/skills/angular-developer/references/data-resolvers.md +69 -69
- package/skills/angular-developer/references/define-routes.md +67 -67
- package/skills/angular-developer/references/defining-providers.md +72 -72
- package/skills/angular-developer/references/di-fundamentals.md +120 -120
- package/skills/angular-developer/references/e2e-testing.md +56 -56
- package/skills/angular-developer/references/effects.md +83 -83
- package/skills/angular-developer/references/hierarchical-injectors.md +43 -43
- package/skills/angular-developer/references/host-elements.md +80 -80
- package/skills/angular-developer/references/injection-context.md +63 -63
- package/skills/angular-developer/references/inputs.md +101 -101
- package/skills/angular-developer/references/linked-signal.md +59 -59
- package/skills/angular-developer/references/loading-strategies.md +61 -61
- package/skills/angular-developer/references/mcp.md +108 -108
- package/skills/angular-developer/references/navigate-to-routes.md +69 -69
- package/skills/angular-developer/references/outputs.md +86 -86
- package/skills/angular-developer/references/reactive-forms.md +122 -122
- package/skills/angular-developer/references/rendering-strategies.md +44 -44
- package/skills/angular-developer/references/resource.md +77 -77
- package/skills/angular-developer/references/route-animations.md +56 -56
- package/skills/angular-developer/references/route-guards.md +52 -52
- package/skills/angular-developer/references/router-lifecycle.md +45 -45
- package/skills/angular-developer/references/router-testing.md +87 -87
- package/skills/angular-developer/references/show-routes-with-outlets.md +68 -68
- package/skills/angular-developer/references/signal-forms.md +795 -795
- package/skills/angular-developer/references/signals-overview.md +94 -94
- package/skills/angular-developer/references/tailwind-css.md +69 -69
- package/skills/angular-developer/references/template-driven-forms.md +114 -114
- package/skills/angular-developer/references/testing-fundamentals.md +65 -65
- package/skills/api-connector-builder/SKILL.md +121 -121
- package/skills/api-design/SKILL.md +524 -524
- package/skills/architecture-decision-records/SKILL.md +180 -180
- package/skills/article-writing/SKILL.md +80 -80
- package/skills/automation-audit-ops/SKILL.md +143 -143
- package/skills/autonomous-agent-harness/SKILL.md +274 -274
- package/skills/autonomous-loops/SKILL.md +611 -611
- package/skills/backend-patterns/SKILL.md +562 -562
- package/skills/benchmark/SKILL.md +95 -95
- package/skills/benchmark-methodology/SKILL.md +191 -191
- package/skills/benchmark-optimization-loop/SKILL.md +71 -71
- package/skills/blender-motion-state-inspection/SKILL.md +165 -165
- package/skills/blueprint/SKILL.md +106 -106
- package/skills/brand-discovery/SKILL.md +145 -145
- package/skills/brand-discovery/references/10_purpose-why.md +40 -40
- package/skills/brand-discovery/references/20_positioning.md +44 -44
- package/skills/brand-discovery/references/30_audience-niche.md +52 -52
- package/skills/brand-discovery/references/40_personality-archetype.md +57 -57
- package/skills/brand-discovery/references/50_voice-tone.md +59 -59
- package/skills/brand-discovery/references/60_narrative-story.md +50 -50
- package/skills/brand-discovery/references/70_founder-tension.md +49 -49
- package/skills/brand-discovery/references/90_SYNTHESIS.md +133 -133
- package/skills/brand-voice/SKILL.md +98 -98
- package/skills/brand-voice/references/voice-profile-schema.md +55 -55
- package/skills/browser-qa/SKILL.md +105 -105
- package/skills/bun-runtime/SKILL.md +85 -85
- package/skills/canary-watch/SKILL.md +108 -108
- package/skills/carrier-relationship-management/SKILL.md +212 -212
- package/skills/cisco-ios-patterns/SKILL.md +164 -164
- package/skills/ck/SKILL.md +148 -148
- package/skills/claude-devfleet/SKILL.md +112 -112
- package/skills/click-path-audit/SKILL.md +245 -245
- package/skills/clickhouse-io/SKILL.md +445 -445
- package/skills/code-tour/SKILL.md +254 -254
- package/skills/codebase-onboarding/SKILL.md +234 -234
- package/skills/codehealth-mcp/SKILL.md +167 -167
- package/skills/codeply-taste/LICENSE +21 -0
- package/skills/codeply-taste/SKILL.md +100 -0
- package/skills/codeply-taste/SOURCE.md +10 -0
- package/skills/codeply-taste/assets/base.css +100 -0
- package/skills/codeply-taste/assets/base.js +37 -0
- package/skills/codeply-taste/library/directions.json +1078 -0
- package/skills/codeply-taste/library/heroes.json +894 -0
- package/skills/codeply-taste/library/motions.json +57 -0
- package/skills/codeply-taste/library/palettes.json +1485 -0
- package/skills/codeply-taste/library/photos.json +7240 -0
- package/skills/codeply-taste/library/sections.json +4136 -0
- package/skills/codeply-taste/library/sites.json +7274 -0
- package/skills/codeply-taste/library/type.json +2024 -0
- package/skills/codeply-taste/references/colour.md +141 -0
- package/skills/codeply-taste/references/copy.md +177 -0
- package/skills/codeply-taste/references/critique.md +171 -0
- package/skills/codeply-taste/references/imagery.md +377 -0
- package/skills/codeply-taste/references/layout.md +178 -0
- package/skills/codeply-taste/references/motion.md +292 -0
- package/skills/codeply-taste/references/research.md +306 -0
- package/skills/codeply-taste/references/tells.md +115 -0
- package/skills/codeply-taste/references/type.md +170 -0
- package/skills/codeply-taste/scripts/assets.mjs +865 -0
- package/skills/codeply-taste/scripts/draw.mjs +525 -0
- package/skills/codeply-taste/scripts/inspect.mjs +205 -0
- package/skills/codeply-taste/scripts/lib/cdp.mjs +205 -0
- package/skills/codeply-taste/scripts/lib/probe.mjs +569 -0
- package/skills/codeply-taste/scripts/lib/rules.mjs +137 -0
- package/skills/codeply-taste/scripts/lint.mjs +108 -0
- package/skills/coding-standards/SKILL.md +551 -551
- package/skills/competitive-platform-analysis/SKILL.md +214 -214
- package/skills/competitive-report-structure/SKILL.md +162 -162
- package/skills/compose-multiplatform-patterns/SKILL.md +300 -300
- package/skills/config-gc/SKILL.md +120 -120
- package/skills/configure-ecc/SKILL.md +385 -385
- package/skills/connections-optimizer/SKILL.md +190 -190
- package/skills/content-engine/SKILL.md +132 -132
- package/skills/content-hash-cache-pattern/SKILL.md +162 -162
- package/skills/context-budget/SKILL.md +136 -136
- package/skills/continuous-agent-loop/SKILL.md +46 -46
- package/skills/continuous-learning/SKILL.md +132 -132
- package/skills/continuous-learning-v2/SKILL.md +361 -361
- package/skills/contract-first/SKILL.md +287 -287
- package/skills/cost-aware-llm-pipeline/SKILL.md +184 -184
- package/skills/cost-tracking/SKILL.md +97 -97
- package/skills/council/SKILL.md +204 -204
- package/skills/cpp-coding-standards/SKILL.md +724 -724
- package/skills/cpp-testing/SKILL.md +325 -325
- package/skills/crosspost/SKILL.md +112 -112
- package/skills/csharp-testing/SKILL.md +322 -322
- package/skills/customer-billing-ops/SKILL.md +141 -141
- package/skills/customs-trade-compliance/SKILL.md +263 -263
- package/skills/dart-flutter-patterns/SKILL.md +564 -564
- package/skills/dashboard-builder/SKILL.md +109 -109
- package/skills/data-scraper-agent/SKILL.md +765 -765
- package/skills/data-throughput-accelerator/SKILL.md +74 -74
- package/skills/database-migrations/SKILL.md +430 -430
- package/skills/deep-research/SKILL.md +160 -160
- package/skills/defi-amm-security/SKILL.md +167 -167
- package/skills/delivery-gate/SKILL.md +126 -126
- package/skills/deployment-patterns/SKILL.md +428 -428
- package/skills/design-system/SKILL.md +83 -83
- package/skills/django-celery/SKILL.md +458 -458
- package/skills/django-patterns/SKILL.md +735 -735
- package/skills/django-security/SKILL.md +644 -644
- package/skills/django-tdd/SKILL.md +730 -730
- package/skills/django-verification/SKILL.md +470 -470
- package/skills/dmux-workflows/SKILL.md +192 -192
- package/skills/docker-patterns/SKILL.md +365 -365
- package/skills/documentation-lookup/SKILL.md +91 -91
- package/skills/dotnet-patterns/SKILL.md +322 -322
- package/skills/dynamic-workflow-mode/SKILL.md +124 -124
- package/skills/e2e-testing/SKILL.md +327 -327
- package/skills/ecc-guide/SKILL.md +190 -190
- package/skills/ecc-recipes/SKILL.md +149 -149
- package/skills/ecc-tools-cost-audit/SKILL.md +161 -161
- package/skills/email-ops/SKILL.md +122 -122
- package/skills/energy-procurement/SKILL.md +228 -228
- package/skills/enterprise-agent-ops/SKILL.md +51 -51
- package/skills/error-handling/SKILL.md +377 -377
- package/skills/eval-harness/SKILL.md +271 -271
- package/skills/evm-token-decimals/SKILL.md +131 -131
- package/skills/exa-search/SKILL.md +108 -108
- package/skills/fal-ai-media/SKILL.md +289 -289
- package/skills/fastapi-patterns/SKILL.md +514 -514
- package/skills/finance-billing-ops/SKILL.md +128 -128
- package/skills/flox-environments/SKILL.md +497 -497
- package/skills/flutter-dart-code-review/SKILL.md +436 -436
- package/skills/foundation-models-on-device/SKILL.md +243 -243
- package/skills/frontend-a11y/SKILL.md +446 -446
- package/skills/frontend-design-direction/SKILL.md +93 -93
- package/skills/frontend-patterns/SKILL.md +657 -657
- package/skills/frontend-slides/SKILL.md +185 -185
- package/skills/fsharp-testing/SKILL.md +281 -281
- package/skills/gan-style-harness/SKILL.md +279 -279
- package/skills/gateguard/SKILL.md +133 -133
- package/skills/generating-python-installer/SKILL.md +820 -820
- package/skills/git-workflow/SKILL.md +716 -716
- package/skills/github-ops/SKILL.md +145 -145
- package/skills/golang-patterns/SKILL.md +676 -676
- package/skills/golang-testing/SKILL.md +721 -721
- package/skills/google-workspace-ops/SKILL.md +96 -96
- package/skills/growth-log/SKILL.md +128 -128
- package/skills/healthcare-cdss-patterns/SKILL.md +246 -246
- package/skills/healthcare-emr-patterns/SKILL.md +160 -160
- package/skills/healthcare-eval-harness/SKILL.md +208 -208
- package/skills/healthcare-phi-compliance/SKILL.md +146 -146
- package/skills/hermes-imports/SKILL.md +89 -89
- package/skills/hexagonal-architecture/SKILL.md +277 -277
- package/skills/hipaa-compliance/SKILL.md +79 -79
- package/skills/homelab-network-readiness/SKILL.md +170 -170
- package/skills/homelab-network-setup/SKILL.md +130 -130
- package/skills/homelab-pihole-dns/SKILL.md +275 -275
- package/skills/homelab-vlan-segmentation/SKILL.md +312 -312
- package/skills/homelab-wireguard-vpn/SKILL.md +306 -306
- package/skills/hookify-rules/SKILL.md +128 -128
- package/skills/inherit-legacy-style/SKILL.md +157 -157
- package/skills/intent-driven-development/SKILL.md +360 -360
- package/skills/inventory-demand-planning/SKILL.md +247 -247
- package/skills/investor-materials/SKILL.md +97 -97
- package/skills/investor-outreach/SKILL.md +92 -92
- package/skills/ios-icon-gen/SKILL.md +158 -158
- package/skills/iterative-retrieval/SKILL.md +212 -212
- package/skills/ito-basket-compare/SKILL.md +64 -64
- package/skills/ito-compute/SKILL.md +129 -129
- package/skills/ito-data-atlas-agent/SKILL.md +64 -64
- package/skills/ito-market-intelligence/SKILL.md +61 -61
- package/skills/ito-trade-planner/SKILL.md +68 -68
- package/skills/java-coding-standards/SKILL.md +384 -384
- package/skills/jira-integration/SKILL.md +303 -303
- package/skills/jpa-patterns/SKILL.md +152 -152
- package/skills/knowledge-ops/SKILL.md +155 -155
- package/skills/kotlin-coroutines-flows/SKILL.md +285 -285
- package/skills/kotlin-exposed-patterns/SKILL.md +720 -720
- package/skills/kotlin-ktor-patterns/SKILL.md +690 -690
- package/skills/kotlin-patterns/SKILL.md +712 -712
- package/skills/kotlin-testing/SKILL.md +825 -825
- package/skills/kubernetes-patterns/SKILL.md +756 -756
- package/skills/laravel-patterns/SKILL.md +416 -416
- package/skills/laravel-plugin-discovery/SKILL.md +230 -230
- package/skills/laravel-security/SKILL.md +948 -948
- package/skills/laravel-tdd/SKILL.md +675 -675
- package/skills/laravel-verification/SKILL.md +180 -180
- package/skills/latency-critical-systems/SKILL.md +75 -75
- package/skills/lead-intelligence/SKILL.md +322 -322
- package/skills/liquid-glass-design/SKILL.md +279 -279
- package/skills/llm-trading-agent-security/SKILL.md +147 -147
- package/skills/logistics-exception-management/SKILL.md +222 -222
- package/skills/loop-design-check/SKILL.md +143 -143
- package/skills/mailtrap-email-integration/SKILL.md +77 -77
- package/skills/make-interfaces-feel-better/SKILL.md +152 -152
- package/skills/manim-video/SKILL.md +90 -90
- package/skills/market-research/SKILL.md +76 -76
- package/skills/marketing-campaign/SKILL.md +114 -114
- package/skills/mcp-server-patterns/SKILL.md +70 -70
- package/skills/messages-ops/SKILL.md +105 -105
- package/skills/ml-adoption-playbook/SKILL.md +57 -57
- package/skills/mle-workflow/SKILL.md +348 -348
- package/skills/motion-advanced/SKILL.md +596 -596
- package/skills/motion-foundations/SKILL.md +299 -299
- package/skills/motion-patterns/SKILL.md +434 -434
- package/skills/motion-ui/SKILL.md +576 -576
- package/skills/mysql-patterns/SKILL.md +413 -413
- package/skills/nanoclaw-repl/SKILL.md +34 -34
- package/skills/nestjs-patterns/SKILL.md +231 -231
- package/skills/netmiko-ssh-automation/SKILL.md +174 -174
- package/skills/network-bgp-diagnostics/SKILL.md +168 -168
- package/skills/network-config-validation/SKILL.md +211 -211
- package/skills/network-interface-health/SKILL.md +153 -153
- package/skills/nextjs-turbopack/SKILL.md +58 -58
- package/skills/nodejs-keccak256/SKILL.md +103 -103
- package/skills/nutrient-document-processing/SKILL.md +168 -168
- package/skills/nuxt4-patterns/SKILL.md +101 -101
- package/skills/openclaw-persona-forge/SKILL.md +289 -289
- package/skills/openclaw-persona-forge/references/avatar-style.md +124 -124
- package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -53
- package/skills/openclaw-persona-forge/references/error-handling.md +53 -53
- package/skills/openclaw-persona-forge/references/identity-tension.md +48 -48
- package/skills/openclaw-persona-forge/references/naming-system.md +39 -39
- package/skills/openclaw-persona-forge/references/output-template.md +166 -166
- package/skills/opensource-pipeline/SKILL.md +256 -256
- package/skills/orch-add-feature/SKILL.md +45 -45
- package/skills/orch-build-mvp/SKILL.md +49 -49
- package/skills/orch-change-feature/SKILL.md +43 -43
- package/skills/orch-fix-defect/SKILL.md +43 -43
- package/skills/orch-pipeline/SKILL.md +121 -121
- package/skills/orch-refine-code/SKILL.md +44 -44
- package/skills/parallel-execution-optimizer/SKILL.md +74 -74
- package/skills/perl-patterns/SKILL.md +505 -505
- package/skills/perl-security/SKILL.md +504 -504
- package/skills/perl-testing/SKILL.md +476 -476
- package/skills/plan-canvas/SKILL.md +153 -153
- package/skills/plan-orchestrate/SKILL.md +263 -263
- package/skills/plankton-code-quality/SKILL.md +237 -237
- package/skills/postgres-patterns/SKILL.md +148 -148
- package/skills/prediction-market-oracle-research/SKILL.md +64 -64
- package/skills/prediction-market-risk-review/SKILL.md +61 -61
- package/skills/premium-web-design/SKILL.md +154 -154
- package/skills/prisma-patterns/SKILL.md +401 -401
- package/skills/product-capability/SKILL.md +142 -142
- package/skills/product-lens/SKILL.md +93 -93
- package/skills/production-audit/SKILL.md +207 -207
- package/skills/production-scheduling/SKILL.md +238 -238
- package/skills/project-flow-ops/SKILL.md +112 -112
- package/skills/prompt-optimizer/SKILL.md +398 -398
- package/skills/python-patterns/SKILL.md +751 -751
- package/skills/python-testing/SKILL.md +817 -817
- package/skills/pytorch-patterns/SKILL.md +397 -397
- package/skills/quality-nonconformance/SKILL.md +260 -260
- package/skills/quarkus-patterns/SKILL.md +723 -723
- package/skills/quarkus-security/SKILL.md +468 -468
- package/skills/quarkus-tdd/SKILL.md +812 -812
- package/skills/quarkus-verification/SKILL.md +480 -480
- package/skills/ralphinho-rfc-pipeline/SKILL.md +68 -68
- package/skills/react-native-patterns/SKILL.md +326 -326
- package/skills/react-patterns/SKILL.md +342 -342
- package/skills/react-performance/SKILL.md +575 -575
- package/skills/react-testing/SKILL.md +424 -424
- package/skills/recsys-pipeline-architect/SKILL.md +115 -115
- package/skills/recursive-decision-ledger/SKILL.md +81 -81
- package/skills/redis-patterns/SKILL.md +404 -404
- package/skills/regex-vs-llm-structured-text/SKILL.md +221 -221
- package/skills/remotion-video-creation/SKILL.md +43 -43
- package/skills/repo-scan/SKILL.md +79 -79
- package/skills/research-ops/SKILL.md +113 -113
- package/skills/returns-reverse-logistics/SKILL.md +240 -240
- package/skills/rules-distill/SKILL.md +265 -265
- package/skills/rust-patterns/SKILL.md +500 -500
- package/skills/rust-testing/SKILL.md +501 -501
- package/skills/safety-guard/SKILL.md +76 -76
- package/skills/santa-method/SKILL.md +307 -307
- package/skills/scientific-db-pubmed-database/SKILL.md +176 -176
- package/skills/scientific-db-uspto-database/SKILL.md +178 -178
- package/skills/scientific-pkg-gget/SKILL.md +167 -167
- package/skills/scientific-thinking-literature-review/SKILL.md +193 -193
- package/skills/scientific-thinking-scholar-evaluation/SKILL.md +161 -161
- package/skills/search-first/SKILL.md +183 -183
- package/skills/security-bounty-hunter/SKILL.md +100 -100
- package/skills/security-review/SKILL.md +504 -504
- package/skills/security-scan/SKILL.md +166 -166
- package/skills/seo/SKILL.md +155 -155
- package/skills/skill-comply/SKILL.md +59 -59
- package/skills/skill-scout/SKILL.md +141 -141
- package/skills/skill-stocktake/SKILL.md +195 -195
- package/skills/social-graph-ranker/SKILL.md +155 -155
- package/skills/social-publisher/SKILL.md +130 -130
- package/skills/springboot-patterns/SKILL.md +315 -315
- package/skills/springboot-security/SKILL.md +273 -273
- package/skills/springboot-tdd/SKILL.md +159 -159
- package/skills/springboot-verification/SKILL.md +232 -232
- package/skills/strategic-compact/SKILL.md +142 -142
- package/skills/swift-actor-persistence/SKILL.md +144 -144
- package/skills/swift-concurrency-6-2/SKILL.md +216 -216
- package/skills/swift-protocol-di-testing/SKILL.md +191 -191
- package/skills/swiftui-patterns/SKILL.md +259 -259
- package/skills/taste/SKILL.md +264 -264
- package/skills/taste/references/genre-taxonomy.md +87 -87
- package/skills/tdd-workflow/SKILL.md +583 -583
- package/skills/team-agent-orchestration/SKILL.md +111 -111
- package/skills/team-builder/SKILL.md +169 -169
- package/skills/terminal-ops/SKILL.md +110 -110
- package/skills/tinystruct-patterns/SKILL.md +279 -279
- package/skills/tinystruct-patterns/references/architecture.md +90 -90
- package/skills/tinystruct-patterns/references/data-handling.md +60 -60
- package/skills/tinystruct-patterns/references/database.md +99 -99
- package/skills/tinystruct-patterns/references/routing.md +64 -64
- package/skills/tinystruct-patterns/references/system-usage.md +97 -97
- package/skills/tinystruct-patterns/references/testing.md +72 -72
- package/skills/token-budget-advisor/SKILL.md +134 -134
- package/skills/ui-demo/SKILL.md +466 -466
- package/skills/ui-to-vue/SKILL.md +135 -135
- package/skills/uncloud/SKILL.md +344 -344
- package/skills/unified-memory/SKILL.md +170 -170
- package/skills/unified-notifications-ops/SKILL.md +188 -188
- package/skills/verification-loop/SKILL.md +129 -129
- package/skills/video-editing/SKILL.md +311 -311
- package/skills/videodb/SKILL.md +375 -375
- package/skills/visa-doc-translate/SKILL.md +117 -117
- package/skills/vite-patterns/SKILL.md +450 -450
- package/skills/vue-patterns/SKILL.md +471 -471
- package/skills/windows-desktop-e2e/SKILL.md +888 -888
- package/skills/workspace-surface-audit/SKILL.md +126 -126
- package/skills/x-api/SKILL.md +235 -235
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
# Motion
|
|
2
|
+
|
|
3
|
+
Read this before adding any animation. The static page must already be finished and passing
|
|
4
|
+
`inspect.mjs`; motion is the last pass, never a way to rescue a weak layout.
|
|
5
|
+
|
|
6
|
+
## Contents
|
|
7
|
+
|
|
8
|
+
1. The budget
|
|
9
|
+
2. Four questions before any animation
|
|
10
|
+
3. Tokens
|
|
11
|
+
4. Recipes (copy, then adapt)
|
|
12
|
+
5. Signature moves
|
|
13
|
+
6. Reduced motion and performance
|
|
14
|
+
7. What gives generated motion away
|
|
15
|
+
|
|
16
|
+
## 1. The budget
|
|
17
|
+
|
|
18
|
+
A page that does not move reads as a mock-up; the inspector counts what moves while the page loads and
|
|
19
|
+
scrolls, and fails it under eight elements. The motion layer has four parts:
|
|
20
|
+
|
|
21
|
+
- **One signature moment:** the thing a visitor would describe an hour later: the headline that rises
|
|
22
|
+
out of a mask, the image that opens like a shutter, the wordmark that scales with the scroll. The
|
|
23
|
+
direction sheet from `draw.mjs` names one. Build that one well; it is the only move allowed to be
|
|
24
|
+
loud.
|
|
25
|
+
- **Section entrances, choreographed per section:** the parts of each section arrive in reading order
|
|
26
|
+
(heading, text, picture, details), staggered 60–90ms, rising 16–32px with opacity, once. Vary the
|
|
27
|
+
manner with the content instead of stamping one preset everywhere: a list arrives row by row, a
|
|
28
|
+
picture opens from a mask or settles from a slight scale, a figure counts up once, a statement rises
|
|
29
|
+
line by line.
|
|
30
|
+
- **Feedback under the hand:** buttons that give on press, links that answer the pointer, cards and
|
|
31
|
+
pictures that respond on hover, a menu that opens from where it was clicked.
|
|
32
|
+
- **One moving picture:** a found clip as a muted loop with a poster frame, a slow drift or scale on
|
|
33
|
+
a large photograph, or a scroll-linked move on the hero picture.
|
|
34
|
+
|
|
35
|
+
What is still banned: the same fade-and-slide-up with the same timing on every block, which is the most
|
|
36
|
+
cited motion tell of generated pages; motion that hides content until a script runs, with no fallback;
|
|
37
|
+
bounce and elastic easing; anything that animates layout properties. Uniform motion says nobody decided
|
|
38
|
+
anything; choreographed motion with one protected moment says somebody did.
|
|
39
|
+
|
|
40
|
+
## 2. Four questions before any animation
|
|
41
|
+
|
|
42
|
+
1. **How often will someone see it?** Once per visit (hero load, a section reveal): it can take its
|
|
43
|
+
time. Many times per visit (hover, menu, accordion): fast and small. Hundreds of times (keyboard
|
|
44
|
+
actions, typing): no animation.
|
|
45
|
+
2. **What is it for?** Valid answers: it shows where something came from, it confirms an action, it
|
|
46
|
+
keeps a change from being jarring, it explains how the product works, it is the signature moment.
|
|
47
|
+
"It looks nice" is only valid for the signature moment.
|
|
48
|
+
3. **Which easing?** Entering or leaving: ease-out, so movement starts the instant the eye arrives.
|
|
49
|
+
Moving between two places on screen: ease-in-out. Colour and opacity on hover: `ease`. Constant
|
|
50
|
+
travel (marquee, progress): `linear`. `ease-in` makes interfaces feel slow because the first frames
|
|
51
|
+
barely move; do not use it. The CSS keyword curves are weak, so use the tokens below.
|
|
52
|
+
4. **How long?** Press feedback 100–160ms. Hover 150–200ms. Menus and popovers 150–250ms. Dialogs and
|
|
53
|
+
drawers 250–450ms. Section and hero reveals 500–900ms. Leaving is quicker than arriving (about 70%).
|
|
54
|
+
|
|
55
|
+
## 3. Tokens
|
|
56
|
+
|
|
57
|
+
```css
|
|
58
|
+
:root {
|
|
59
|
+
--ease-out: cubic-bezier(0.22, 1, 0.36, 1); /* enters, exits, reveals */
|
|
60
|
+
--ease-in-out: cubic-bezier(0.76, 0, 0.24, 1); /* things that travel while visible */
|
|
61
|
+
--ease-soft: cubic-bezier(0.33, 1, 0.68, 1); /* long quiet reveals, image scale */
|
|
62
|
+
--t-press: 140ms;
|
|
63
|
+
--t-hover: 180ms;
|
|
64
|
+
--t-ui: 240ms;
|
|
65
|
+
--t-reveal: 800ms;
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Name the properties you animate. `transition: all` animates things you did not intend (and costs
|
|
70
|
+
layout); write `transition: transform var(--t-press) var(--ease-out)`.
|
|
71
|
+
|
|
72
|
+
## 4. Recipes
|
|
73
|
+
|
|
74
|
+
All recipes keep content visible when JavaScript is off or slow: the hidden state only applies under
|
|
75
|
+
`html.js`, which a one-line inline script sets.
|
|
76
|
+
|
|
77
|
+
```html
|
|
78
|
+
<script>document.documentElement.classList.add('js')</script>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Hero load sequence (CSS only)
|
|
82
|
+
|
|
83
|
+
Stagger at most four things. With a headline of two lines this is short and reads as one gesture.
|
|
84
|
+
|
|
85
|
+
```css
|
|
86
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
87
|
+
.js [data-rise] {
|
|
88
|
+
opacity: 0;
|
|
89
|
+
transform: translateY(18px);
|
|
90
|
+
animation: rise var(--t-reveal) var(--ease-out) forwards;
|
|
91
|
+
animation-delay: calc(var(--i, 0) * 90ms + 120ms);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
@keyframes rise { to { opacity: 1; transform: none; } }
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```html
|
|
98
|
+
<h1 data-rise style="--i:0">…</h1>
|
|
99
|
+
<p data-rise style="--i:1">…</p>
|
|
100
|
+
<a data-rise style="--i:2" class="button">…</a>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Masked line reveal (the classic gallery headline)
|
|
104
|
+
|
|
105
|
+
Each line slides up from behind its own baseline. Because headlines are capped at two lines, you set
|
|
106
|
+
the line breaks yourself and wrap each line.
|
|
107
|
+
|
|
108
|
+
```html
|
|
109
|
+
<h1 class="lines">
|
|
110
|
+
<span class="line"><span data-line style="--i:0">Stools for</span></span>
|
|
111
|
+
<span class="line"><span data-line style="--i:1">small kitchens</span></span>
|
|
112
|
+
</h1>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
```css
|
|
116
|
+
.lines .line { display: block; overflow: hidden; padding-bottom: 0.08em; margin-bottom: -0.08em; }
|
|
117
|
+
.lines [data-line] { display: block; }
|
|
118
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
119
|
+
.js .lines [data-line] {
|
|
120
|
+
transform: translateY(105%);
|
|
121
|
+
animation: line-up 900ms var(--ease-out) forwards;
|
|
122
|
+
animation-delay: calc(var(--i) * 110ms + 150ms);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
@keyframes line-up { to { transform: none; } }
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
The `padding-bottom` / negative margin pair stops descenders (g, y, p) being clipped by the mask.
|
|
129
|
+
On a narrow phone the two authored lines may each wrap; check the mobile screenshot, and if they do,
|
|
130
|
+
author a shorter mobile break with a `<br class="only-wide">` pattern or reduce the size.
|
|
131
|
+
|
|
132
|
+
### Reveal on scroll (once)
|
|
133
|
+
|
|
134
|
+
For the two or three sections that deserve it, not for every block.
|
|
135
|
+
|
|
136
|
+
```css
|
|
137
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
138
|
+
.js [data-reveal] { opacity: 0; transform: translateY(24px); transition: opacity 700ms var(--ease-out), transform 900ms var(--ease-out); }
|
|
139
|
+
.js [data-reveal].is-in { opacity: 1; transform: none; }
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
```js
|
|
144
|
+
const io = new IntersectionObserver((entries) => {
|
|
145
|
+
for (const e of entries) if (e.isIntersecting) { e.target.classList.add('is-in'); io.unobserve(e.target); }
|
|
146
|
+
}, { rootMargin: '0px 0px -12% 0px', threshold: 0.1 });
|
|
147
|
+
document.querySelectorAll('[data-reveal]').forEach((el) => io.observe(el));
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Never attach reveals with a scroll listener, never replay them when the element re-enters, and never
|
|
151
|
+
leave anything at `opacity: 0` if the observer fails to fire (the `html.js` gate handles no-JS; the
|
|
152
|
+
`unobserve` handles replays).
|
|
153
|
+
|
|
154
|
+
### Image shutter
|
|
155
|
+
|
|
156
|
+
An image opens from one edge while scaling down slightly inside its frame. Gallery staple; use it for
|
|
157
|
+
the one hero or showcase image.
|
|
158
|
+
|
|
159
|
+
```css
|
|
160
|
+
.shutter { overflow: hidden; }
|
|
161
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
162
|
+
.js .shutter { clip-path: inset(0 0 100% 0); transition: clip-path 1100ms var(--ease-in-out); }
|
|
163
|
+
.js .shutter img { transform: scale(1.12); transition: transform 1500ms var(--ease-soft); }
|
|
164
|
+
.js .shutter.is-in { clip-path: inset(0); }
|
|
165
|
+
.js .shutter.is-in img { transform: none; }
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Press and hover
|
|
170
|
+
|
|
171
|
+
```css
|
|
172
|
+
.button { transition: transform var(--t-press) var(--ease-out), background-color var(--t-hover) ease, color var(--t-hover) ease; }
|
|
173
|
+
.button:active { transform: scale(0.97); }
|
|
174
|
+
.link { text-decoration: underline; text-decoration-color: transparent; text-underline-offset: 0.2em; text-decoration-thickness: 0.07em; transition: text-decoration-color var(--t-hover) ease; }
|
|
175
|
+
@media (hover: hover) and (pointer: fine) {
|
|
176
|
+
.button:hover { background-color: var(--accent-strong); }
|
|
177
|
+
.link:hover { text-decoration-color: currentColor; }
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Hover styles go behind `(hover: hover)` because touch devices fire hover on tap and leave it stuck.
|
|
182
|
+
Hover should raise contrast, never lower it. Do not change font weight on hover (the text reflows).
|
|
183
|
+
Do not lift or scale every card on hover; one consistent, small response is enough.
|
|
184
|
+
|
|
185
|
+
### Scroll-linked progress without JavaScript
|
|
186
|
+
|
|
187
|
+
For a wordmark that scales as the hero leaves, an image that drifts a few percent, or a progress bar.
|
|
188
|
+
Wrap in `@supports` so browsers without scroll timelines get the static state.
|
|
189
|
+
|
|
190
|
+
```css
|
|
191
|
+
@supports (animation-timeline: view()) {
|
|
192
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
193
|
+
.drift { animation: drift linear both; animation-timeline: view(); animation-range: entry 0% exit 100%; }
|
|
194
|
+
@keyframes drift { from { transform: translateY(-4%); } to { transform: translateY(4%); } }
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Keep the travel small (under 8% of the element). Large parallax makes text hard to read and looks
|
|
200
|
+
dated.
|
|
201
|
+
|
|
202
|
+
### Pinned story
|
|
203
|
+
|
|
204
|
+
A section whose heading stays put while items pass. Use `position: sticky`; do not hijack scrolling.
|
|
205
|
+
|
|
206
|
+
```css
|
|
207
|
+
.story { display: grid; grid-template-columns: 5fr 7fr; gap: var(--gutter); align-items: start; }
|
|
208
|
+
.story__title { position: sticky; top: 18vh; }
|
|
209
|
+
@media (max-width: 800px) { .story { grid-template-columns: 1fr; } .story__title { position: static; } }
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### List with image preview (work index, menu, team)
|
|
213
|
+
|
|
214
|
+
Rows of large text; hovering a row shows its image in a fixed frame beside or behind the list.
|
|
215
|
+
|
|
216
|
+
```css
|
|
217
|
+
.index { position: relative; }
|
|
218
|
+
.index__row { display: flex; justify-content: space-between; align-items: baseline; padding-block: 0.35em; font-size: var(--step-4); }
|
|
219
|
+
.index__frame { position: absolute; inset-block: 0; right: 0; width: 34%; pointer-events: none; }
|
|
220
|
+
.index__frame img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity var(--t-ui) ease; }
|
|
221
|
+
.index__frame img.is-on { opacity: 1; }
|
|
222
|
+
@media (hover: hover) and (pointer: fine) { .index:hover .index__row:not(:hover) { opacity: 0.35; } .index__row { transition: opacity var(--t-hover) ease; } }
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
On touch there is no hover, so each row shows its image inline above the title instead.
|
|
226
|
+
|
|
227
|
+
### Accordion
|
|
228
|
+
|
|
229
|
+
```css
|
|
230
|
+
.acc__panel { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 320ms var(--ease-out); }
|
|
231
|
+
.acc__panel > div { overflow: hidden; }
|
|
232
|
+
.acc[open] .acc__panel, .acc__item.is-open .acc__panel { grid-template-rows: 1fr; }
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Animating `grid-template-rows` from `0fr` to `1fr` opens to the content's real height without measuring
|
|
236
|
+
it in JavaScript.
|
|
237
|
+
|
|
238
|
+
### Menu or dialog
|
|
239
|
+
|
|
240
|
+
```css
|
|
241
|
+
.menu { transform-origin: top right; transition: opacity var(--t-ui) var(--ease-out), transform var(--t-ui) var(--ease-out); }
|
|
242
|
+
.menu[hidden], .menu.is-closed { opacity: 0; transform: scale(0.97) translateY(-6px); pointer-events: none; }
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Things open from where they were triggered (`transform-origin` at the trigger). Nothing enters from
|
|
246
|
+
`scale(0)`; start at 0.95–0.98. A centred dialog is the one case that scales from its centre.
|
|
247
|
+
|
|
248
|
+
## 5. Signature moves
|
|
249
|
+
|
|
250
|
+
The direction sheet names one. Each of these was seen repeatedly on the studied gallery sites.
|
|
251
|
+
|
|
252
|
+
| Move | What happens | Build with |
|
|
253
|
+
| --- | --- | --- |
|
|
254
|
+
| Masked headline | Lines rise from behind their baselines on load | Masked line reveal recipe |
|
|
255
|
+
| Shutter image | Hero or showcase image opens from an edge, settling from 1.12 scale | Image shutter recipe |
|
|
256
|
+
| Scaling wordmark | A giant wordmark shrinks or grows a few percent as the hero scrolls out | Scroll-linked recipe on `scale` |
|
|
257
|
+
| Pinned story | A heading holds while its items scroll past | Sticky recipe |
|
|
258
|
+
| Index with preview | Text rows; the hovered row shows its image | List with image preview recipe |
|
|
259
|
+
| Curtain footer | The last section is revealed from under the page as you reach the end | `position: sticky; bottom: 0` footer under a main with a background and `z-index` |
|
|
260
|
+
| Slow crossfade | Hero image crossfades through 3–4 photographs, 5–6s each | Stacked images, opacity keyframes, pause when the tab is hidden |
|
|
261
|
+
| Edge-to-edge marquee | One line of very large type travels sideways, slowly | Duplicate the content, `translateX(-50%)` linear loop, pause on hover and under reduced motion |
|
|
262
|
+
| Drag row | A horizontally scrollable row of large images with scroll snapping | `overflow-x: auto; scroll-snap-type: x mandatory`, no library |
|
|
263
|
+
| Colour by chapter | Each chapter is its own full-bleed colour field, so the ground changes at section edges; a fixed header takes the ink of the chapter beneath | Section backgrounds in CSS; `base.js` sets `--header-ink` from `data-ink`. Never recolour the whole page from an observer |
|
|
264
|
+
|
|
265
|
+
Pick by subject. A portfolio wants the index with preview; a restaurant wants the slow crossfade; a
|
|
266
|
+
product wants the shutter on its hero object. If the move says nothing about the subject, it is
|
|
267
|
+
decoration and the page is better without it.
|
|
268
|
+
|
|
269
|
+
## 6. Reduced motion and performance
|
|
270
|
+
|
|
271
|
+
- `prefers-reduced-motion: reduce` means fewer and gentler, not none: keep opacity and colour changes,
|
|
272
|
+
drop travel, scale, parallax and autoplay. All recipes above are written inside
|
|
273
|
+
`no-preference` blocks so the reduced state is simply the finished state.
|
|
274
|
+
- Animate `transform`, `opacity` and `clip-path`. Animating `width`, `height`, `top`, `left`, `margin`
|
|
275
|
+
or `padding` forces layout on every frame. `grid-template-rows` for accordions is the accepted
|
|
276
|
+
exception because it is short and rare.
|
|
277
|
+
- Do not drive many children from one changing CSS variable on a parent; set the transform on the
|
|
278
|
+
element that moves.
|
|
279
|
+
- `will-change` only on an element that is about to animate, removed afterwards.
|
|
280
|
+
- Pause loops when off screen or when the tab is hidden.
|
|
281
|
+
- No scroll hijacking, no smooth-scroll library by default, no custom cursor. They cost usability,
|
|
282
|
+
which is 30% of an Awwwards score and the line most winners score lowest on.
|
|
283
|
+
|
|
284
|
+
## 7. What gives generated motion away
|
|
285
|
+
|
|
286
|
+
- The same fade-up on every block.
|
|
287
|
+
- A dozen staggered entrances in the hero.
|
|
288
|
+
- Hover lift or zoom on every card and image.
|
|
289
|
+
- Bounce or elastic easing on interface elements.
|
|
290
|
+
- Infinite loops that mean nothing: pulsing dots, floating shapes, shimmering text, rotating badges.
|
|
291
|
+
- A reveal that never fires and leaves a blank band in the page. Run `inspect.mjs` after the motion
|
|
292
|
+
pass and look at every screenshot for missing content.
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
# The study
|
|
2
|
+
|
|
3
|
+
Everything numeric in this skill comes from here. Cite these figures; do not round them up or invent
|
|
4
|
+
others.
|
|
5
|
+
|
|
6
|
+
## Contents
|
|
7
|
+
|
|
8
|
+
1. Method and its limits
|
|
9
|
+
2. Scores
|
|
10
|
+
3. Where the idea comes from
|
|
11
|
+
4. Headlines
|
|
12
|
+
5. Type
|
|
13
|
+
6. Devices: what separates strong from weak, and what does not
|
|
14
|
+
7. Colour and shape
|
|
15
|
+
8. Imagery and page structure
|
|
16
|
+
9. What the inspector says about the gallery itself
|
|
17
|
+
10. The 25 highest-scored sites and their ideas
|
|
18
|
+
11. How the skill was tested
|
|
19
|
+
|
|
20
|
+
## 1. Method and its limits
|
|
21
|
+
|
|
22
|
+
- **Sample.** 248 sites collected on 5 October 2026: 156 from One Page Love (the latest gallery pages
|
|
23
|
+
and the category listings) and 92 Awwwards Sites of the Day (the three most recent listing pages).
|
|
24
|
+
247 loaded; 246 were re-measured with the final probe.
|
|
25
|
+
- **Capture.** Headless Chrome at 1440×900 and 390×844. For each site: the first viewport, five more
|
|
26
|
+
frames while scrolling with real wheel input, the mobile first viewport, and a measurement pass in
|
|
27
|
+
the page (computed styles, text geometry, colours, fonts actually loaded).
|
|
28
|
+
- **Panel.** 21 model reviewers each studied about 12 sites from the screenshots and the measurements,
|
|
29
|
+
described them (idea, hero, type, colour, imagery, layout, sections) and scored them the Awwwards
|
|
30
|
+
way: design 40%, usability 30%, creativity 20%, content 10%. These are model judgements from still
|
|
31
|
+
frames, not human jurors and not the real Awwwards scores. Batches mixed both sources so each
|
|
32
|
+
reviewer saw a spread.
|
|
33
|
+
- **Usable sets.** 235 sites were usable for the panel (12 showed only a preloader, an entry gate or a
|
|
34
|
+
bot wall). 202 were measurable for typography (a page with at least 25 words and a detectable
|
|
35
|
+
headline). "Top" below means panel score 7.5 or higher (82 measurable sites); "weak" means under 6.5
|
|
36
|
+
(23 measurable sites).
|
|
37
|
+
- **Limits.** One capture per site on one day. Some heroes were caught mid-animation or behind a cookie
|
|
38
|
+
notice. WebGL-heavy sites are under-described by text measurements. The eyebrow detector counts any
|
|
39
|
+
small short label directly above a large heading, so it over-counts against the panel's stricter
|
|
40
|
+
reading (60% measured against 35% observed). Motion was inferred from frames, not watched. The sample
|
|
41
|
+
is whatever the two galleries had recently featured; it is fashion as much as quality.
|
|
42
|
+
|
|
43
|
+
## 2. Scores
|
|
44
|
+
|
|
45
|
+
| | All 235 | One Page Love (151) | Awwwards (84) |
|
|
46
|
+
| --- | --- | --- | --- |
|
|
47
|
+
| Median overall | 7.2 | 7.1 | 7.5 |
|
|
48
|
+
| Middle half | 6.8–7.6 | | |
|
|
49
|
+
| 8.0 or higher | 25 sites (11%) | | |
|
|
50
|
+
| 7.5 or higher | 90 sites (38%) | | |
|
|
51
|
+
| Under 6.5 | 29 sites | | |
|
|
52
|
+
|
|
53
|
+
Median by criterion: design 8, usability 7, creativity 7, content 7. Among the top 25: design 9,
|
|
54
|
+
usability 7, creativity 8, content 8. Usability is the one line that does not rise with the rest: the
|
|
55
|
+
best sites are no easier to use than the average one. Do not copy their gates, preloaders, tiny text
|
|
56
|
+
or hidden navigation.
|
|
57
|
+
|
|
58
|
+
## 3. Where the idea comes from
|
|
59
|
+
|
|
60
|
+
The clearest pattern in the panel's notes: high scores go with a concept taken from the subject, and
|
|
61
|
+
low scores go with its absence. The weakest entries' ideas were recorded in words like "none beyond the
|
|
62
|
+
standard dark SaaS launch formula", "no visual idea beyond clarity", "no strong idea". The strongest
|
|
63
|
+
were sentences only that subject could own (section 10).
|
|
64
|
+
|
|
65
|
+
Recurring engines among the 7.3+ sites, each the basis of a direction in the library:
|
|
66
|
+
|
|
67
|
+
- **The product demonstrates itself.** A colour picker's loupe reads the page's own background; a list
|
|
68
|
+
tool is sold with tiny working lists; a photo app's page is a wall of its own output.
|
|
69
|
+
- **The page is an artefact from the subject's world.** A wedding site that is the invitation; an
|
|
70
|
+
archive as tabbed folders; a coupon with a cut line; a portfolio as a contact sheet.
|
|
71
|
+
- **The name is the hero.** Wordmarks as wide as the screen, a photograph set inside the name like a
|
|
72
|
+
letter, a name split to opposite corners with the page between.
|
|
73
|
+
- **One motif from the subject drives everything.** A tool's octagonal section as button, mask and
|
|
74
|
+
loader; two circles for two accounts; a café's stripes.
|
|
75
|
+
- **Dressed as another category.** A money app as a streetwear drop; an industrial roaster as a design
|
|
76
|
+
object; a parcel service as a fairground.
|
|
77
|
+
- **The place carries it.** One full-bleed view and a name along the bottom edge.
|
|
78
|
+
- **A fixed stage.** A title or object stays put while content swaps beneath it.
|
|
79
|
+
- **One section, one colour.** Flat fields as chapters.
|
|
80
|
+
- **Radical understatement.** A 27px headline and tiny live demonstrations, carried through completely.
|
|
81
|
+
|
|
82
|
+
Hero types, by the panel's classification (top sites against weak sites): full-bleed media with type
|
|
83
|
+
over it 16% / 10%; giant wordmark 14% / 0%; typographic poster 13% / 7%; text beside media 10% / 3%;
|
|
84
|
+
**centred statement with media below 7% / 24%**. The centred headline over a screenshot is the weak
|
|
85
|
+
sites' signature layout.
|
|
86
|
+
|
|
87
|
+
## 4. Headlines
|
|
88
|
+
|
|
89
|
+
| Hero headline | All | Top | Weak |
|
|
90
|
+
| --- | --- | --- | --- |
|
|
91
|
+
| Words, median | 5 | 5 | 5 |
|
|
92
|
+
| Words, middle half | 3–9 | 2–8 | 3–8 |
|
|
93
|
+
| Characters, median | 32 | | |
|
|
94
|
+
| One line at 1440 | 47% | | |
|
|
95
|
+
| Two lines or fewer at 1440 | 70% | 71% | 83% |
|
|
96
|
+
| Two lines or fewer at 390 | 57% | | |
|
|
97
|
+
| Three lines or fewer at 390 | 82% | | |
|
|
98
|
+
|
|
99
|
+
Awwwards heroes are shorter (median 4 words, 76% within two lines) than One Page Love's (6 words, 66%).
|
|
100
|
+
Section headings have a median of 3 words. Length does not separate strong from weak; nearly everyone
|
|
101
|
+
in the gallery writes short headlines. The two-line limit in this skill is a house rule that most of
|
|
102
|
+
the gallery already meets on desktop and that takes care to meet on a phone.
|
|
103
|
+
|
|
104
|
+
## 5. Type
|
|
105
|
+
|
|
106
|
+
| | All | Top | Weak |
|
|
107
|
+
| --- | --- | --- | --- |
|
|
108
|
+
| Hero size, median | 72px (5.0vw) | 6.0vw | 4.7vw |
|
|
109
|
+
| Hero size, middle half | 3.0–7.6vw | 2.5–9.7vw | 2.7–6.1vw |
|
|
110
|
+
| Largest text on the page, median | 6.4vw | 8.4vw | 5.0vw |
|
|
111
|
+
| Largest text, upper quarter starts at | 10.4vw | 12.5vw | 6.7vw |
|
|
112
|
+
| Hero on a phone, median | 40px | | |
|
|
113
|
+
| Hero tracking, median (middle half) | -0.01em (-0.03 to 0) | | |
|
|
114
|
+
| Hero leading, median (middle half) | 1.0 (0.95–1.1) | | |
|
|
115
|
+
| Body size, median (middle half) | 16px (14–18) | | |
|
|
116
|
+
| Headline ÷ body, median | 4.3 | 4.7 | 4.0 |
|
|
117
|
+
| Typefaces carrying 3%+ of text | one 31%, two 45%, three 22% | | |
|
|
118
|
+
| Distinct font sizes, median | 8 | | |
|
|
119
|
+
|
|
120
|
+
Hero weight: regular 48%, medium 18%, semibold 6%, bold or heavier 22%, light 6%. Capitals 24%.
|
|
121
|
+
Centred 39% overall, 52% on weak sites. Display classes by the panel: neo-grotesk 48%, transitional
|
|
122
|
+
serif 11%, geometric sans 10%, condensed 6%, extended 6%, old-style serif 4%, custom lettering 4%.
|
|
123
|
+
|
|
124
|
+
Strong sites push the extremes: their biggest type is bigger and their range is wider. Weak sites
|
|
125
|
+
cluster in the middle.
|
|
126
|
+
|
|
127
|
+
## 6. Devices: what separates strong from weak, and what does not
|
|
128
|
+
|
|
129
|
+
Measured in the page unless marked (panel).
|
|
130
|
+
|
|
131
|
+
**More common on weak sites (the data supports avoiding them):**
|
|
132
|
+
|
|
133
|
+
| Device | Top | Weak |
|
|
134
|
+
| --- | --- | --- |
|
|
135
|
+
| Icon-topped feature cards (panel) | 1% | 28% |
|
|
136
|
+
| Rows of identical cards with a small icon (measured) | 7% | 26% |
|
|
137
|
+
| Pill badges (panel) | 14% | 34% |
|
|
138
|
+
| Pill-shaped label above a heading (measured) | 5% | 26% |
|
|
139
|
+
| Tiny uppercase letter-spaced labels, any | 16% | 57% |
|
|
140
|
+
| Tiny uppercase letter-spaced labels, three or more | 6% | 43% |
|
|
141
|
+
| Gradient fills (not counting scrims) | 22% | 52% |
|
|
142
|
+
| Gradient text | 2% | 13% |
|
|
143
|
+
| Shadows on resting elements, any | 24% | 48% |
|
|
144
|
+
| Shadows, five or more | 10% | 30% |
|
|
145
|
+
| Emoji in the page | 10% | 26% |
|
|
146
|
+
| Eyebrow labels (panel) | 32% | 45% |
|
|
147
|
+
|
|
148
|
+
**No real difference:**
|
|
149
|
+
|
|
150
|
+
| Device | Top | Weak |
|
|
151
|
+
| --- | --- | --- |
|
|
152
|
+
| Backdrop blur anywhere | 32% | 39% |
|
|
153
|
+
| Italic-serif accent word (panel) | 4% | 7% |
|
|
154
|
+
| Thin rules, any | 61% | 52% |
|
|
155
|
+
|
|
156
|
+
**More common on strong sites (banned here anyway, as house style):**
|
|
157
|
+
|
|
158
|
+
| Device | Top | Weak |
|
|
159
|
+
| --- | --- | --- |
|
|
160
|
+
| Monospace labels (panel) | 44% | 24% |
|
|
161
|
+
| Monospace anywhere outside code (measured) | 45% | 26% |
|
|
162
|
+
| Index numbering (panel) | 38% | 21% |
|
|
163
|
+
|
|
164
|
+
Monospace captions, index numbers and ruled grids are the present fashion of award sites. They are
|
|
165
|
+
excluded from this skill by the owner's choice, not by the data: they are the devices generators copy
|
|
166
|
+
first, and a page that cannot lean on them has to find structure in space, tone and scale.
|
|
167
|
+
|
|
168
|
+
## 7. Colour and shape
|
|
169
|
+
|
|
170
|
+
- Dark page ground 41%; pure white 25%; pure black 12%; a warm off-white 13%.
|
|
171
|
+
- Scheme (panel): monochrome plus one accent 23%, light neutral 22%, dark neutral 14%, several flat
|
|
172
|
+
colours 13%, two-tone 12%, photographic 9%, one colour field 6%.
|
|
173
|
+
- Primary buttons are neutral (black, white, grey) on 52% of sites. One site in 246 has a terracotta
|
|
174
|
+
button; none has a violet one.
|
|
175
|
+
- Median number of distinct section grounds: 2 on top sites, 1 on weak sites.
|
|
176
|
+
- Button shape: top sites square (0–2px) 52%, fully round 23%, small radius 19%, medium (9–16px) 6%.
|
|
177
|
+
Weak sites fully round 59%, medium 24%, square 18%.
|
|
178
|
+
- Media corners are square on 73% of sites; where rounded, the median radius is 12px.
|
|
179
|
+
- Buttons in the first viewport: none on 55% of top sites and 39% of weak ones.
|
|
180
|
+
|
|
181
|
+
## 8. Imagery and page structure
|
|
182
|
+
|
|
183
|
+
- Hero media covers at least half the first viewport on 60% of sites (top 68%, weak 48%) and nearly
|
|
184
|
+
all of it on 50% (top 56%, weak 39%). No hero media: 15%.
|
|
185
|
+
- Video is present on 49% of sites and a canvas element on 49% (top 62%, weak 35%).
|
|
186
|
+
- Images per page, median: 24 overall, 37 on top sites, 5 on weak ones.
|
|
187
|
+
- Imagery kind (panel): mixed 32%, photography 14%, generative or WebGL 13%, product interface 12%,
|
|
188
|
+
3D render 11%, illustration 9%, video 6%, type only 3%. Median panel score is lowest for
|
|
189
|
+
illustration-led (6.9) and product-interface-led (7.1) pages and highest for video and type-only
|
|
190
|
+
(7.5).
|
|
191
|
+
- Page length, median: 8.7 screens and 575 words (middle half 1.6–14.4 screens, 250–956 words). A
|
|
192
|
+
quarter of the sites are a single screen or two.
|
|
193
|
+
- Navigation: a median of 3 links; fixed or sticky on 66%.
|
|
194
|
+
- Density (panel): airy 46%, balanced 45%, dense 9%. Alignment: centred 33%, mixed 31%, left-anchored
|
|
195
|
+
17%, modular grid 13%, free 6%.
|
|
196
|
+
- Asked to describe each site's most interesting sections, the panel picked a pricing, testimonial or
|
|
197
|
+
FAQ section only 7, 12 and 9 times across 235 sites. Where strong sites have them at all, they are
|
|
198
|
+
not where the design effort goes, and they avoid the stock form.
|
|
199
|
+
|
|
200
|
+
**From the panel's written notes on the 114 sites scoring 7.3 or more** (hand tallies, approximate;
|
|
201
|
+
`layout.md` turns these into practice):
|
|
202
|
+
|
|
203
|
+
- Outer margins of 32px or less on about 45; 80px or more on about 8. A centred 700–1300px container
|
|
204
|
+
on about 15, several of them the pages the panel called stock.
|
|
205
|
+
- Text anchored to a fixed off-centre line on about 22. Text docked in corners or at opposite ends of
|
|
206
|
+
a baseline on about 25 and 15.
|
|
207
|
+
- Two or three type sizes with nothing between on about 30; no note describes a graded five-step
|
|
208
|
+
scale.
|
|
209
|
+
- One thing per screen on about 20. A full background colour per section on about 20; alternating
|
|
210
|
+
light and dark on about 12.
|
|
211
|
+
- Every section recomposed on about 14; one planned exception to the page's own system on about 14.
|
|
212
|
+
- No conventional top navigation bar on about 45; small corner links on about 22; a single link or
|
|
213
|
+
button on about 10.
|
|
214
|
+
- Endings: the name at full width about 18, the hero repeated inverted about 12, a closing scene of
|
|
215
|
+
its own about 14, no footer or a single line about 22. Link-column footers are mentioned only as
|
|
216
|
+
criticism.
|
|
217
|
+
- Motion (inferred from frames): autoplaying video about 50; pinned or fixed stages about 40; text
|
|
218
|
+
reveals about 30 (blur-in 10, masked line rises 8, scroll-tied word colouring 7); horizontal strips
|
|
219
|
+
about 27; marquees about 26; media swapped behind a fixed element about 15; scroll-linked scaling
|
|
220
|
+
about 12. Rare: hover effects (4 mentions), parallax (6), accordions (5), bounce or spring motion
|
|
221
|
+
(none). About 10 strong sites show little or no motion at all.
|
|
222
|
+
- How weak sites fail (54 sites under 6.8): the category's stock template about 20; centred headline,
|
|
223
|
+
pill badge, two buttons and a screenshot about 9; stock modules after a distinctive hero about 8,
|
|
224
|
+
plus about 17 in the middle band; a characterless default typeface about 13; text too small or too
|
|
225
|
+
faint about 13; never saying what the thing is about 12.
|
|
226
|
+
- Faults of the best sites (90 at 7.5 or more), not to be copied: text at 9–13px about 24;
|
|
227
|
+
information hidden behind the concept about 20; the idea running out mid-page about 15; text over
|
|
228
|
+
footage with no scrim about 12; gates, preloaders and blank first paints about 12.
|
|
229
|
+
|
|
230
|
+
## 9. What the inspector says about the gallery itself
|
|
231
|
+
|
|
232
|
+
Running this skill's own `inspect.mjs` rules over the 202 measurable gallery sites: the median site
|
|
233
|
+
has 4 `FAIL`s and only 4% have none. The rules that fire most: headline over two lines somewhere on
|
|
234
|
+
the page 60%, eyebrow-like label 60%, thin rules 50%, monospace 37%, shadows 32%, gradients 29%, index
|
|
235
|
+
numbering 29%.
|
|
236
|
+
|
|
237
|
+
So the house style is deliberately stricter than the gallery. It is not a description of award sites;
|
|
238
|
+
it is a narrower target inside what they do: their scale, their ideas, their imagery and restraint,
|
|
239
|
+
without the ornaments that have since become a uniform.
|
|
240
|
+
|
|
241
|
+
## 10. The 25 highest-scored sites and their ideas
|
|
242
|
+
|
|
243
|
+
The panel's one-sentence reading of each. Notice that every one names something only that subject
|
|
244
|
+
could own. (Several use devices this skill bans; take the idea, not the ornament.)
|
|
245
|
+
|
|
246
|
+
| Site | Source | Score | Idea |
|
|
247
|
+
| --- | --- | --- | --- |
|
|
248
|
+
| PP Neue Montreal | Awwwards | 8.6 | A typeface specimen dressed as a vintage city travel guide: the font named after Montreal is sold through guidebook titling, postcards and old tourist footage. |
|
|
249
|
+
| Seasats | Awwwards | 8.4 | Calm, dusk-lit seascapes sell autonomous boats as serene instruments, and the navigation is a column of stacked colour swatches taken from that sea-and-sand palette. |
|
|
250
|
+
| AI in Design Report 2026 | Awwwards | 8.4 | A research report laid out like a colour-blocked print annual: a video collage on top, an oversized tight grotesk title, and flat orange, lilac, sage and black blocks carrying stats, quotes and chapters. |
|
|
251
|
+
| House of Honey | Awwwards | 8.4 | A block-heavy wordmark pierced by a fine script: the bold-against-delicate contrast is repeated at every scale, with giant pink script behind quiet serif statements. |
|
|
252
|
+
| White Desert | Awwwards | 8.4 | One word, the destination, set a third of the screen tall over footage like a film title card; sheer scale stands in for remoteness. |
|
|
253
|
+
| Applied Imagination | One Page Love | 8.3 | An essay conceived on a flight is read as a descent: an altimeter ticks from 30,000 ft to zero while you scroll down through clouds to mountains at ground level. |
|
|
254
|
+
| Cursor Compile | One Page Love | 8.3 | The event name drawn as seven looping one-line curves in seven colours, more signature than logotype, on an otherwise whisper-quiet off-white page. |
|
|
255
|
+
| The New Industrials | One Page Love | 8.3 | A long-read essay laid out inside a drafting grid, where colour fields shift as you read and machine parts drift through the margins and finally assemble into the publisher's initials. |
|
|
256
|
+
| Wild | One Page Love | 8.3 | A studio essay in which everything decorative is drawn on one square-pixel grid: the hero heatmap, the icons, the diagrams, the lettering and the footer. |
|
|
257
|
+
| Hildén & Kaira | Awwwards | 8.3 | The agency name is cast in liquid chrome across the full width, and the same chrome becomes the objects that float through the page, tying the pitch to one material. |
|
|
258
|
+
| PX Push | Awwwards | 8.2 | A design subscription presented as a retro broadcast: the entire site is seen through a CRT screen, with a chrome logo token as its mascot. |
|
|
259
|
+
| Illoca | Awwwards | 8.2 | Software for architects sold as a drafting table: a two-colour illustrated studio on graph paper that the scroll pushes into until the drawing fills the screen. |
|
|
260
|
+
| Aspen Search | Awwwards | 8.2 | The page is a tile system with no margins: the two-word name is split across cells that alternate type, dithered image, black and one mint green. |
|
|
261
|
+
| Dragonfly Redux | Awwwards | 8.2 | A crypto fund presented as a terminal artefact: every picture is rendered in characters, framed by four letters of the name pinned to the viewport corners. |
|
|
262
|
+
| Monolog | Awwwards | 8.2 | A studio pitch run as an asymmetric sheet: a narrow left column carries the sales talk while a wide right column stacks a very heavy headline and the proof. |
|
|
263
|
+
| The Queue | One Page Love | 8.1 | An essay on queueing where the queue is the ornament: a line of drawn figures stands along the bottom of the hero and returns between chapters in changing period dress. |
|
|
264
|
+
| Paul Kalkbrenner | Awwwards | 8.1 | Swiss poster typography for a techno artist: the name as one black line with a photo set inside it like a glyph, then every chapter gets its own flat colour. |
|
|
265
|
+
| Vero New York | Awwwards | 8.1 | A keepsake treated like couture: a slow close-up film opens, then a white sculpture of a dress stays pinned at centre while one sentence passes over it. |
|
|
266
|
+
| Depo Luxe | Awwwards | 8.1 | A film production roster shown as a full-screen reel in which every step is one film with only a title, a director and a client, set like credits at body size. |
|
|
267
|
+
| Longbow | Awwwards | 8.1 | The page is built on a visible four-column construction grid, and cars, cards and a giant condensed marquee are slotted into its cells like objects on an artboard. |
|
|
268
|
+
| Mosby's Files | Awwwards | 8.0 | An archive of architects presented as a physical stack of coloured index-tab file folders that you flip through. |
|
|
269
|
+
| Sarah & Matt Wedding | One Page Love | 8.0 | The site is the invitation: a letterpress-style card opens the page, and its ornaments and small typographic parts become the components for everything after it. |
|
|
270
|
+
| Zara Webb | One Page Love | 8.0 | A one-woman newborn-care practice presented like a hand-made keepsake: a mascot rabbit, scalloped and flower-shaped cut-outs, candid film photographs. |
|
|
271
|
+
| Noho | Awwwards | 8.0 | Furniture sold through people misusing it (wearing, balancing on, hiding behind chairs on flat colour backdrops) while the interface stays quiet. |
|
|
272
|
+
| Juggle | One Page Love | 8.0 | The headline literally drowns: a flat blue field rises to half height and the lines below the waterline change colour. |
|
|
273
|
+
|
|
274
|
+
Full notes on any studied site: `node scripts/draw.mjs --site <id>` (ids appear on direction sheets).
|
|
275
|
+
|
|
276
|
+
## 11. How the skill was tested
|
|
277
|
+
|
|
278
|
+
Six client briefs (an invoicing tool, a restaurant, a designer's portfolio, a ceramic product, a
|
|
279
|
+
guesthouse, a design conference), each with no photographs. For every brief a fresh agent built the
|
|
280
|
+
page three ways: with no skill (baseline), with another published design skill (atelier, three briefs)
|
|
281
|
+
and with this skill. Every build was photographed by `inspect.mjs` in the same way and judged blind
|
|
282
|
+
by a separate agent with the juror brief (Awwwards weights, anonymous A/B/C folders, screenshots
|
|
283
|
+
only). The skill was revised after each round from the jurors' reasons and the builders' notes.
|
|
284
|
+
|
|
285
|
+
| Round | Briefs | This skill | Baseline | Atelier | Wins |
|
|
286
|
+
| --- | --- | --- | --- | --- | --- |
|
|
287
|
+
| 1 | 4 | 6.6 | 7.7 | 6.8 | 1 of 4 |
|
|
288
|
+
| 2 | 3 | 7.1 | 8.0 | | 0 of 3 |
|
|
289
|
+
| 3 | 3 | 7.5 | 7.5 | | 1 of 3 |
|
|
290
|
+
| 4 (unseen briefs) | 3 | 6.9 | 7.9 | 7.5 | 0 of 3 |
|
|
291
|
+
| 5 (same three) | 3 | 7.7 | 7.8 | 7.2 | 2 of 3 |
|
|
292
|
+
|
|
293
|
+
Under the inspector, the final builds measured 0 FAIL each; the baselines measured 8 to 13 FAIL each
|
|
294
|
+
(eyebrows, monospace labels, 01/02/03 numbering, hairlines, gradients, shadows, three-line headlines,
|
|
295
|
+
text under 13px).
|
|
296
|
+
|
|
297
|
+
What the jurors rewarded, in the order they named it: an idea that belongs to this client and not to
|
|
298
|
+
the category (the competitor test); one live thing on the page; full content at a readable size; a
|
|
299
|
+
first screen with one dominant element and a real button; drawings of the subject with detail. What
|
|
300
|
+
they punished: a quiet page that read as empty, a small headline, text sliding over pictures or cut
|
|
301
|
+
at the top, a page recoloured mid-section, rows cut at the right edge, a large sentence over three or
|
|
302
|
+
more lines (read as a long headline whatever its markup), navigation that took over the first screen.
|
|
303
|
+
Each of these is now a rule in SKILL.md or a check in the inspector.
|
|
304
|
+
|
|
305
|
+
Limits: one juror per brief per round, so single scores carry about half a point of noise; the round-5
|
|
306
|
+
briefs had been seen in round 4; jurors are models, not people.
|