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.
Files changed (429) hide show
  1. package/LICENSE +21 -21
  2. package/THIRD_PARTY_NOTICES.md +65 -65
  3. package/bin/codeply.js +8 -3
  4. package/lib/agent.mjs +2596 -2268
  5. package/lib/ai.js +135 -27
  6. package/lib/ai.mjs +6 -6
  7. package/lib/apply-patch.js +217 -217
  8. package/lib/arity-table.json +138 -138
  9. package/lib/arity.js +70 -70
  10. package/lib/auth.mjs +6 -6
  11. package/lib/autopilot.js +84 -0
  12. package/lib/bot-mail.js +46 -0
  13. package/lib/bots.js +142 -15
  14. package/lib/brain.js +914 -0
  15. package/lib/call-assist.js +120 -0
  16. package/lib/chatgpt.js +282 -282
  17. package/lib/cloud-browser.mjs +143 -143
  18. package/lib/cloud.mjs +1396 -1312
  19. package/lib/commands.js +103 -103
  20. package/lib/computer.js +136 -0
  21. package/lib/design-library/assemble-artifact.mjs +21 -21
  22. package/lib/design-library/cleanup.mjs +45 -45
  23. package/lib/design-library/index.json +22379 -22379
  24. package/lib/design-library/make-table-data.mjs +39 -39
  25. package/lib/design-tools.mjs +173 -0
  26. package/lib/diagnostics.js +192 -192
  27. package/lib/dsh-acp.mjs +444 -0
  28. package/lib/edit-engine.js +364 -364
  29. package/lib/github-agent.mjs +326 -326
  30. package/lib/handoff.mjs +245 -0
  31. package/lib/history.js +78 -75
  32. package/lib/life-sources.js +319 -0
  33. package/lib/life-store.js +356 -0
  34. package/lib/life-triggers.js +286 -0
  35. package/lib/life.js +487 -0
  36. package/lib/mail-watch.js +3 -3
  37. package/lib/mcp.js +258 -258
  38. package/lib/native-tools.mjs +17 -5
  39. package/lib/oauth-connectors.js +76 -21
  40. package/lib/permissions.js +109 -109
  41. package/lib/plugins.js +356 -353
  42. package/lib/reach.js +67 -67
  43. package/lib/render-md.mjs +647 -617
  44. package/lib/screen.js +77 -0
  45. package/lib/server.mjs +458 -457
  46. package/lib/session-db.js +220 -220
  47. package/lib/share.js +208 -168
  48. package/lib/skills.js +4 -1
  49. package/lib/snapshot.js +146 -146
  50. package/lib/subagents.js +4 -2
  51. package/lib/telemetry.js +105 -105
  52. package/lib/terminal-hints.js +154 -154
  53. package/lib/textarea.mjs +264 -258
  54. package/lib/tools.mjs +326 -40
  55. package/lib/tui.mjs +1459 -1086
  56. package/lib/typecheck-worker.js +147 -147
  57. package/lib/web-tools.js +209 -209
  58. package/package.json +1 -1
  59. package/skills/SOURCE.md +58 -58
  60. package/skills/accessibility/SKILL.md +147 -147
  61. package/skills/agent-architecture-audit/SKILL.md +257 -257
  62. package/skills/agent-eval/SKILL.md +147 -147
  63. package/skills/agent-harness-construction/SKILL.md +74 -74
  64. package/skills/agent-introspection-debugging/SKILL.md +154 -154
  65. package/skills/agent-payment-x402/SKILL.md +225 -225
  66. package/skills/agent-self-evaluation/SKILL.md +182 -182
  67. package/skills/agent-self-evaluation/references/evaluation-criteria.md +71 -71
  68. package/skills/agent-self-evaluation/references/hook-integration.md +64 -64
  69. package/skills/agent-sort/SKILL.md +216 -216
  70. package/skills/agentic-engineering/SKILL.md +64 -64
  71. package/skills/agentic-os/SKILL.md +388 -388
  72. package/skills/ai-first-engineering/SKILL.md +52 -52
  73. package/skills/ai-regression-testing/SKILL.md +386 -386
  74. package/skills/android-clean-architecture/SKILL.md +340 -340
  75. package/skills/angular-developer/SKILL.md +155 -155
  76. package/skills/angular-developer/references/angular-animations.md +160 -160
  77. package/skills/angular-developer/references/angular-aria.md +410 -410
  78. package/skills/angular-developer/references/cli.md +86 -86
  79. package/skills/angular-developer/references/component-harnesses.md +59 -59
  80. package/skills/angular-developer/references/component-styling.md +91 -91
  81. package/skills/angular-developer/references/components.md +117 -117
  82. package/skills/angular-developer/references/creating-services.md +97 -97
  83. package/skills/angular-developer/references/data-resolvers.md +69 -69
  84. package/skills/angular-developer/references/define-routes.md +67 -67
  85. package/skills/angular-developer/references/defining-providers.md +72 -72
  86. package/skills/angular-developer/references/di-fundamentals.md +120 -120
  87. package/skills/angular-developer/references/e2e-testing.md +56 -56
  88. package/skills/angular-developer/references/effects.md +83 -83
  89. package/skills/angular-developer/references/hierarchical-injectors.md +43 -43
  90. package/skills/angular-developer/references/host-elements.md +80 -80
  91. package/skills/angular-developer/references/injection-context.md +63 -63
  92. package/skills/angular-developer/references/inputs.md +101 -101
  93. package/skills/angular-developer/references/linked-signal.md +59 -59
  94. package/skills/angular-developer/references/loading-strategies.md +61 -61
  95. package/skills/angular-developer/references/mcp.md +108 -108
  96. package/skills/angular-developer/references/navigate-to-routes.md +69 -69
  97. package/skills/angular-developer/references/outputs.md +86 -86
  98. package/skills/angular-developer/references/reactive-forms.md +122 -122
  99. package/skills/angular-developer/references/rendering-strategies.md +44 -44
  100. package/skills/angular-developer/references/resource.md +77 -77
  101. package/skills/angular-developer/references/route-animations.md +56 -56
  102. package/skills/angular-developer/references/route-guards.md +52 -52
  103. package/skills/angular-developer/references/router-lifecycle.md +45 -45
  104. package/skills/angular-developer/references/router-testing.md +87 -87
  105. package/skills/angular-developer/references/show-routes-with-outlets.md +68 -68
  106. package/skills/angular-developer/references/signal-forms.md +795 -795
  107. package/skills/angular-developer/references/signals-overview.md +94 -94
  108. package/skills/angular-developer/references/tailwind-css.md +69 -69
  109. package/skills/angular-developer/references/template-driven-forms.md +114 -114
  110. package/skills/angular-developer/references/testing-fundamentals.md +65 -65
  111. package/skills/api-connector-builder/SKILL.md +121 -121
  112. package/skills/api-design/SKILL.md +524 -524
  113. package/skills/architecture-decision-records/SKILL.md +180 -180
  114. package/skills/article-writing/SKILL.md +80 -80
  115. package/skills/automation-audit-ops/SKILL.md +143 -143
  116. package/skills/autonomous-agent-harness/SKILL.md +274 -274
  117. package/skills/autonomous-loops/SKILL.md +611 -611
  118. package/skills/backend-patterns/SKILL.md +562 -562
  119. package/skills/benchmark/SKILL.md +95 -95
  120. package/skills/benchmark-methodology/SKILL.md +191 -191
  121. package/skills/benchmark-optimization-loop/SKILL.md +71 -71
  122. package/skills/blender-motion-state-inspection/SKILL.md +165 -165
  123. package/skills/blueprint/SKILL.md +106 -106
  124. package/skills/brand-discovery/SKILL.md +145 -145
  125. package/skills/brand-discovery/references/10_purpose-why.md +40 -40
  126. package/skills/brand-discovery/references/20_positioning.md +44 -44
  127. package/skills/brand-discovery/references/30_audience-niche.md +52 -52
  128. package/skills/brand-discovery/references/40_personality-archetype.md +57 -57
  129. package/skills/brand-discovery/references/50_voice-tone.md +59 -59
  130. package/skills/brand-discovery/references/60_narrative-story.md +50 -50
  131. package/skills/brand-discovery/references/70_founder-tension.md +49 -49
  132. package/skills/brand-discovery/references/90_SYNTHESIS.md +133 -133
  133. package/skills/brand-voice/SKILL.md +98 -98
  134. package/skills/brand-voice/references/voice-profile-schema.md +55 -55
  135. package/skills/browser-qa/SKILL.md +105 -105
  136. package/skills/bun-runtime/SKILL.md +85 -85
  137. package/skills/canary-watch/SKILL.md +108 -108
  138. package/skills/carrier-relationship-management/SKILL.md +212 -212
  139. package/skills/cisco-ios-patterns/SKILL.md +164 -164
  140. package/skills/ck/SKILL.md +148 -148
  141. package/skills/claude-devfleet/SKILL.md +112 -112
  142. package/skills/click-path-audit/SKILL.md +245 -245
  143. package/skills/clickhouse-io/SKILL.md +445 -445
  144. package/skills/code-tour/SKILL.md +254 -254
  145. package/skills/codebase-onboarding/SKILL.md +234 -234
  146. package/skills/codehealth-mcp/SKILL.md +167 -167
  147. package/skills/codeply-taste/LICENSE +21 -0
  148. package/skills/codeply-taste/SKILL.md +100 -0
  149. package/skills/codeply-taste/SOURCE.md +10 -0
  150. package/skills/codeply-taste/assets/base.css +100 -0
  151. package/skills/codeply-taste/assets/base.js +37 -0
  152. package/skills/codeply-taste/library/directions.json +1078 -0
  153. package/skills/codeply-taste/library/heroes.json +894 -0
  154. package/skills/codeply-taste/library/motions.json +57 -0
  155. package/skills/codeply-taste/library/palettes.json +1485 -0
  156. package/skills/codeply-taste/library/photos.json +7240 -0
  157. package/skills/codeply-taste/library/sections.json +4136 -0
  158. package/skills/codeply-taste/library/sites.json +7274 -0
  159. package/skills/codeply-taste/library/type.json +2024 -0
  160. package/skills/codeply-taste/references/colour.md +141 -0
  161. package/skills/codeply-taste/references/copy.md +177 -0
  162. package/skills/codeply-taste/references/critique.md +171 -0
  163. package/skills/codeply-taste/references/imagery.md +377 -0
  164. package/skills/codeply-taste/references/layout.md +178 -0
  165. package/skills/codeply-taste/references/motion.md +292 -0
  166. package/skills/codeply-taste/references/research.md +306 -0
  167. package/skills/codeply-taste/references/tells.md +115 -0
  168. package/skills/codeply-taste/references/type.md +170 -0
  169. package/skills/codeply-taste/scripts/assets.mjs +865 -0
  170. package/skills/codeply-taste/scripts/draw.mjs +525 -0
  171. package/skills/codeply-taste/scripts/inspect.mjs +205 -0
  172. package/skills/codeply-taste/scripts/lib/cdp.mjs +205 -0
  173. package/skills/codeply-taste/scripts/lib/probe.mjs +569 -0
  174. package/skills/codeply-taste/scripts/lib/rules.mjs +137 -0
  175. package/skills/codeply-taste/scripts/lint.mjs +108 -0
  176. package/skills/coding-standards/SKILL.md +551 -551
  177. package/skills/competitive-platform-analysis/SKILL.md +214 -214
  178. package/skills/competitive-report-structure/SKILL.md +162 -162
  179. package/skills/compose-multiplatform-patterns/SKILL.md +300 -300
  180. package/skills/config-gc/SKILL.md +120 -120
  181. package/skills/configure-ecc/SKILL.md +385 -385
  182. package/skills/connections-optimizer/SKILL.md +190 -190
  183. package/skills/content-engine/SKILL.md +132 -132
  184. package/skills/content-hash-cache-pattern/SKILL.md +162 -162
  185. package/skills/context-budget/SKILL.md +136 -136
  186. package/skills/continuous-agent-loop/SKILL.md +46 -46
  187. package/skills/continuous-learning/SKILL.md +132 -132
  188. package/skills/continuous-learning-v2/SKILL.md +361 -361
  189. package/skills/contract-first/SKILL.md +287 -287
  190. package/skills/cost-aware-llm-pipeline/SKILL.md +184 -184
  191. package/skills/cost-tracking/SKILL.md +97 -97
  192. package/skills/council/SKILL.md +204 -204
  193. package/skills/cpp-coding-standards/SKILL.md +724 -724
  194. package/skills/cpp-testing/SKILL.md +325 -325
  195. package/skills/crosspost/SKILL.md +112 -112
  196. package/skills/csharp-testing/SKILL.md +322 -322
  197. package/skills/customer-billing-ops/SKILL.md +141 -141
  198. package/skills/customs-trade-compliance/SKILL.md +263 -263
  199. package/skills/dart-flutter-patterns/SKILL.md +564 -564
  200. package/skills/dashboard-builder/SKILL.md +109 -109
  201. package/skills/data-scraper-agent/SKILL.md +765 -765
  202. package/skills/data-throughput-accelerator/SKILL.md +74 -74
  203. package/skills/database-migrations/SKILL.md +430 -430
  204. package/skills/deep-research/SKILL.md +160 -160
  205. package/skills/defi-amm-security/SKILL.md +167 -167
  206. package/skills/delivery-gate/SKILL.md +126 -126
  207. package/skills/deployment-patterns/SKILL.md +428 -428
  208. package/skills/design-system/SKILL.md +83 -83
  209. package/skills/django-celery/SKILL.md +458 -458
  210. package/skills/django-patterns/SKILL.md +735 -735
  211. package/skills/django-security/SKILL.md +644 -644
  212. package/skills/django-tdd/SKILL.md +730 -730
  213. package/skills/django-verification/SKILL.md +470 -470
  214. package/skills/dmux-workflows/SKILL.md +192 -192
  215. package/skills/docker-patterns/SKILL.md +365 -365
  216. package/skills/documentation-lookup/SKILL.md +91 -91
  217. package/skills/dotnet-patterns/SKILL.md +322 -322
  218. package/skills/dynamic-workflow-mode/SKILL.md +124 -124
  219. package/skills/e2e-testing/SKILL.md +327 -327
  220. package/skills/ecc-guide/SKILL.md +190 -190
  221. package/skills/ecc-recipes/SKILL.md +149 -149
  222. package/skills/ecc-tools-cost-audit/SKILL.md +161 -161
  223. package/skills/email-ops/SKILL.md +122 -122
  224. package/skills/energy-procurement/SKILL.md +228 -228
  225. package/skills/enterprise-agent-ops/SKILL.md +51 -51
  226. package/skills/error-handling/SKILL.md +377 -377
  227. package/skills/eval-harness/SKILL.md +271 -271
  228. package/skills/evm-token-decimals/SKILL.md +131 -131
  229. package/skills/exa-search/SKILL.md +108 -108
  230. package/skills/fal-ai-media/SKILL.md +289 -289
  231. package/skills/fastapi-patterns/SKILL.md +514 -514
  232. package/skills/finance-billing-ops/SKILL.md +128 -128
  233. package/skills/flox-environments/SKILL.md +497 -497
  234. package/skills/flutter-dart-code-review/SKILL.md +436 -436
  235. package/skills/foundation-models-on-device/SKILL.md +243 -243
  236. package/skills/frontend-a11y/SKILL.md +446 -446
  237. package/skills/frontend-design-direction/SKILL.md +93 -93
  238. package/skills/frontend-patterns/SKILL.md +657 -657
  239. package/skills/frontend-slides/SKILL.md +185 -185
  240. package/skills/fsharp-testing/SKILL.md +281 -281
  241. package/skills/gan-style-harness/SKILL.md +279 -279
  242. package/skills/gateguard/SKILL.md +133 -133
  243. package/skills/generating-python-installer/SKILL.md +820 -820
  244. package/skills/git-workflow/SKILL.md +716 -716
  245. package/skills/github-ops/SKILL.md +145 -145
  246. package/skills/golang-patterns/SKILL.md +676 -676
  247. package/skills/golang-testing/SKILL.md +721 -721
  248. package/skills/google-workspace-ops/SKILL.md +96 -96
  249. package/skills/growth-log/SKILL.md +128 -128
  250. package/skills/healthcare-cdss-patterns/SKILL.md +246 -246
  251. package/skills/healthcare-emr-patterns/SKILL.md +160 -160
  252. package/skills/healthcare-eval-harness/SKILL.md +208 -208
  253. package/skills/healthcare-phi-compliance/SKILL.md +146 -146
  254. package/skills/hermes-imports/SKILL.md +89 -89
  255. package/skills/hexagonal-architecture/SKILL.md +277 -277
  256. package/skills/hipaa-compliance/SKILL.md +79 -79
  257. package/skills/homelab-network-readiness/SKILL.md +170 -170
  258. package/skills/homelab-network-setup/SKILL.md +130 -130
  259. package/skills/homelab-pihole-dns/SKILL.md +275 -275
  260. package/skills/homelab-vlan-segmentation/SKILL.md +312 -312
  261. package/skills/homelab-wireguard-vpn/SKILL.md +306 -306
  262. package/skills/hookify-rules/SKILL.md +128 -128
  263. package/skills/inherit-legacy-style/SKILL.md +157 -157
  264. package/skills/intent-driven-development/SKILL.md +360 -360
  265. package/skills/inventory-demand-planning/SKILL.md +247 -247
  266. package/skills/investor-materials/SKILL.md +97 -97
  267. package/skills/investor-outreach/SKILL.md +92 -92
  268. package/skills/ios-icon-gen/SKILL.md +158 -158
  269. package/skills/iterative-retrieval/SKILL.md +212 -212
  270. package/skills/ito-basket-compare/SKILL.md +64 -64
  271. package/skills/ito-compute/SKILL.md +129 -129
  272. package/skills/ito-data-atlas-agent/SKILL.md +64 -64
  273. package/skills/ito-market-intelligence/SKILL.md +61 -61
  274. package/skills/ito-trade-planner/SKILL.md +68 -68
  275. package/skills/java-coding-standards/SKILL.md +384 -384
  276. package/skills/jira-integration/SKILL.md +303 -303
  277. package/skills/jpa-patterns/SKILL.md +152 -152
  278. package/skills/knowledge-ops/SKILL.md +155 -155
  279. package/skills/kotlin-coroutines-flows/SKILL.md +285 -285
  280. package/skills/kotlin-exposed-patterns/SKILL.md +720 -720
  281. package/skills/kotlin-ktor-patterns/SKILL.md +690 -690
  282. package/skills/kotlin-patterns/SKILL.md +712 -712
  283. package/skills/kotlin-testing/SKILL.md +825 -825
  284. package/skills/kubernetes-patterns/SKILL.md +756 -756
  285. package/skills/laravel-patterns/SKILL.md +416 -416
  286. package/skills/laravel-plugin-discovery/SKILL.md +230 -230
  287. package/skills/laravel-security/SKILL.md +948 -948
  288. package/skills/laravel-tdd/SKILL.md +675 -675
  289. package/skills/laravel-verification/SKILL.md +180 -180
  290. package/skills/latency-critical-systems/SKILL.md +75 -75
  291. package/skills/lead-intelligence/SKILL.md +322 -322
  292. package/skills/liquid-glass-design/SKILL.md +279 -279
  293. package/skills/llm-trading-agent-security/SKILL.md +147 -147
  294. package/skills/logistics-exception-management/SKILL.md +222 -222
  295. package/skills/loop-design-check/SKILL.md +143 -143
  296. package/skills/mailtrap-email-integration/SKILL.md +77 -77
  297. package/skills/make-interfaces-feel-better/SKILL.md +152 -152
  298. package/skills/manim-video/SKILL.md +90 -90
  299. package/skills/market-research/SKILL.md +76 -76
  300. package/skills/marketing-campaign/SKILL.md +114 -114
  301. package/skills/mcp-server-patterns/SKILL.md +70 -70
  302. package/skills/messages-ops/SKILL.md +105 -105
  303. package/skills/ml-adoption-playbook/SKILL.md +57 -57
  304. package/skills/mle-workflow/SKILL.md +348 -348
  305. package/skills/motion-advanced/SKILL.md +596 -596
  306. package/skills/motion-foundations/SKILL.md +299 -299
  307. package/skills/motion-patterns/SKILL.md +434 -434
  308. package/skills/motion-ui/SKILL.md +576 -576
  309. package/skills/mysql-patterns/SKILL.md +413 -413
  310. package/skills/nanoclaw-repl/SKILL.md +34 -34
  311. package/skills/nestjs-patterns/SKILL.md +231 -231
  312. package/skills/netmiko-ssh-automation/SKILL.md +174 -174
  313. package/skills/network-bgp-diagnostics/SKILL.md +168 -168
  314. package/skills/network-config-validation/SKILL.md +211 -211
  315. package/skills/network-interface-health/SKILL.md +153 -153
  316. package/skills/nextjs-turbopack/SKILL.md +58 -58
  317. package/skills/nodejs-keccak256/SKILL.md +103 -103
  318. package/skills/nutrient-document-processing/SKILL.md +168 -168
  319. package/skills/nuxt4-patterns/SKILL.md +101 -101
  320. package/skills/openclaw-persona-forge/SKILL.md +289 -289
  321. package/skills/openclaw-persona-forge/references/avatar-style.md +124 -124
  322. package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -53
  323. package/skills/openclaw-persona-forge/references/error-handling.md +53 -53
  324. package/skills/openclaw-persona-forge/references/identity-tension.md +48 -48
  325. package/skills/openclaw-persona-forge/references/naming-system.md +39 -39
  326. package/skills/openclaw-persona-forge/references/output-template.md +166 -166
  327. package/skills/opensource-pipeline/SKILL.md +256 -256
  328. package/skills/orch-add-feature/SKILL.md +45 -45
  329. package/skills/orch-build-mvp/SKILL.md +49 -49
  330. package/skills/orch-change-feature/SKILL.md +43 -43
  331. package/skills/orch-fix-defect/SKILL.md +43 -43
  332. package/skills/orch-pipeline/SKILL.md +121 -121
  333. package/skills/orch-refine-code/SKILL.md +44 -44
  334. package/skills/parallel-execution-optimizer/SKILL.md +74 -74
  335. package/skills/perl-patterns/SKILL.md +505 -505
  336. package/skills/perl-security/SKILL.md +504 -504
  337. package/skills/perl-testing/SKILL.md +476 -476
  338. package/skills/plan-canvas/SKILL.md +153 -153
  339. package/skills/plan-orchestrate/SKILL.md +263 -263
  340. package/skills/plankton-code-quality/SKILL.md +237 -237
  341. package/skills/postgres-patterns/SKILL.md +148 -148
  342. package/skills/prediction-market-oracle-research/SKILL.md +64 -64
  343. package/skills/prediction-market-risk-review/SKILL.md +61 -61
  344. package/skills/premium-web-design/SKILL.md +154 -154
  345. package/skills/prisma-patterns/SKILL.md +401 -401
  346. package/skills/product-capability/SKILL.md +142 -142
  347. package/skills/product-lens/SKILL.md +93 -93
  348. package/skills/production-audit/SKILL.md +207 -207
  349. package/skills/production-scheduling/SKILL.md +238 -238
  350. package/skills/project-flow-ops/SKILL.md +112 -112
  351. package/skills/prompt-optimizer/SKILL.md +398 -398
  352. package/skills/python-patterns/SKILL.md +751 -751
  353. package/skills/python-testing/SKILL.md +817 -817
  354. package/skills/pytorch-patterns/SKILL.md +397 -397
  355. package/skills/quality-nonconformance/SKILL.md +260 -260
  356. package/skills/quarkus-patterns/SKILL.md +723 -723
  357. package/skills/quarkus-security/SKILL.md +468 -468
  358. package/skills/quarkus-tdd/SKILL.md +812 -812
  359. package/skills/quarkus-verification/SKILL.md +480 -480
  360. package/skills/ralphinho-rfc-pipeline/SKILL.md +68 -68
  361. package/skills/react-native-patterns/SKILL.md +326 -326
  362. package/skills/react-patterns/SKILL.md +342 -342
  363. package/skills/react-performance/SKILL.md +575 -575
  364. package/skills/react-testing/SKILL.md +424 -424
  365. package/skills/recsys-pipeline-architect/SKILL.md +115 -115
  366. package/skills/recursive-decision-ledger/SKILL.md +81 -81
  367. package/skills/redis-patterns/SKILL.md +404 -404
  368. package/skills/regex-vs-llm-structured-text/SKILL.md +221 -221
  369. package/skills/remotion-video-creation/SKILL.md +43 -43
  370. package/skills/repo-scan/SKILL.md +79 -79
  371. package/skills/research-ops/SKILL.md +113 -113
  372. package/skills/returns-reverse-logistics/SKILL.md +240 -240
  373. package/skills/rules-distill/SKILL.md +265 -265
  374. package/skills/rust-patterns/SKILL.md +500 -500
  375. package/skills/rust-testing/SKILL.md +501 -501
  376. package/skills/safety-guard/SKILL.md +76 -76
  377. package/skills/santa-method/SKILL.md +307 -307
  378. package/skills/scientific-db-pubmed-database/SKILL.md +176 -176
  379. package/skills/scientific-db-uspto-database/SKILL.md +178 -178
  380. package/skills/scientific-pkg-gget/SKILL.md +167 -167
  381. package/skills/scientific-thinking-literature-review/SKILL.md +193 -193
  382. package/skills/scientific-thinking-scholar-evaluation/SKILL.md +161 -161
  383. package/skills/search-first/SKILL.md +183 -183
  384. package/skills/security-bounty-hunter/SKILL.md +100 -100
  385. package/skills/security-review/SKILL.md +504 -504
  386. package/skills/security-scan/SKILL.md +166 -166
  387. package/skills/seo/SKILL.md +155 -155
  388. package/skills/skill-comply/SKILL.md +59 -59
  389. package/skills/skill-scout/SKILL.md +141 -141
  390. package/skills/skill-stocktake/SKILL.md +195 -195
  391. package/skills/social-graph-ranker/SKILL.md +155 -155
  392. package/skills/social-publisher/SKILL.md +130 -130
  393. package/skills/springboot-patterns/SKILL.md +315 -315
  394. package/skills/springboot-security/SKILL.md +273 -273
  395. package/skills/springboot-tdd/SKILL.md +159 -159
  396. package/skills/springboot-verification/SKILL.md +232 -232
  397. package/skills/strategic-compact/SKILL.md +142 -142
  398. package/skills/swift-actor-persistence/SKILL.md +144 -144
  399. package/skills/swift-concurrency-6-2/SKILL.md +216 -216
  400. package/skills/swift-protocol-di-testing/SKILL.md +191 -191
  401. package/skills/swiftui-patterns/SKILL.md +259 -259
  402. package/skills/taste/SKILL.md +264 -264
  403. package/skills/taste/references/genre-taxonomy.md +87 -87
  404. package/skills/tdd-workflow/SKILL.md +583 -583
  405. package/skills/team-agent-orchestration/SKILL.md +111 -111
  406. package/skills/team-builder/SKILL.md +169 -169
  407. package/skills/terminal-ops/SKILL.md +110 -110
  408. package/skills/tinystruct-patterns/SKILL.md +279 -279
  409. package/skills/tinystruct-patterns/references/architecture.md +90 -90
  410. package/skills/tinystruct-patterns/references/data-handling.md +60 -60
  411. package/skills/tinystruct-patterns/references/database.md +99 -99
  412. package/skills/tinystruct-patterns/references/routing.md +64 -64
  413. package/skills/tinystruct-patterns/references/system-usage.md +97 -97
  414. package/skills/tinystruct-patterns/references/testing.md +72 -72
  415. package/skills/token-budget-advisor/SKILL.md +134 -134
  416. package/skills/ui-demo/SKILL.md +466 -466
  417. package/skills/ui-to-vue/SKILL.md +135 -135
  418. package/skills/uncloud/SKILL.md +344 -344
  419. package/skills/unified-memory/SKILL.md +170 -170
  420. package/skills/unified-notifications-ops/SKILL.md +188 -188
  421. package/skills/verification-loop/SKILL.md +129 -129
  422. package/skills/video-editing/SKILL.md +311 -311
  423. package/skills/videodb/SKILL.md +375 -375
  424. package/skills/visa-doc-translate/SKILL.md +117 -117
  425. package/skills/vite-patterns/SKILL.md +450 -450
  426. package/skills/vue-patterns/SKILL.md +471 -471
  427. package/skills/windows-desktop-e2e/SKILL.md +888 -888
  428. package/skills/workspace-surface-audit/SKILL.md +126 -126
  429. 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.