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,377 @@
|
|
|
1
|
+
# Imagery
|
|
2
|
+
|
|
3
|
+
Pictures are where generated pages most obviously give up: a grey box, an icon in a square, a fake
|
|
4
|
+
dashboard, an abstract blob. This file is how to decide what the pictures are, where to find real ones,
|
|
5
|
+
how to crop and place them, and what to do when there are none.
|
|
6
|
+
|
|
7
|
+
## Contents
|
|
8
|
+
|
|
9
|
+
1. What the study measured
|
|
10
|
+
2. Decide what imagery exists
|
|
11
|
+
3. Real pictures from the open collections
|
|
12
|
+
4. The dealt photographs
|
|
13
|
+
5. Cropping and placing
|
|
14
|
+
6. Treatment
|
|
15
|
+
7. Showing software
|
|
16
|
+
8. Drawing the subject
|
|
17
|
+
9. Type and colour alone
|
|
18
|
+
10. Markup and credits
|
|
19
|
+
11. Video
|
|
20
|
+
|
|
21
|
+
## 1. What the study measured
|
|
22
|
+
|
|
23
|
+
- On 60% of the studied sites one piece of media covers at least half of the first screen; on half of
|
|
24
|
+
them it covers nearly all of it. Top-scored sites: 68% and 56%. Weak sites: 48% and 39%.
|
|
25
|
+
- Only 15% of heroes have no media at all, and those are deliberate typographic statements.
|
|
26
|
+
- Media has square corners on 73% of sites. Where corners are rounded the usual radius is about 12px,
|
|
27
|
+
applied to every image alike.
|
|
28
|
+
- Top-scored pages carry far more imagery (a median of 37 images against 5 on weak pages): the strong
|
|
29
|
+
sites show, the weak ones tell.
|
|
30
|
+
- What the imagery is, by the panel's classification: a mix of kinds 32%, photography 14%, generative
|
|
31
|
+
or WebGL scenes 13%, real product interface 12%, 3D renders 11%, illustration 9%, video 6%, type only
|
|
32
|
+
3%.
|
|
33
|
+
- Among the 54 sites the panel scored under 6.8, legibility (text lost over a busy image, or too
|
|
34
|
+
little contrast) was named as a weakness in 13.
|
|
35
|
+
|
|
36
|
+
## 2. Decide what imagery exists
|
|
37
|
+
|
|
38
|
+
In order of preference:
|
|
39
|
+
|
|
40
|
+
1. **The project's own images.** Product shots, the place, the people, the work. Even ordinary
|
|
41
|
+
photographs of the real thing beat beautiful photographs of something else. Ask what exists; look in
|
|
42
|
+
the repository.
|
|
43
|
+
2. **Images you can generate** with an image tool in this session. Write prompts as a photographer's
|
|
44
|
+
brief: subject, angle, light, background, crop ratio, and "no text". Generate the hero first and
|
|
45
|
+
make the rest match its light.
|
|
46
|
+
3. **Real pictures of the subject's world from the open collections** (section 3). Archives,
|
|
47
|
+
museums and photographers have published millions of pictures anyone may use with a credit: the
|
|
48
|
+
client's city and street in old postcards, maps of its neighbourhood, its materials, its trade in
|
|
49
|
+
engravings, museum objects of its kind. Whenever an honest one exists, it beats a drawing of the
|
|
50
|
+
same thing: it is real, it has detail no drawing in a page's budget reaches, and it carries history.
|
|
51
|
+
Honest means nobody could take it for the client's own product, room, dish, person or team.
|
|
52
|
+
4. **Pictures you draw in code from the subject itself** (section 8), for what no honest picture
|
|
53
|
+
exists of: the product's own objects as flat shapes, the place's tiles and windows, a map of its
|
|
54
|
+
streets, the document a tool produces, the interface of a piece of software. In testing, pages that
|
|
55
|
+
drew their subject with care beat pages that borrowed unrelated photographs every time, and beat
|
|
56
|
+
pages that showed nothing.
|
|
57
|
+
5. **The photographs dealt on the direction sheet.** Real photographs of places, light, texture and
|
|
58
|
+
weather. Use them only where an honestly generic picture fits (the open sea for a house on the sea,
|
|
59
|
+
fog for a quiet retreat). They cannot stand in for a specific product, dish, room, person or
|
|
60
|
+
screen: a foggy motorway on a restaurant page reads as stock at once, and jurors notice.
|
|
61
|
+
6. **Type and colour alone,** done on purpose (section 9).
|
|
62
|
+
|
|
63
|
+
Tell `draw.mjs` the truth with `--have`. If you have no product photographs and no image tool, do not
|
|
64
|
+
pass `product-photo`; the draw will avoid the directions that depend on showing the object. Pictures
|
|
65
|
+
found in the open collections are not the project's own: do not pass `photography` for them.
|
|
66
|
+
|
|
67
|
+
## 3. Real pictures from the open collections
|
|
68
|
+
|
|
69
|
+
`scripts/assets.mjs` searches four open sources without keys and prints, for each find, a direct image
|
|
70
|
+
URL, the page it comes from, its size, its creator, its licence and a credit line:
|
|
71
|
+
|
|
72
|
+
- **Openverse**: one index over Flickr, Wikimedia Commons, museums and libraries.
|
|
73
|
+
- **Wikimedia Commons**: archival photographs, old maps, scans of prints and books, places as they
|
|
74
|
+
look now.
|
|
75
|
+
- **The Art Institute of Chicago** and **The Metropolitan Museum of Art**: public-domain paintings,
|
|
76
|
+
prints, drawings, photographs, textiles and objects, in large scans.
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
node <skill>/scripts/assets.mjs "ghent postcard"
|
|
80
|
+
node <skill>/scripts/assets.mjs "fig" --source museums --orientation portrait
|
|
81
|
+
node <skill>/scripts/assets.mjs "basalt texture" --min-width 2400 --source openverse,commons
|
|
82
|
+
node <skill>/scripts/assets.mjs --get commons:36649959,met:707892 # download, record the credits
|
|
83
|
+
node <skill>/scripts/assets.mjs --credits # footer line and report list
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
By default it keeps only licences that allow commercial use (CC0, public domain, CC BY, CC BY-SA) and
|
|
87
|
+
pictures at least 1000 pixels wide, and checks that every image it prints actually loads.
|
|
88
|
+
`--license pd` keeps only pictures that need no credit; `--orientation`, `--min-width` and `--limit`
|
|
89
|
+
narrow the list; `--source` picks the sources; `--json` gives the raw results. Each result has a ref
|
|
90
|
+
(`commons:36649959`) that `--get` takes.
|
|
91
|
+
|
|
92
|
+
**What to search for.** The inventory (SKILL.md step 1), not the category: "bakery" finds other
|
|
93
|
+
people's bakeries. The subject's world is specific:
|
|
94
|
+
|
|
95
|
+
- **Its place:** the city, the street, the harbour, the valley, in old postcards and photographs
|
|
96
|
+
("ghent postcard", "rotterdam harbour 1920") and as it looks today ("gent korenmarkt").
|
|
97
|
+
- **Its maps:** the street plan, the chart of its bay, the geology of its valley ("ghent old map",
|
|
98
|
+
"nautical chart lisbon").
|
|
99
|
+
- **Its materials,** close enough to read as a surface: the stone of its quay, the grain of its oak,
|
|
100
|
+
its glaze, its tiles ("azulejo tiles", "basalt cobblestones", "oak grain").
|
|
101
|
+
- **Its trade's history:** the old tools, the craft in engravings and trade catalogues, patent
|
|
102
|
+
drawings ("bread oven engraving", "potter's wheel", "bicycle patent drawing").
|
|
103
|
+
- **Museum objects of its kind,** with `--source museums`: a coffee set from about 1810 for a studio
|
|
104
|
+
that makes coffee sets, a woodblock print of a wave for a surf school, a porcelain plate painted
|
|
105
|
+
with figs for a fig orchard.
|
|
106
|
+
- **Scientific imagery:** botanical and zoological plates ("botanical engraving fig"), star charts,
|
|
107
|
+
microscope photographs, satellite views of its coast, geological sections.
|
|
108
|
+
|
|
109
|
+
Search in the place's own words (azulejo, not "blue tile"; Korenmarkt, not "market square"), add a
|
|
110
|
+
medium (postcard, engraving, old map, lithograph, aerial photograph) or a decade, and try two or three
|
|
111
|
+
queries per idea. The museum sources match best on one or two words ("fig", "harbour", "teapot").
|
|
112
|
+
|
|
113
|
+
**What makes a good find.**
|
|
114
|
+
|
|
115
|
+
- It belongs to this subject's world and would not fit the nearest competitor's page.
|
|
116
|
+
- It still reads at the crop the slot needs. Look at it before deciding: `--get` downloads it, then
|
|
117
|
+
open the file. A title is not a picture.
|
|
118
|
+
- It is large enough: twice the width it is shown at for anything full-bleed (the script prints the
|
|
119
|
+
largest size available). A 1024-pixel Flickr photograph is a half-width picture at most.
|
|
120
|
+
- It belongs to one family with the others on the page: all engravings, or all photographs from one
|
|
121
|
+
era, or all close surfaces in one light. A 1900 postcard beside a modern stock photograph beside a
|
|
122
|
+
botanical plate reads as a scrapbook.
|
|
123
|
+
- No watermark, no burned-in text or logo, no frame or scanner edge you cannot crop away, and no
|
|
124
|
+
recognisable living person who could be taken for the client's staff or customers.
|
|
125
|
+
|
|
126
|
+
**Use it creatively.** Found pictures are material, not decoration:
|
|
127
|
+
|
|
128
|
+
- **One archival photograph as the hero,** full-bleed: the street as it was a century ago, behind the
|
|
129
|
+
name of the business that stands in it today, with the year in the caption.
|
|
130
|
+
- **A museum engraving enlarged until its line becomes texture,** cropped tight and returning at
|
|
131
|
+
different scales as the page's one motif (the whole fig plate in the hero, a single leaf of it
|
|
132
|
+
beside the menu).
|
|
133
|
+
- **An engraving or a map on white paper set with `mix-blend-mode: multiply` on the page's colour
|
|
134
|
+
field,** so the ink sits on the ground (section 6).
|
|
135
|
+
- **The real map of the street as the contact section,** the door marked, the north and the scale
|
|
136
|
+
taken from the original.
|
|
137
|
+
- **A material close-up as a whole field:** the quay's stone behind the opening hours.
|
|
138
|
+
- **A run of old postcards or plates as the gallery,** one size, one treatment.
|
|
139
|
+
|
|
140
|
+
Treatments stay within section 6: untouched, greyscale for the whole set, or multiply on a field.
|
|
141
|
+
|
|
142
|
+
**Stay honest.**
|
|
143
|
+
|
|
144
|
+
- **A found picture is never the client's own.** It may show the client's city, its materials, its
|
|
145
|
+
history, the kind of thing it makes; it may never stand in for the client's product, room, dish,
|
|
146
|
+
person, team or customers. If a visitor could take it for the client's own (a bakery counter, a
|
|
147
|
+
plate of pasta, a smiling barista, a guest room), do not use it.
|
|
148
|
+
- **Caption from the source** when a caption helps: what it is and when, as the archive describes it
|
|
149
|
+
("Gand, unloading a steamer, 1905"). Never write a caption that ties it to the client.
|
|
150
|
+
- **Record and credit every picture.** `--get` writes the source, creator, licence and page of each
|
|
151
|
+
download to `assets/credits.json`. CC BY and CC BY-SA require a credit with the title, the creator,
|
|
152
|
+
a link to the source and a link to the licence; `--credits` prints them as one line of HTML for
|
|
153
|
+
the footer (section 10). Public-domain pictures need no credit; give one anyway.
|
|
154
|
+
- **Respect the licence.** CC BY-SA: an altered version (recoloured, combined with other pictures)
|
|
155
|
+
must be shared under the same licence. Non-commercial (NC) and no-derivatives (ND) licences are out
|
|
156
|
+
for a client's site, which is why the script leaves them out unless asked. Read the `note` lines:
|
|
157
|
+
some pictures carry personality rights or a trademark, are public domain only in the United States,
|
|
158
|
+
or come with an archive's statement instead of a licence.
|
|
159
|
+
- **Download, do not hotlink.** Save what you use into the project: `--get` puts it in `assets/` at
|
|
160
|
+
1920 pixels wide (pass `--width 1280` for a picture shown at half the screen, `--width 3840` for a
|
|
161
|
+
very large hero where the source has it). The page then works offline, does not break when an
|
|
162
|
+
archive moves a file, and does not load from someone else's server. Every licence the script
|
|
163
|
+
allows by default permits copying.
|
|
164
|
+
- **List them in the report:** file, title, creator, licence, source page, and where the credit sits.
|
|
165
|
+
`--credits` prints that list too.
|
|
166
|
+
|
|
167
|
+
If two or three honest queries per idea find nothing that fits, draw (section 8). A drawing made for
|
|
168
|
+
the subject is better than a found picture that is merely nearby. If the script cannot reach any
|
|
169
|
+
source (no network), draw, and say so in the report. For moving pictures, the same script searches
|
|
170
|
+
real footage with `--video` (section 11).
|
|
171
|
+
|
|
172
|
+
## 4. The dealt photographs
|
|
173
|
+
|
|
174
|
+
- The sheet lists eight from one set so they share a subject and a light. Use three to six.
|
|
175
|
+
- Each line says where the calm area is. Put text there or keep text off the image.
|
|
176
|
+
- More from the same or another set: `node scripts/draw.mjs --photos list`, `--photos <set>`, or
|
|
177
|
+
`--photos "fog coast"` to search descriptions.
|
|
178
|
+
- URLs have the form `https://picsum.photos/id/<id>/<width>/<height>`. Request the exact pixel size you
|
|
179
|
+
render at twice the CSS size for sharpness, capped around 2400 wide. Add `?grayscale` for
|
|
180
|
+
black-and-white.
|
|
181
|
+
- These are photographs from Unsplash served by Lorem Picsum under the Unsplash licence. List the ids
|
|
182
|
+
you used in your report; they are meant to be replaced by the project's own pictures.
|
|
183
|
+
|
|
184
|
+
## 5. Cropping and placing
|
|
185
|
+
|
|
186
|
+
- **Choose a small set of ratios and stick to them:** for example 4:5 for portraits, 16:10 for
|
|
187
|
+
landscapes and 1:1 for details. Random ratios look like a stock dump.
|
|
188
|
+
- **Go large.** A photograph at full width, or at half the screen and full height, has presence. Six
|
|
189
|
+
small ones in a grid have none. If the image is good, give it the room; if it is not, cut it.
|
|
190
|
+
- **Crop with intent.** Use `object-fit: cover` with an `object-position` chosen per image so the
|
|
191
|
+
subject sits where the composition needs it (off-centre, on a third, against the text side).
|
|
192
|
+
- **Let images touch edges.** Full-bleed, or bleeding off one side, reads as designed. An image
|
|
193
|
+
floating with equal margins on all sides reads as placed by default.
|
|
194
|
+
- **Overlap sparingly and on purpose:** a headline whose last line runs over the top edge of the
|
|
195
|
+
picture, a small image overlapping a large one by a fixed 40–80px. One overlap per screen at most.
|
|
196
|
+
- **Square corners** unless the direction or the one-motif shape says otherwise. If rounded, one radius
|
|
197
|
+
for every image on the page.
|
|
198
|
+
- **No frames:** no borders, no shadows, no device mock-ups, no browser chrome around pictures.
|
|
199
|
+
- **Captions** are one short line in the small size and soft ink under the image, left-aligned to its
|
|
200
|
+
edge. Most images need none.
|
|
201
|
+
|
|
202
|
+
## 6. Treatment
|
|
203
|
+
|
|
204
|
+
One treatment for the whole page:
|
|
205
|
+
|
|
206
|
+
- **Untouched.** The default. Pick images whose light already agrees.
|
|
207
|
+
- **Greyscale.** `filter: grayscale(1) contrast(1.05)`, or `?grayscale` on the URL. Unifies a mixed
|
|
208
|
+
set instantly and suits editorial and typographic directions. Apply to every image or none.
|
|
209
|
+
- **Multiply on a field.** On a light flat ground, `mix-blend-mode: multiply` makes a white studio
|
|
210
|
+
background vanish so a product sits directly on the colour.
|
|
211
|
+
- **Darkened for a dark page.** `filter: brightness(0.85) contrast(1.05)` so the image edges sink into
|
|
212
|
+
the ground.
|
|
213
|
+
|
|
214
|
+
Not treatments: colour washes over photographs, duotone overlays, blur, grain overlays, vignettes,
|
|
215
|
+
tilted "polaroid" frames with shadows.
|
|
216
|
+
|
|
217
|
+
For text on a photograph, a neutral scrim covering only the text area: a solid block at 40–55% black,
|
|
218
|
+
or a fade from 55% black to transparent over the lower third. Never a coloured overlay.
|
|
219
|
+
|
|
220
|
+
## 7. Showing software
|
|
221
|
+
|
|
222
|
+
- Build a real fragment of the interface in HTML at its true size, with believable content, instead of
|
|
223
|
+
a shrunken screenshot or a decorative mock-up. Crop to the part that makes the point: one control,
|
|
224
|
+
one row, one panel.
|
|
225
|
+
- Believable means real labels, real numbers that add up, one item hovered or selected, proper
|
|
226
|
+
alignment. Grey bars standing in for text are worse than no image.
|
|
227
|
+
- Put the fragment directly on the page or on one flat stage colour. No laptop, no phone frame unless
|
|
228
|
+
the product is a phone app and the frame is a plain rounded rectangle.
|
|
229
|
+
- Inside a fragment the product's own interface conventions apply (its small radii, its 1px control
|
|
230
|
+
borders, a shadow on its open menu). Put the attribute `data-ui` on the fragment's root element: the
|
|
231
|
+
inspector and the linter then leave what is inside alone, and hold the page around it to the house
|
|
232
|
+
rules. `data-ui` is for cropped fragments only; wrapping a heading or a whole section in it fails.
|
|
233
|
+
Write the fragment's CSS under a `[data-ui]` selector (`[data-ui] .row { … }`) so the linter can
|
|
234
|
+
tell it apart from page styles.
|
|
235
|
+
- If the user supplies real screenshots, show them large and uncropped at least once.
|
|
236
|
+
|
|
237
|
+
## 8. Drawing the subject
|
|
238
|
+
|
|
239
|
+
When nothing real can be photographed and the open collections hold no honest picture of it, draw it,
|
|
240
|
+
and draw it well. Inline SVG and CSS are enough. Drawings and found pictures can share a page: the
|
|
241
|
+
found ones show the world around the client, the drawings show the client's own things.
|
|
242
|
+
|
|
243
|
+
- **Draw the subject's own things,** not decoration: the stool's three legs and the grain of its seat,
|
|
244
|
+
the enamel sign over the bakery door, the hut's two windows and its stove pipe, the street plan, the
|
|
245
|
+
invoice the tool produces, the festival's stage. If you cannot name what a drawing depicts in the subject's world, it is decoration.
|
|
246
|
+
- **One graphic language for the whole page:** flat filled shapes, no outlines or one consistent
|
|
247
|
+
stroke weight, the same corner and curve vocabulary everywhere, drawn in the palette's real colours
|
|
248
|
+
(fields and accent at full strength, not greys). A set of drawings that obviously belong together
|
|
249
|
+
reads as an identity; a mix of styles reads as clip art.
|
|
250
|
+
- **Colour is the material.** A product sold on its finish is drawn in that finish's colours; a sea house in the
|
|
251
|
+
sea's blues and the sand; never a page of grey placeholders.
|
|
252
|
+
- **Draw with three levels of detail.** Jurors called simple drawings "basic" every time. Give each
|
|
253
|
+
drawing big shapes that read at a glance, middle shapes that describe the thing (the handle, the
|
|
254
|
+
window frame, the step), and small details that reward a second look (the maker's mark, the house
|
|
255
|
+
number, the chipped tile, the hinge, a bird on the roof). Make light with flat tone steps (a lit face
|
|
256
|
+
and a shaded face of each volume), not gradients. A drawing that would pass as a placeholder icon at
|
|
257
|
+
full size is not finished.
|
|
258
|
+
- **Draw large and let it work:** the drawing is the hero's dominant element, a full-width band, a set
|
|
259
|
+
of tiles, the footer mark. Small doodles scattered around read as filler.
|
|
260
|
+
- **Let it carry the idea through the page,** the way a motif does: the same drawn object returns at
|
|
261
|
+
different scales, the tile grid becomes the opening hours, the map becomes the booking section.
|
|
262
|
+
- **Honesty:** say plainly, in small text near the first drawing or in the footer, that the pictures
|
|
263
|
+
are drawn until photographs exist, if the client might otherwise be taken to be showing real
|
|
264
|
+
products. In your report, list which drawings are placeholders for photography.
|
|
265
|
+
- **Not this:** gradient-shaded 3D-looking blobs, isometric clip art, generic line illustrations of
|
|
266
|
+
people at laptops, abstract floating shapes, icons in squares. Those are the generated look.
|
|
267
|
+
|
|
268
|
+
## 9. Type and colour alone
|
|
269
|
+
|
|
270
|
+
This is a legitimate design, not a gap to disguise. Only 7 of the studied sites use no imagery at all,
|
|
271
|
+
and they hold their own: a median panel score of 7.5 against 7.2 for the whole set.
|
|
272
|
+
|
|
273
|
+
- Make the typography the image: one statement at 10–14vw, a list set at 5vw, numerals at display size.
|
|
274
|
+
- Use colour at scale: a full field, an inverted section, a two-field split.
|
|
275
|
+
- Use the subject's own shape as one flat motif if the direction calls for it (a circle, an arc, a
|
|
276
|
+
notch), drawn in CSS, cropped by the viewport.
|
|
277
|
+
- Do not add: icons in squares, abstract gradients, dot grids, wave dividers, floating shapes, emoji,
|
|
278
|
+
generic line illustrations, or an empty box where a picture "will go".
|
|
279
|
+
|
|
280
|
+
## 10. Markup and credits
|
|
281
|
+
|
|
282
|
+
A found picture, downloaded into the project with `--get`, used as the hero:
|
|
283
|
+
|
|
284
|
+
```html
|
|
285
|
+
<img src="assets/fig-engraving.jpg" width="1920" height="2807" fetchpriority="high" decoding="async"
|
|
286
|
+
alt="Hand-coloured engraving of a fig cut open, with its flowers and seeds, in black, pink and green">
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
A dealt photograph further down the page:
|
|
290
|
+
|
|
291
|
+
```html
|
|
292
|
+
<img src="https://picsum.photos/id/626/2400/1500" width="2400" height="1500"
|
|
293
|
+
alt="Red and white lighthouse in a turquoise sea below a chalk cliff" loading="lazy" decoding="async">
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
The credits, as `--credits` prints them, in the footer:
|
|
297
|
+
|
|
298
|
+
```html
|
|
299
|
+
<p class="credits">Pictures: <a href="https://commons.wikimedia.org/wiki/File:Fig_(Ficus_carica_L.);_57_segments_of_flowers_and_fruits_at_Wellcome_V0043000.jpg">“Fig (Ficus carica L.): 57 segments of flowers and fruits”</a>, <a href="https://creativecommons.org/publicdomain/mark/1.0/">public domain</a>, via Wikimedia Commons.</p>
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
- Always `width` and `height` (or `aspect-ratio` in CSS) so nothing jumps while loading.
|
|
303
|
+
- `loading="lazy"` on everything except the hero image, which gets `fetchpriority="high"`.
|
|
304
|
+
- `alt` describes the picture in plain words. Decorative repeats get `alt=""`. The script's suggested
|
|
305
|
+
alt is the archive's title; rewrite it to say what the picture shows.
|
|
306
|
+
- A coloured `background-color` on the image container (the ground or surface tone) so the layout is
|
|
307
|
+
whole before the image arrives.
|
|
308
|
+
- The credit line is part of the footer's design, at full contrast, with its links. Set it at the body
|
|
309
|
+
size; one step smaller only on a page with plenty of running text, because a long credit line in
|
|
310
|
+
small type can become the page's most common text size and fail the inspector's body-size check.
|
|
311
|
+
One line for all pictures; no credit captions laid over the pictures themselves. Credit only the
|
|
312
|
+
pictures the page still uses.
|
|
313
|
+
- A broken image fails the inspector. Check every picture in the screenshots.
|
|
314
|
+
|
|
315
|
+
## 11. Video
|
|
316
|
+
|
|
317
|
+
A moving picture of the subject's world can carry a section the way a photograph does: the river at
|
|
318
|
+
the end of the street, the roaster's drum turning, a timber frame going up. `assets.mjs --video`
|
|
319
|
+
searches real footage without keys: Wikimedia Commons (every video there comes with web-sized
|
|
320
|
+
transcodes; the best source for short clips), the Internet Archive's Prelinger Archives (industrial,
|
|
321
|
+
educational, city and home films from the 1920s to the 1970s, mostly public domain and mostly long)
|
|
322
|
+
and NASA (the Earth from orbit, launches, aircraft, laboratories). The rest of the Internet Archive is
|
|
323
|
+
left out: anyone can upload there, and the licence claims are unchecked.
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
node <skill>/scripts/assets.mjs "coffee roasting" --video
|
|
327
|
+
node <skill>/scripts/assets.mjs "river" --video --source commons,nasa --orientation landscape
|
|
328
|
+
node <skill>/scripts/assets.mjs --get commons:49769620 # the clip, a poster frame, the credit
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
It takes a rendition of 720p or smaller (`--res` changes that), lists short clips first, prints each
|
|
332
|
+
clip's length and file size, and flags anything over 25 MB or longer than a minute. `--get` refuses a
|
|
333
|
+
clip over 25 MB unless you pass `--max-mb`, and saves the source's still frame beside it as the
|
|
334
|
+
poster (Commons and NASA; the archive's own stills are too small). An archive film of ten minutes is
|
|
335
|
+
too heavy as it stands: trim a few seconds from it with ffmpeg if it is installed, or choose a
|
|
336
|
+
shorter clip. Licences, credits and honesty work exactly as for pictures (section 3).
|
|
337
|
+
|
|
338
|
+
**Choosing a clip.**
|
|
339
|
+
|
|
340
|
+
- **Short:** 5 to 20 seconds that loop without a visible jump: water, smoke, a turning drum, traffic,
|
|
341
|
+
leaves, a crowd from far away. Watch it to the end before choosing.
|
|
342
|
+
- **Light:** under about 5 MB for a section and 10 MB for a hero. 720p is plenty behind type.
|
|
343
|
+
- **Clean:** no slate, title card, logo, watermark or burned-in caption. NASA and archive films often
|
|
344
|
+
open with a slate, and the source's poster frame may be that slate. No recognisable person who could
|
|
345
|
+
be taken for the client's staff or customers.
|
|
346
|
+
- **Never the client's own:** a found clip of a roastery is not this roastery.
|
|
347
|
+
- **One per page, two at most.** A page of moving tiles is noise.
|
|
348
|
+
|
|
349
|
+
**On the page.**
|
|
350
|
+
|
|
351
|
+
- Muted, looping, inline, with a poster and a fixed size, as `--get` prints it:
|
|
352
|
+
`<video autoplay muted loop playsinline preload="metadata" poster="assets/river-poster.jpg"
|
|
353
|
+
width="854" height="480" aria-hidden="true"><source src="assets/river.webm" type="video/webm"></video>`.
|
|
354
|
+
No sound and no controls on a decorative loop. `aria-hidden` because it is decoration: whatever the
|
|
355
|
+
clip says that matters belongs in the text beside it.
|
|
356
|
+
- The poster shows before the clip plays, on slow connections and under reduced motion, so it must
|
|
357
|
+
work as a picture on its own. If the source's still is a slate or a blur, take a frame from the clip
|
|
358
|
+
yourself or use a found picture.
|
|
359
|
+
- Under `prefers-reduced-motion: reduce`, stop it and show the poster:
|
|
360
|
+
|
|
361
|
+
```html
|
|
362
|
+
<script>
|
|
363
|
+
const calm = matchMedia('(prefers-reduced-motion: reduce)');
|
|
364
|
+
for (const v of document.querySelectorAll('video[autoplay]')) {
|
|
365
|
+
const sync = () => { if (calm.matches) { v.removeAttribute('autoplay'); v.pause(); v.load(); } else { v.play().catch(() => {}); } };
|
|
366
|
+
sync(); calm.addEventListener('change', sync);
|
|
367
|
+
}
|
|
368
|
+
</script>
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
- Crop and place it like a photograph (sections 5 and 6): `object-fit: cover`, one ratio, square
|
|
372
|
+
corners, no frame, a ground-coloured `background-color` while it loads.
|
|
373
|
+
- Never under body text. A headline over a clip gets the same neutral scrim as text on a photograph,
|
|
374
|
+
and nothing lies on top of a headline or a statement.
|
|
375
|
+
- It is motion: let it be the page's one moving thing, or sit in a section where nothing else moves.
|
|
376
|
+
- Credit it with the pictures: `--credits` prints one footer line for both ("Pictures and footage:")
|
|
377
|
+
and the list for the report, with each clip's length.
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# Layout
|
|
2
|
+
|
|
3
|
+
How the page is put together: margins, the grid, where text sits, how sections differ, navigation,
|
|
4
|
+
endings and the phone. The direction sheet gives the specific compositions; this file gives the habits
|
|
5
|
+
behind them, taken from the panel's notes on the 114 studied sites that scored 7.3 or higher (counts
|
|
6
|
+
below are hand tallies from those notes, so read them as "about").
|
|
7
|
+
|
|
8
|
+
## Contents
|
|
9
|
+
|
|
10
|
+
1. What strong pages do
|
|
11
|
+
2. Margins and the grid
|
|
12
|
+
3. Where text sits
|
|
13
|
+
4. Empty space
|
|
14
|
+
5. Sections: carry the idea, vary the arrangement
|
|
15
|
+
6. Navigation
|
|
16
|
+
7. Endings
|
|
17
|
+
8. The phone is a second composition
|
|
18
|
+
9. How pages fail
|
|
19
|
+
|
|
20
|
+
## 1. What strong pages do
|
|
21
|
+
|
|
22
|
+
- **Tight margins, content to the edges.** About 45 of 114 use outer margins of 32px or less; only
|
|
23
|
+
about 8 use 80px or more. The centred 1100–1300px container is the minority among strong sites and
|
|
24
|
+
the usual frame of the ones the panel called stock.
|
|
25
|
+
- **Text hangs from an off-centre line.** About 22 anchor text to one fixed line that is neither the
|
|
26
|
+
centre nor the margin: a third across, 42%, the midpoint.
|
|
27
|
+
- **Two or three type sizes with nothing between** (about 30): one very large with one small, or
|
|
28
|
+
everything small with the scale given to the image.
|
|
29
|
+
- **One thing per screen** (about 20): one statement, one object, one project.
|
|
30
|
+
- **Sections told apart by their ground.** About 20 change the whole background colour at each
|
|
31
|
+
section; about 12 alternate light and dark; about 10 never change and separate by space alone.
|
|
32
|
+
- **Sections recomposed, not repeated.** About 14 rearrange every section; about 12 alternate a
|
|
33
|
+
full-bleed image screen with a near-empty type screen.
|
|
34
|
+
- **The system broken once, on purpose** (about 14): one centred line on a split page, one paper card
|
|
35
|
+
on a dark page, colour held back until the last screen.
|
|
36
|
+
- **Often no navigation bar** (about 45), and endings that are a designed scene rather than link
|
|
37
|
+
columns.
|
|
38
|
+
- **Few words.** Median 575 on the whole study; some of the best carry under 200.
|
|
39
|
+
|
|
40
|
+
## 2. Margins and the grid
|
|
41
|
+
|
|
42
|
+
```css
|
|
43
|
+
:root {
|
|
44
|
+
--margin: clamp(1rem, 2.2vw, 2rem); /* 16–32px: tight, so content reaches the edges */
|
|
45
|
+
--gutter: clamp(0.75rem, 1.4vw, 1.5rem);
|
|
46
|
+
}
|
|
47
|
+
.wrap { padding-inline: var(--margin); }
|
|
48
|
+
.grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--gutter); }
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- One pair of margins and one grid for the whole page. Every left edge is a column line.
|
|
52
|
+
- Do not wrap the page in a `max-width: 1200px; margin: auto` container by reflex. Let large things
|
|
53
|
+
(type, images, colour fields) run the full width, and constrain only the measure of running text
|
|
54
|
+
(`max-width` in `ch` on the paragraph, not on the page).
|
|
55
|
+
- On very wide screens cap the layout at about 1760–1920px, or let type sized in `vw` stop growing with
|
|
56
|
+
a `clamp()`.
|
|
57
|
+
- Directions that call for wide margins (uneven photographs, the quiet instrument) say so on the
|
|
58
|
+
sheet; follow the sheet.
|
|
59
|
+
- Never draw the grid. Column lines, crosshairs and guides are banned ornaments here even though they
|
|
60
|
+
are fashionable; the grid is felt through alignment.
|
|
61
|
+
|
|
62
|
+
## 3. Where text sits
|
|
63
|
+
|
|
64
|
+
- **Pick the anchor line and reuse it.** If the hero headline starts at column 5, the section
|
|
65
|
+
headings, the pricing figure and the footer links start there too. Two or three anchor lines on a
|
|
66
|
+
whole page; six means nothing was decided.
|
|
67
|
+
- **Off-centre beats centred.** A heading in the left third with its paragraph in the far-right
|
|
68
|
+
column on the same baseline and nothing between; a headline in the bottom third under a deliberate
|
|
69
|
+
void; text docked in corners with the middle given to the picture.
|
|
70
|
+
- **Opposite ends.** Two short texts at opposite ends of one baseline (name left, one-line description
|
|
71
|
+
right) is the commonest alternative to the centred stack.
|
|
72
|
+
- **Centred is a decision.** When a strong page centres, it uses one axis with wide empty flanks and a
|
|
73
|
+
single element per screen, not a centred stack of heading, paragraph and two buttons.
|
|
74
|
+
- **Rows for long copy:** heading in the left third, body in the right two-thirds, the same split for
|
|
75
|
+
every row on the page.
|
|
76
|
+
- Stagger sparingly: a second line indented by a third so a two-line headline steps across the screen.
|
|
77
|
+
|
|
78
|
+
## 4. Empty space
|
|
79
|
+
|
|
80
|
+
Empty space is placed, not left over: an empty left half, a blank right third, 300px of nothing above
|
|
81
|
+
the work.
|
|
82
|
+
|
|
83
|
+
- Decide where the void is and keep it clean: no stray caption, no decorative shape, no faint
|
|
84
|
+
watermark.
|
|
85
|
+
- The gap between sections is clearly larger than any gap inside one (120–220px on desktop,
|
|
86
|
+
72–112px on a phone).
|
|
87
|
+
- Related things sit close; unrelated things sit far. If a heading is equidistant from the paragraph
|
|
88
|
+
above and the one below, fix it: at least twice as much space above as below.
|
|
89
|
+
- When a section looks empty, the answer is almost never "add something". Make the main element
|
|
90
|
+
bigger, or cut the section.
|
|
91
|
+
|
|
92
|
+
## 5. Sections: carry the idea, vary the arrangement
|
|
93
|
+
|
|
94
|
+
The most common failure in every score band is a distinctive first screen followed by stock blocks:
|
|
95
|
+
icon cards, a three-up row, an accordion, a link-column footer. About 25 of the studied sites lose
|
|
96
|
+
points this way, including several above 7.5.
|
|
97
|
+
|
|
98
|
+
- **The idea survives to the last pixel.** Ask of each section, pricing and FAQ included: what does
|
|
99
|
+
the page's idea do here? If the page is a menu, the prices are menu lines. If the name is a
|
|
100
|
+
monument, the footer is the name again. If the object's shape is the motif, the button and the image
|
|
101
|
+
masks carry it.
|
|
102
|
+
- **No two neighbours share a layout.** Use the shape of each dealt blueprint (list, split, statement,
|
|
103
|
+
full-bleed, mosaic, table, strip, pinned …). Count them in the screenshot; a shape used three times
|
|
104
|
+
is the template showing.
|
|
105
|
+
- **Alternate dense and empty, image and type, light and dark** so the scroll has rhythm.
|
|
106
|
+
- **A repeated module is for archives only** (a work index, a menu, a schedule). Anywhere else,
|
|
107
|
+
repetition reads as a kit.
|
|
108
|
+
- **Break the system once.** After the page has established its rule, one planned exception (a single
|
|
109
|
+
centred line, one inverted section, one image at a different scale) is what makes the rule visible.
|
|
110
|
+
- **Short pages are fine.** A quarter of the studied sites are one or two screens. Do not add sections
|
|
111
|
+
to seem complete; each one must carry a claim (see `copy.md` §1).
|
|
112
|
+
|
|
113
|
+
## 6. Navigation
|
|
114
|
+
|
|
115
|
+
- The plain form: the wordmark at one end, three to five text links, one action, all at text size on
|
|
116
|
+
the page ground with no bar, border or background. Median link count in the study is 3.
|
|
117
|
+
- It is also normal to have less: small links in the corners, a single action, or the navigation
|
|
118
|
+
folded into the content (a list of section titles that is itself the index).
|
|
119
|
+
- If it stays fixed, it must never sit on top of content: check every scroll position in the
|
|
120
|
+
screenshots, especially on the phone. Floating pill bars are where the panel most often recorded a
|
|
121
|
+
nav covering text.
|
|
122
|
+
- On a phone: wordmark and one action in view; the links go in a simple full-screen sheet opened by a
|
|
123
|
+
text button ("Menu"), or move to the footer when there are only three.
|
|
124
|
+
- Navigation is small furniture, however it is drawn. On desktop it takes no more than about a tenth
|
|
125
|
+
of the first screen; on a phone it is one row. A blueprint that builds the navigation as a column of
|
|
126
|
+
colour blocks or a stack of tabs gets that treatment on desktop only, and collapses to one row on
|
|
127
|
+
the phone so the headline, the supporting sentence and the action stay in the first screen. In
|
|
128
|
+
blind tests a nav that ate the hero cost a whole point of usability.
|
|
129
|
+
|
|
130
|
+
## 7. Endings
|
|
131
|
+
|
|
132
|
+
- The page should end on a designed scene. In the study: the name at full width (about 18 of 114), the
|
|
133
|
+
hero repeated in inverted colours (about 12), a closing scene of its own such as the one contact
|
|
134
|
+
fact set as a headline (about 14), or simply one quiet line (about 22). Link-column footers appear
|
|
135
|
+
in the panel's notes only as criticism.
|
|
136
|
+
- The full-width name is strong but already a studio habit; use it when the direction is name-led,
|
|
137
|
+
otherwise prefer the blueprint dealt for the footer.
|
|
138
|
+
- Put the practical facts (address, hours, email, legal line) in the text face at a readable size, on
|
|
139
|
+
the same anchor lines as the rest of the page.
|
|
140
|
+
|
|
141
|
+
## 8. The phone is a second composition
|
|
142
|
+
|
|
143
|
+
Design the 390px screen as its own page, not the desktop page squeezed. Strong sites that neglect this
|
|
144
|
+
lose usability points; weak ones are often just broken.
|
|
145
|
+
|
|
146
|
+
- Each blueprint on the sheet has its own phone paragraph. Build it.
|
|
147
|
+
- Keep one dominant thing on the first screen. A wordmark that was 20vw wide on desktop might stack on
|
|
148
|
+
two lines at 26vw on the phone and be even stronger.
|
|
149
|
+
- Re-author line breaks; re-crop images to portrait (`object-position` per breakpoint, or a different
|
|
150
|
+
crop size in the image URL); keep unevenness with alternating widths rather than making everything
|
|
151
|
+
full width.
|
|
152
|
+
- Margins 16–20px. Body text 16–18px. Touch targets at least 44px high.
|
|
153
|
+
- Check 390px in the inspector's screenshots for every round: sideways scroll and three-line headlines
|
|
154
|
+
usually appear here first.
|
|
155
|
+
|
|
156
|
+
## 9. How pages fail
|
|
157
|
+
|
|
158
|
+
From the panel's notes on the 54 sites scoring under 6.8 (counts out of 54):
|
|
159
|
+
|
|
160
|
+
- The whole page is the category's stock template; swap the logo and it could be any competitor
|
|
161
|
+
(about 20).
|
|
162
|
+
- Centred headline, pill badge, two buttons, screenshot or tile grid below (about 9).
|
|
163
|
+
- A distinctive hero, then stock modules in the usual order (about 8, and about 17 more in the middle
|
|
164
|
+
band).
|
|
165
|
+
- A default typeface with no character (about 13).
|
|
166
|
+
- Text too small or too low in contrast (about 13); legibility lost over busy photographs (about 9).
|
|
167
|
+
- An undersized headline and no focal point (about 9).
|
|
168
|
+
- The page never says what the thing is, or shows no work (about 12 and 7).
|
|
169
|
+
- Thin content stretched over many screens, or a single gag (about 11).
|
|
170
|
+
- Gates, preloaders and entry pop-ups before any content (about 9).
|
|
171
|
+
- A phone layout that is the desktop shrunk, or broken (about 8).
|
|
172
|
+
- Fixed elements sitting on content; careless details such as colliding lines (about 7 and 5).
|
|
173
|
+
|
|
174
|
+
And the faults of the best sites, which are not to be copied: body text at 9–13px (about 24 of the 90
|
|
175
|
+
sites at 7.5 or more), information hidden behind the concept (about 20), the idea running out
|
|
176
|
+
mid-page (about 15), text over footage with no scrim (about 12), gates and blank first paints (about
|
|
177
|
+
12), floating elements colliding with content (about 11), and a first screen with no statement of what
|
|
178
|
+
this is and no action (about 9). Say what the thing is, and offer the action, on the first screen.
|