@palate/cli 0.0.0-stage → 0.0.2
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 +20 -0
- package/README.md +153 -2
- package/bin/palate.mjs +894 -0
- package/kb/anatomy/data-table.md +24 -0
- package/kb/anatomy/empty-state.md +16 -0
- package/kb/anatomy/filter-toolbar.md +19 -0
- package/kb/anatomy/meter.md +16 -0
- package/kb/anatomy/product-window.md +18 -0
- package/kb/anatomy/settings-page.md +18 -0
- package/kb/anatomy/status-indicator.md +17 -0
- package/kb/anatomy/toast-undo.md +16 -0
- package/kb/bench/briefs.json +618 -0
- package/kb/craft/SOURCES.md +48 -0
- package/kb/craft/creativity.md +55 -0
- package/kb/craft/details.md +75 -0
- package/kb/craft/landing-demos.md +46 -0
- package/kb/craft/mistakes.md +73 -0
- package/kb/craft/motion.md +53 -0
- package/kb/craft/principles.md +68 -0
- package/kb/index/discovery.json +1 -0
- package/kb/inspiration/index.json +79 -0
- package/kb/moves/animated-comparison-table.md +58 -0
- package/kb/moves/before-after-slider.md +58 -0
- package/kb/moves/bento-live-tiles.md +57 -0
- package/kb/moves/calm-motion-system.md +63 -0
- package/kb/moves/canvas-grain.md +58 -0
- package/kb/moves/changelog-as-magazine.md +56 -0
- package/kb/moves/code-drawn-diagram.md +56 -0
- package/kb/moves/colophon.md +54 -0
- package/kb/moves/command-palette-site-nav.md +58 -0
- package/kb/moves/confetti-free-celebration.md +58 -0
- package/kb/moves/console-easter-egg.md +57 -0
- package/kb/moves/copy-confirmation.md +57 -0
- package/kb/moves/cursor-reactive-light.md +57 -0
- package/kb/moves/dark-band-contrast-section.md +55 -0
- package/kb/moves/designed-dark-mode.md +58 -0
- package/kb/moves/duotone-photography.md +55 -0
- package/kb/moves/editorial-drop-cap.md +58 -0
- package/kb/moves/editorial-grid-pull-quotes.md +55 -0
- package/kb/moves/engraving-colour-lens.md +64 -0
- package/kb/moves/explorable-control.md +57 -0
- package/kb/moves/feature-films-on-painted-stages.md +58 -0
- package/kb/moves/first-win-onboarding.md +59 -0
- package/kb/moves/footer-live-status.md +56 -0
- package/kb/moves/footer-rewards-the-end.md +58 -0
- package/kb/moves/generative-brand-pattern.md +55 -0
- package/kb/moves/gentle-error-nudge.md +59 -0
- package/kb/moves/halftone-dot-imagery.md +55 -0
- package/kb/moves/hand-drawn-annotations.md +55 -0
- package/kb/moves/hero-paints-itself-in.md +65 -0
- package/kb/moves/honest-progress-narration.md +58 -0
- package/kb/moves/honest-testimonial-wall.md +57 -0
- package/kb/moves/inline-sparklines-in-copy.md +57 -0
- package/kb/moves/inspect-our-taste.md +58 -0
- package/kb/moves/interactive-pricing-calculator.md +59 -0
- package/kb/moves/isometric-illustration-system.md +56 -0
- package/kb/moves/kinetic-variable-type.md +57 -0
- package/kb/moves/konami-secret.md +59 -0
- package/kb/moves/layered-paper-depth.md +56 -0
- package/kb/moves/lightweight-3d-object-hero.md +59 -0
- package/kb/moves/line-engraving-from-image.md +63 -0
- package/kb/moves/link-preview-peek.md +57 -0
- package/kb/moves/live-data-ticker.md +61 -0
- package/kb/moves/made-with-proof.md +51 -0
- package/kb/moves/magnetic-buttons.md +55 -0
- package/kb/moves/marquee-done-right.md +58 -0
- package/kb/moves/moves.yaml +450 -0
- package/kb/moves/museum-painting-backdrop.md +59 -0
- package/kb/moves/one-colour-brand-world.md +56 -0
- package/kb/moves/playful-404.md +58 -0
- package/kb/moves/pointer-highlight-word.md +56 -0
- package/kb/moves/product-in-context.md +56 -0
- package/kb/moves/real-world-data.md +58 -0
- package/kb/moves/referral-reward-reveal.md +59 -0
- package/kb/moves/riso-print-texture.md +57 -0
- package/kb/moves/screenshot-detail-crops.md +56 -0
- package/kb/moves/scroll-progress-chapters.md +57 -0
- package/kb/moves/scroll-scrubbed-product-film.md +62 -0
- package/kb/moves/self-playing-product-demo.md +61 -0
- package/kb/moves/shape-continuity-morph.md +58 -0
- package/kb/moves/sliding-nav-indicator.md +58 -0
- package/kb/moves/sticky-scroll-story.md +56 -0
- package/kb/moves/story-led-long-scroll.md +56 -0
- package/kb/moves/tactile-button.md +63 -0
- package/kb/moves/technical-drawing-lines.md +57 -0
- package/kb/moves/time-of-day-theming.md +56 -0
- package/kb/moves/tiny-game-easter-egg.md +60 -0
- package/kb/moves/type-decode-reveal.md +57 -0
- package/kb/moves/typographic-numeral-hero.md +58 -0
- package/kb/moves/view-transitions-between-pages.md +57 -0
- package/kb/moves/waitlist-position-live.md +60 -0
- package/kb/patterns/app-team-members.md +27 -0
- package/kb/patterns/chat-agent-approvals.md +31 -0
- package/kb/patterns/commerce-product-page.md +34 -0
- package/kb/patterns/dashboard-entity-table.md +37 -0
- package/kb/patterns/dashboard-home-today.md +24 -0
- package/kb/patterns/docs-api-reference.md +31 -0
- package/kb/patterns/marketing-product-led-landing.md +30 -0
- package/kb/patterns/mobile-daily-checklist.md +26 -0
- package/kb/references/index.json +1 -0
- package/kb/references/thumbs/004c5e9072.jpg +0 -0
- package/kb/references/thumbs/008915eb21.jpg +0 -0
- package/kb/references/thumbs/0098cf66c2.jpg +0 -0
- package/kb/references/thumbs/012e61b31f.jpg +0 -0
- package/kb/references/thumbs/014d4e46fc.jpg +0 -0
- package/kb/references/thumbs/01e54f394a.jpg +0 -0
- package/kb/references/thumbs/01e99a579c.jpg +0 -0
- package/kb/references/thumbs/01fd014575.jpg +0 -0
- package/kb/references/thumbs/022778ca72.jpg +0 -0
- package/kb/references/thumbs/02717bf1e1.jpg +0 -0
- package/kb/references/thumbs/02a5cfdbe9.jpg +0 -0
- package/kb/references/thumbs/02c9823f8d.jpg +0 -0
- package/kb/references/thumbs/02f3974613.jpg +0 -0
- package/kb/references/thumbs/032427f1ce.jpg +0 -0
- package/kb/references/thumbs/03ba677d07.jpg +0 -0
- package/kb/references/thumbs/04f2476cfe.jpg +0 -0
- package/kb/references/thumbs/0563e7c52e.jpg +0 -0
- package/kb/references/thumbs/05fa6b8eef.jpg +0 -0
- package/kb/references/thumbs/065bce1517.jpg +0 -0
- package/kb/references/thumbs/06c017f113.jpg +0 -0
- package/kb/references/thumbs/0770e2d8d3.jpg +0 -0
- package/kb/references/thumbs/078a26c4cb.jpg +0 -0
- package/kb/references/thumbs/08679b6e84.jpg +0 -0
- package/kb/references/thumbs/088c45a34c.jpg +0 -0
- package/kb/references/thumbs/089e9fd4e4.jpg +0 -0
- package/kb/references/thumbs/08f773231e.jpg +0 -0
- package/kb/references/thumbs/093ca3e2e3.jpg +0 -0
- package/kb/references/thumbs/0963320f74.jpg +0 -0
- package/kb/references/thumbs/09fc1ded85.jpg +0 -0
- package/kb/references/thumbs/0a368f3963.jpg +0 -0
- package/kb/references/thumbs/0a9e0e5201.jpg +0 -0
- package/kb/references/thumbs/0aace67ee7.jpg +0 -0
- package/kb/references/thumbs/0b61ecf793.jpg +0 -0
- package/kb/references/thumbs/0bde18ae09.jpg +0 -0
- package/kb/references/thumbs/0bf7ee8143.jpg +0 -0
- package/kb/references/thumbs/0ca20a13e0.jpg +0 -0
- package/kb/references/thumbs/0cdc0198c4.jpg +0 -0
- package/kb/references/thumbs/0cf9790b28.jpg +0 -0
- package/kb/references/thumbs/0d0202904b.jpg +0 -0
- package/kb/references/thumbs/0d053aba18.jpg +0 -0
- package/kb/references/thumbs/0d0c2c13d2.jpg +0 -0
- package/kb/references/thumbs/0d30be99b0.jpg +0 -0
- package/kb/references/thumbs/0d503da1b7.jpg +0 -0
- package/kb/references/thumbs/0ddad7b740.jpg +0 -0
- package/kb/references/thumbs/0e0a148101.jpg +0 -0
- package/kb/references/thumbs/0e401b6b75.jpg +0 -0
- package/kb/references/thumbs/0e8f32ba0f.jpg +0 -0
- package/kb/references/thumbs/0ef1966a7d.jpg +0 -0
- package/kb/references/thumbs/0efd416d11.jpg +0 -0
- package/kb/references/thumbs/0f3af263ae.jpg +0 -0
- package/kb/references/thumbs/0f9644c3a5.jpg +0 -0
- package/kb/references/thumbs/1020552737.jpg +0 -0
- package/kb/references/thumbs/1037626587.jpg +0 -0
- package/kb/references/thumbs/10512b7e94.jpg +0 -0
- package/kb/references/thumbs/106dc4a7b5.jpg +0 -0
- package/kb/references/thumbs/108943f6f7.jpg +0 -0
- package/kb/references/thumbs/10a5551d51.jpg +0 -0
- package/kb/references/thumbs/10dd01076c.jpg +0 -0
- package/kb/references/thumbs/11b06e39da.jpg +0 -0
- package/kb/references/thumbs/11baa1ec83.jpg +0 -0
- package/kb/references/thumbs/11bbe12167.jpg +0 -0
- package/kb/references/thumbs/11ca37feb8.jpg +0 -0
- package/kb/references/thumbs/11f14d3f12.jpg +0 -0
- package/kb/references/thumbs/124530ceb5.jpg +0 -0
- package/kb/references/thumbs/1276402336.jpg +0 -0
- package/kb/references/thumbs/1280e5c9d6.jpg +0 -0
- package/kb/references/thumbs/12cac0d172.jpg +0 -0
- package/kb/references/thumbs/138be6623a.jpg +0 -0
- package/kb/references/thumbs/13a0c544d1.jpg +0 -0
- package/kb/references/thumbs/13a32cb94c.jpg +0 -0
- package/kb/references/thumbs/144035d641.jpg +0 -0
- package/kb/references/thumbs/1457e41924.jpg +0 -0
- package/kb/references/thumbs/14972e3a86.jpg +0 -0
- package/kb/references/thumbs/15a47f2e4c.jpg +0 -0
- package/kb/references/thumbs/15aa15d22e.jpg +0 -0
- package/kb/references/thumbs/160dcd24b7.jpg +0 -0
- package/kb/references/thumbs/1610978529.jpg +0 -0
- package/kb/references/thumbs/16db30ba37.jpg +0 -0
- package/kb/references/thumbs/16f19ae4f3.jpg +0 -0
- package/kb/references/thumbs/16f758b03f.jpg +0 -0
- package/kb/references/thumbs/1748e5b751.jpg +0 -0
- package/kb/references/thumbs/175d0b0e69.jpg +0 -0
- package/kb/references/thumbs/178f571a36.jpg +0 -0
- package/kb/references/thumbs/17c43dc025.jpg +0 -0
- package/kb/references/thumbs/17c7f05b50.jpg +0 -0
- package/kb/references/thumbs/17f97e61dd.jpg +0 -0
- package/kb/references/thumbs/1804e17365.jpg +0 -0
- package/kb/references/thumbs/195c162ed1.jpg +0 -0
- package/kb/references/thumbs/19e3699c29.jpg +0 -0
- package/kb/references/thumbs/1a48e0a4d5.jpg +0 -0
- package/kb/references/thumbs/1a6cda265e.jpg +0 -0
- package/kb/references/thumbs/1a7e012091.jpg +0 -0
- package/kb/references/thumbs/1a9173a172.jpg +0 -0
- package/kb/references/thumbs/1b34a6b4d2.jpg +0 -0
- package/kb/references/thumbs/1b5284f3b2.jpg +0 -0
- package/kb/references/thumbs/1b93fbd6d3.jpg +0 -0
- package/kb/references/thumbs/1c6728fef6.jpg +0 -0
- package/kb/references/thumbs/1c6f101618.jpg +0 -0
- package/kb/references/thumbs/1cf7011a94.jpg +0 -0
- package/kb/references/thumbs/1d1769e539.jpg +0 -0
- package/kb/references/thumbs/1d1fd23199.jpg +0 -0
- package/kb/references/thumbs/1d7b6602ac.jpg +0 -0
- package/kb/references/thumbs/1dbbc61b9e.jpg +0 -0
- package/kb/references/thumbs/1dbdd6d21d.jpg +0 -0
- package/kb/references/thumbs/1dd873744b.jpg +0 -0
- package/kb/references/thumbs/1df4dd7cf9.jpg +0 -0
- package/kb/references/thumbs/1ece8c35b8.jpg +0 -0
- package/kb/references/thumbs/1f0e5b9aa4.jpg +0 -0
- package/kb/references/thumbs/1f1419651b.jpg +0 -0
- package/kb/references/thumbs/1f2a6da92d.jpg +0 -0
- package/kb/references/thumbs/1f651f33c0.jpg +0 -0
- package/kb/references/thumbs/1f8b697d18.jpg +0 -0
- package/kb/references/thumbs/1fee3824cd.jpg +0 -0
- package/kb/references/thumbs/1ff7757853.jpg +0 -0
- package/kb/references/thumbs/2043182f01.jpg +0 -0
- package/kb/references/thumbs/2059dabcd5.jpg +0 -0
- package/kb/references/thumbs/209d9dbb95.jpg +0 -0
- package/kb/references/thumbs/20d8923554.jpg +0 -0
- package/kb/references/thumbs/210dd3b671.jpg +0 -0
- package/kb/references/thumbs/2120719116.jpg +0 -0
- package/kb/references/thumbs/21a7384429.jpg +0 -0
- package/kb/references/thumbs/225f187391.jpg +0 -0
- package/kb/references/thumbs/230caf7dd2.jpg +0 -0
- package/kb/references/thumbs/235afad355.jpg +0 -0
- package/kb/references/thumbs/2378066687.jpg +0 -0
- package/kb/references/thumbs/241faf68a1.jpg +0 -0
- package/kb/references/thumbs/24d9f1a9b9.jpg +0 -0
- package/kb/references/thumbs/2505c8b9a0.jpg +0 -0
- package/kb/references/thumbs/25593638ca.jpg +0 -0
- package/kb/references/thumbs/25dd454f18.jpg +0 -0
- package/kb/references/thumbs/2602e123e2.jpg +0 -0
- package/kb/references/thumbs/26095c0b11.jpg +0 -0
- package/kb/references/thumbs/26260d6238.jpg +0 -0
- package/kb/references/thumbs/26bba21836.jpg +0 -0
- package/kb/references/thumbs/26bde3520b.jpg +0 -0
- package/kb/references/thumbs/272e22067c.jpg +0 -0
- package/kb/references/thumbs/27421b3226.jpg +0 -0
- package/kb/references/thumbs/2769ebca41.jpg +0 -0
- package/kb/references/thumbs/27e2f6e8b0.jpg +0 -0
- package/kb/references/thumbs/28432ba373.jpg +0 -0
- package/kb/references/thumbs/2846626f19.jpg +0 -0
- package/kb/references/thumbs/28750e821e.jpg +0 -0
- package/kb/references/thumbs/289481230f.jpg +0 -0
- package/kb/references/thumbs/2897967408.jpg +0 -0
- package/kb/references/thumbs/28c0a5fa17.jpg +0 -0
- package/kb/references/thumbs/28c181fba5.jpg +0 -0
- package/kb/references/thumbs/29806f539f.jpg +0 -0
- package/kb/references/thumbs/2997f56ee7.jpg +0 -0
- package/kb/references/thumbs/29b34a10fb.jpg +0 -0
- package/kb/references/thumbs/29bd78cdb4.jpg +0 -0
- package/kb/references/thumbs/29c8c6c22a.jpg +0 -0
- package/kb/references/thumbs/2ac23f7fae.jpg +0 -0
- package/kb/references/thumbs/2b76e13f79.jpg +0 -0
- package/kb/references/thumbs/2b84226479.jpg +0 -0
- package/kb/references/thumbs/2bf2dbf737.jpg +0 -0
- package/kb/references/thumbs/2bf89abbf6.jpg +0 -0
- package/kb/references/thumbs/2c562cd534.jpg +0 -0
- package/kb/references/thumbs/2cfe9d48c4.jpg +0 -0
- package/kb/references/thumbs/2d49f19b27.jpg +0 -0
- package/kb/references/thumbs/2dc8670da7.jpg +0 -0
- package/kb/references/thumbs/2de947c469.jpg +0 -0
- package/kb/references/thumbs/2e075ca79f.jpg +0 -0
- package/kb/references/thumbs/2eb0820e6b.jpg +0 -0
- package/kb/references/thumbs/2ec56a9dc0.jpg +0 -0
- package/kb/references/thumbs/30bb4ad607.jpg +0 -0
- package/kb/references/thumbs/30d19b8444.jpg +0 -0
- package/kb/references/thumbs/3173c71d73.jpg +0 -0
- package/kb/references/thumbs/31e59e4518.jpg +0 -0
- package/kb/references/thumbs/322b8960e8.jpg +0 -0
- package/kb/references/thumbs/325c9be6f4.jpg +0 -0
- package/kb/references/thumbs/3273338982.jpg +0 -0
- package/kb/references/thumbs/32f8387f38.jpg +0 -0
- package/kb/references/thumbs/332f6b74c3.jpg +0 -0
- package/kb/references/thumbs/334b146b6a.jpg +0 -0
- package/kb/references/thumbs/339abd60e4.jpg +0 -0
- package/kb/references/thumbs/33e88ec295.jpg +0 -0
- package/kb/references/thumbs/340931b5d4.jpg +0 -0
- package/kb/references/thumbs/34165a93bd.jpg +0 -0
- package/kb/references/thumbs/34d0575dd7.jpg +0 -0
- package/kb/references/thumbs/3549e75f0a.jpg +0 -0
- package/kb/references/thumbs/35827f1561.jpg +0 -0
- package/kb/references/thumbs/37c50280ec.jpg +0 -0
- package/kb/references/thumbs/37e66ecf11.jpg +0 -0
- package/kb/references/thumbs/3841a04fdc.jpg +0 -0
- package/kb/references/thumbs/38490c088f.jpg +0 -0
- package/kb/references/thumbs/3850319e9f.jpg +0 -0
- package/kb/references/thumbs/3856a64166.jpg +0 -0
- package/kb/references/thumbs/3881f211c2.jpg +0 -0
- package/kb/references/thumbs/38c7dde2f3.jpg +0 -0
- package/kb/references/thumbs/38ce9e486c.jpg +0 -0
- package/kb/references/thumbs/390ea8e01b.jpg +0 -0
- package/kb/references/thumbs/391b7fc27c.jpg +0 -0
- package/kb/references/thumbs/395f7214dc.jpg +0 -0
- package/kb/references/thumbs/39e81a5db2.jpg +0 -0
- package/kb/references/thumbs/3a67c8d655.jpg +0 -0
- package/kb/references/thumbs/3a89c25e3b.jpg +0 -0
- package/kb/references/thumbs/3aa0837542.jpg +0 -0
- package/kb/references/thumbs/3aae18aa8a.jpg +0 -0
- package/kb/references/thumbs/3bdbe767db.jpg +0 -0
- package/kb/references/thumbs/3c0616fc7f.jpg +0 -0
- package/kb/references/thumbs/3c18e9db1d.jpg +0 -0
- package/kb/references/thumbs/3c5a14076c.jpg +0 -0
- package/kb/references/thumbs/3ca9ec15c6.jpg +0 -0
- package/kb/references/thumbs/3d7756fd35.jpg +0 -0
- package/kb/references/thumbs/3dd45bd33d.jpg +0 -0
- package/kb/references/thumbs/3de72d5414.jpg +0 -0
- package/kb/references/thumbs/3dede597af.jpg +0 -0
- package/kb/references/thumbs/3ea948619e.jpg +0 -0
- package/kb/references/thumbs/402c12054c.jpg +0 -0
- package/kb/references/thumbs/403ab4af90.jpg +0 -0
- package/kb/references/thumbs/40773a8c63.jpg +0 -0
- package/kb/references/thumbs/407d9583db.jpg +0 -0
- package/kb/references/thumbs/415dc1d84c.jpg +0 -0
- package/kb/references/thumbs/420b676a4f.jpg +0 -0
- package/kb/references/thumbs/42a1ee85eb.jpg +0 -0
- package/kb/references/thumbs/43059221aa.jpg +0 -0
- package/kb/references/thumbs/432fa0d22c.jpg +0 -0
- package/kb/references/thumbs/43826f20e3.jpg +0 -0
- package/kb/references/thumbs/43ac55c98a.jpg +0 -0
- package/kb/references/thumbs/43d098f3c3.jpg +0 -0
- package/kb/references/thumbs/4449d80c2c.jpg +0 -0
- package/kb/references/thumbs/44625727dc.jpg +0 -0
- package/kb/references/thumbs/4482bb87a1.jpg +0 -0
- package/kb/references/thumbs/44b078acdc.jpg +0 -0
- package/kb/references/thumbs/44d0305850.jpg +0 -0
- package/kb/references/thumbs/456bb6b59e.jpg +0 -0
- package/kb/references/thumbs/45df73ce48.jpg +0 -0
- package/kb/references/thumbs/45edb45d87.jpg +0 -0
- package/kb/references/thumbs/4671d57cd5.jpg +0 -0
- package/kb/references/thumbs/46cc108518.jpg +0 -0
- package/kb/references/thumbs/470022e614.jpg +0 -0
- package/kb/references/thumbs/4719a669ce.jpg +0 -0
- package/kb/references/thumbs/47404f5ad4.jpg +0 -0
- package/kb/references/thumbs/479d3eb977.jpg +0 -0
- package/kb/references/thumbs/479ed92ceb.jpg +0 -0
- package/kb/references/thumbs/47baed50c7.jpg +0 -0
- package/kb/references/thumbs/47fdcfd7b0.jpg +0 -0
- package/kb/references/thumbs/48fd5e94c5.jpg +0 -0
- package/kb/references/thumbs/493807917b.jpg +0 -0
- package/kb/references/thumbs/49a1c67293.jpg +0 -0
- package/kb/references/thumbs/49e2d7fafe.jpg +0 -0
- package/kb/references/thumbs/49f540fcb6.jpg +0 -0
- package/kb/references/thumbs/4a67ec4028.jpg +0 -0
- package/kb/references/thumbs/4a93275b04.jpg +0 -0
- package/kb/references/thumbs/4aae6f52da.jpg +0 -0
- package/kb/references/thumbs/4b1bae66bd.jpg +0 -0
- package/kb/references/thumbs/4b75da15a9.jpg +0 -0
- package/kb/references/thumbs/4b77789b88.jpg +0 -0
- package/kb/references/thumbs/4bc2f3f3a4.jpg +0 -0
- package/kb/references/thumbs/4c48f27b88.jpg +0 -0
- package/kb/references/thumbs/4c52bd8bfb.jpg +0 -0
- package/kb/references/thumbs/4c9b4acc60.jpg +0 -0
- package/kb/references/thumbs/4cbf0752d4.jpg +0 -0
- package/kb/references/thumbs/4cd2672517.jpg +0 -0
- package/kb/references/thumbs/4dd22a8181.jpg +0 -0
- package/kb/references/thumbs/4ee3447314.jpg +0 -0
- package/kb/references/thumbs/4ef29c8144.jpg +0 -0
- package/kb/references/thumbs/4f82fadfd6.jpg +0 -0
- package/kb/references/thumbs/4fc9b643d8.jpg +0 -0
- package/kb/references/thumbs/50549524b0.jpg +0 -0
- package/kb/references/thumbs/509a615883.jpg +0 -0
- package/kb/references/thumbs/50c03ef855.jpg +0 -0
- package/kb/references/thumbs/50cf9acad6.jpg +0 -0
- package/kb/references/thumbs/51131b025c.jpg +0 -0
- package/kb/references/thumbs/51da1124f0.jpg +0 -0
- package/kb/references/thumbs/524d5e7288.jpg +0 -0
- package/kb/references/thumbs/5251247c81.jpg +0 -0
- package/kb/references/thumbs/526b91b7ec.jpg +0 -0
- package/kb/references/thumbs/52f02f6c2e.jpg +0 -0
- package/kb/references/thumbs/530ab530dc.jpg +0 -0
- package/kb/references/thumbs/5335ee4404.jpg +0 -0
- package/kb/references/thumbs/5385b90939.jpg +0 -0
- package/kb/references/thumbs/53c54654cc.jpg +0 -0
- package/kb/references/thumbs/5420794c6c.jpg +0 -0
- package/kb/references/thumbs/542a9dce8b.jpg +0 -0
- package/kb/references/thumbs/5571530a5f.jpg +0 -0
- package/kb/references/thumbs/56cc68d804.jpg +0 -0
- package/kb/references/thumbs/577b7f7c44.jpg +0 -0
- package/kb/references/thumbs/57adf8f1bb.jpg +0 -0
- package/kb/references/thumbs/57c5f5e3a6.jpg +0 -0
- package/kb/references/thumbs/57ffe4e839.jpg +0 -0
- package/kb/references/thumbs/5817dfc7d6.jpg +0 -0
- package/kb/references/thumbs/581a182a7a.jpg +0 -0
- package/kb/references/thumbs/58807679c8.jpg +0 -0
- package/kb/references/thumbs/589a1d9111.jpg +0 -0
- package/kb/references/thumbs/59167391ab.jpg +0 -0
- package/kb/references/thumbs/5a70420166.jpg +0 -0
- package/kb/references/thumbs/5b10df1b8d.jpg +0 -0
- package/kb/references/thumbs/5b7a712fdb.jpg +0 -0
- package/kb/references/thumbs/5bc46b92ad.jpg +0 -0
- package/kb/references/thumbs/5c0546a120.jpg +0 -0
- package/kb/references/thumbs/5c2b6125a8.jpg +0 -0
- package/kb/references/thumbs/5c536b9e42.jpg +0 -0
- package/kb/references/thumbs/5c8e441d30.jpg +0 -0
- package/kb/references/thumbs/5cb6f1baa5.jpg +0 -0
- package/kb/references/thumbs/5ce6c1f21e.jpg +0 -0
- package/kb/references/thumbs/5cef052c0a.jpg +0 -0
- package/kb/references/thumbs/5d08438209.jpg +0 -0
- package/kb/references/thumbs/5d0f9af9b0.jpg +0 -0
- package/kb/references/thumbs/5d300ed332.jpg +0 -0
- package/kb/references/thumbs/5d708a4794.jpg +0 -0
- package/kb/references/thumbs/5de8826a98.jpg +0 -0
- package/kb/references/thumbs/5df7bff22c.jpg +0 -0
- package/kb/references/thumbs/5e087d0f00.jpg +0 -0
- package/kb/references/thumbs/5e44e70ca0.jpg +0 -0
- package/kb/references/thumbs/5eff5d80ce.jpg +0 -0
- package/kb/references/thumbs/5f015c96b1.jpg +0 -0
- package/kb/references/thumbs/5f3289b7c4.jpg +0 -0
- package/kb/references/thumbs/5f830c40eb.jpg +0 -0
- package/kb/references/thumbs/60c4c3527b.jpg +0 -0
- package/kb/references/thumbs/60e9e594dd.jpg +0 -0
- package/kb/references/thumbs/615421d7be.jpg +0 -0
- package/kb/references/thumbs/6176e4004f.jpg +0 -0
- package/kb/references/thumbs/61f0fe5e06.jpg +0 -0
- package/kb/references/thumbs/6213785db4.jpg +0 -0
- package/kb/references/thumbs/62a670ae09.jpg +0 -0
- package/kb/references/thumbs/63cc12981b.jpg +0 -0
- package/kb/references/thumbs/641f15cc71.jpg +0 -0
- package/kb/references/thumbs/642ab2081d.jpg +0 -0
- package/kb/references/thumbs/644a59bf6e.jpg +0 -0
- package/kb/references/thumbs/644da8a8e3.jpg +0 -0
- package/kb/references/thumbs/6458986897.jpg +0 -0
- package/kb/references/thumbs/64cfbd7b93.jpg +0 -0
- package/kb/references/thumbs/661a57686a.jpg +0 -0
- package/kb/references/thumbs/66355a813a.jpg +0 -0
- package/kb/references/thumbs/664396dd44.jpg +0 -0
- package/kb/references/thumbs/66d832d65f.jpg +0 -0
- package/kb/references/thumbs/66de9e9833.jpg +0 -0
- package/kb/references/thumbs/6750964fd9.jpg +0 -0
- package/kb/references/thumbs/67c7164832.jpg +0 -0
- package/kb/references/thumbs/681600b6cd.jpg +0 -0
- package/kb/references/thumbs/682e75afe4.jpg +0 -0
- package/kb/references/thumbs/69274bc952.jpg +0 -0
- package/kb/references/thumbs/696ec08c52.jpg +0 -0
- package/kb/references/thumbs/69760111cc.jpg +0 -0
- package/kb/references/thumbs/697e32664f.jpg +0 -0
- package/kb/references/thumbs/69df92544b.jpg +0 -0
- package/kb/references/thumbs/69e48c5229.jpg +0 -0
- package/kb/references/thumbs/6a5fb75de1.jpg +0 -0
- package/kb/references/thumbs/6a7389e472.jpg +0 -0
- package/kb/references/thumbs/6a9b041e02.jpg +0 -0
- package/kb/references/thumbs/6ab2fa93ee.jpg +0 -0
- package/kb/references/thumbs/6ae3400319.jpg +0 -0
- package/kb/references/thumbs/6b21344bf3.jpg +0 -0
- package/kb/references/thumbs/6bd1b67a8a.jpg +0 -0
- package/kb/references/thumbs/6c99156c4f.jpg +0 -0
- package/kb/references/thumbs/6cc9b65384.jpg +0 -0
- package/kb/references/thumbs/6d15830a73.jpg +0 -0
- package/kb/references/thumbs/6d4c33d180.jpg +0 -0
- package/kb/references/thumbs/6e36815799.jpg +0 -0
- package/kb/references/thumbs/6eddb9cbfc.jpg +0 -0
- package/kb/references/thumbs/6f97968a7c.jpg +0 -0
- package/kb/references/thumbs/6fa0716a7d.jpg +0 -0
- package/kb/references/thumbs/6facd57184.jpg +0 -0
- package/kb/references/thumbs/6fd57b785a.jpg +0 -0
- package/kb/references/thumbs/700b3cb185.jpg +0 -0
- package/kb/references/thumbs/71197443fa.jpg +0 -0
- package/kb/references/thumbs/72082bc9ee.jpg +0 -0
- package/kb/references/thumbs/72453db479.jpg +0 -0
- package/kb/references/thumbs/72cd64d500.jpg +0 -0
- package/kb/references/thumbs/72d1e75283.jpg +0 -0
- package/kb/references/thumbs/72e13f7f5b.jpg +0 -0
- package/kb/references/thumbs/7459f8e644.jpg +0 -0
- package/kb/references/thumbs/7470d55c79.jpg +0 -0
- package/kb/references/thumbs/74c468f02a.jpg +0 -0
- package/kb/references/thumbs/74fed6eb77.jpg +0 -0
- package/kb/references/thumbs/756e05080d.jpg +0 -0
- package/kb/references/thumbs/75df7e5f49.jpg +0 -0
- package/kb/references/thumbs/76226da6ef.jpg +0 -0
- package/kb/references/thumbs/76a34aa056.jpg +0 -0
- package/kb/references/thumbs/76c7076589.jpg +0 -0
- package/kb/references/thumbs/76cccc396c.jpg +0 -0
- package/kb/references/thumbs/774654789f.jpg +0 -0
- package/kb/references/thumbs/7746cc494d.jpg +0 -0
- package/kb/references/thumbs/7766e36aa3.jpg +0 -0
- package/kb/references/thumbs/78049331ef.jpg +0 -0
- package/kb/references/thumbs/78808a0ca5.jpg +0 -0
- package/kb/references/thumbs/7890b0a310.jpg +0 -0
- package/kb/references/thumbs/78911975e6.jpg +0 -0
- package/kb/references/thumbs/78d289d5a0.jpg +0 -0
- package/kb/references/thumbs/794126267e.jpg +0 -0
- package/kb/references/thumbs/7976eb9025.jpg +0 -0
- package/kb/references/thumbs/798519ec7c.jpg +0 -0
- package/kb/references/thumbs/7a6cc5eecc.jpg +0 -0
- package/kb/references/thumbs/7ac8a7cd4a.jpg +0 -0
- package/kb/references/thumbs/7b1341d61d.jpg +0 -0
- package/kb/references/thumbs/7b9c4031e3.jpg +0 -0
- package/kb/references/thumbs/7ba5ad3779.jpg +0 -0
- package/kb/references/thumbs/7be6eb2bd0.jpg +0 -0
- package/kb/references/thumbs/7c30864f5d.jpg +0 -0
- package/kb/references/thumbs/7c379b5e17.jpg +0 -0
- package/kb/references/thumbs/7c4050eb02.jpg +0 -0
- package/kb/references/thumbs/7ca47b3221.jpg +0 -0
- package/kb/references/thumbs/7d43516bd7.jpg +0 -0
- package/kb/references/thumbs/7da9dbb98a.jpg +0 -0
- package/kb/references/thumbs/7ddda8f57c.jpg +0 -0
- package/kb/references/thumbs/7ece6d215c.jpg +0 -0
- package/kb/references/thumbs/7eebf029de.jpg +0 -0
- package/kb/references/thumbs/7f45483c15.jpg +0 -0
- package/kb/references/thumbs/7fde06eaa5.jpg +0 -0
- package/kb/references/thumbs/80407b97e9.jpg +0 -0
- package/kb/references/thumbs/80f0a6cf4b.jpg +0 -0
- package/kb/references/thumbs/8118b451b8.jpg +0 -0
- package/kb/references/thumbs/816baed4a8.jpg +0 -0
- package/kb/references/thumbs/817d2d15d9.jpg +0 -0
- package/kb/references/thumbs/8260cb430d.jpg +0 -0
- package/kb/references/thumbs/827b562899.jpg +0 -0
- package/kb/references/thumbs/8293cf1e92.jpg +0 -0
- package/kb/references/thumbs/8294653169.jpg +0 -0
- package/kb/references/thumbs/83061f871f.jpg +0 -0
- package/kb/references/thumbs/833df778ca.jpg +0 -0
- package/kb/references/thumbs/83d3acaafc.jpg +0 -0
- package/kb/references/thumbs/844c6efeff.jpg +0 -0
- package/kb/references/thumbs/84563d482a.jpg +0 -0
- package/kb/references/thumbs/848082dd94.jpg +0 -0
- package/kb/references/thumbs/8494b1da94.jpg +0 -0
- package/kb/references/thumbs/84b71014be.jpg +0 -0
- package/kb/references/thumbs/84be4a5f3c.jpg +0 -0
- package/kb/references/thumbs/84fd0fd25a.jpg +0 -0
- package/kb/references/thumbs/853e488e22.jpg +0 -0
- package/kb/references/thumbs/858c91585d.jpg +0 -0
- package/kb/references/thumbs/85903e8fe9.jpg +0 -0
- package/kb/references/thumbs/86597d43fd.jpg +0 -0
- package/kb/references/thumbs/866eb99500.jpg +0 -0
- package/kb/references/thumbs/86ac050340.jpg +0 -0
- package/kb/references/thumbs/86afec7b64.jpg +0 -0
- package/kb/references/thumbs/87238127f5.jpg +0 -0
- package/kb/references/thumbs/87321df792.jpg +0 -0
- package/kb/references/thumbs/87460f70cd.jpg +0 -0
- package/kb/references/thumbs/8770dfeaec.jpg +0 -0
- package/kb/references/thumbs/8798451a8c.jpg +0 -0
- package/kb/references/thumbs/87da1f34a3.jpg +0 -0
- package/kb/references/thumbs/882cdf8c05.jpg +0 -0
- package/kb/references/thumbs/8839f4106f.jpg +0 -0
- package/kb/references/thumbs/8844455212.jpg +0 -0
- package/kb/references/thumbs/88abba0497.jpg +0 -0
- package/kb/references/thumbs/88b372435d.jpg +0 -0
- package/kb/references/thumbs/88bd4f35fa.jpg +0 -0
- package/kb/references/thumbs/88c71a075e.jpg +0 -0
- package/kb/references/thumbs/892e5f048e.jpg +0 -0
- package/kb/references/thumbs/893cc8e920.jpg +0 -0
- package/kb/references/thumbs/896c198814.jpg +0 -0
- package/kb/references/thumbs/8a8e22f756.jpg +0 -0
- package/kb/references/thumbs/8a9d8a35cb.jpg +0 -0
- package/kb/references/thumbs/8ab1d67fec.jpg +0 -0
- package/kb/references/thumbs/8ab201fe12.jpg +0 -0
- package/kb/references/thumbs/8ac372c102.jpg +0 -0
- package/kb/references/thumbs/8b15736d62.jpg +0 -0
- package/kb/references/thumbs/8b1d8d6a05.jpg +0 -0
- package/kb/references/thumbs/8bb6050e20.jpg +0 -0
- package/kb/references/thumbs/8c6c9d1577.jpg +0 -0
- package/kb/references/thumbs/8d337851e0.jpg +0 -0
- package/kb/references/thumbs/8d44b33cc5.jpg +0 -0
- package/kb/references/thumbs/8d4536ff3b.jpg +0 -0
- package/kb/references/thumbs/8d9b99454a.jpg +0 -0
- package/kb/references/thumbs/8dda2303ff.jpg +0 -0
- package/kb/references/thumbs/8dec722d62.jpg +0 -0
- package/kb/references/thumbs/8e0ea4ca74.jpg +0 -0
- package/kb/references/thumbs/8ebba84d69.jpg +0 -0
- package/kb/references/thumbs/8ef09140c0.jpg +0 -0
- package/kb/references/thumbs/8f2928a1b0.jpg +0 -0
- package/kb/references/thumbs/8f88f9ddba.jpg +0 -0
- package/kb/references/thumbs/8fa4451009.jpg +0 -0
- package/kb/references/thumbs/90109b0e02.jpg +0 -0
- package/kb/references/thumbs/90e854e5c9.jpg +0 -0
- package/kb/references/thumbs/914e79f893.jpg +0 -0
- package/kb/references/thumbs/9161369197.jpg +0 -0
- package/kb/references/thumbs/9165c87d6f.jpg +0 -0
- package/kb/references/thumbs/9193f6558a.jpg +0 -0
- package/kb/references/thumbs/91ac7df877.jpg +0 -0
- package/kb/references/thumbs/9216bd4931.jpg +0 -0
- package/kb/references/thumbs/922ae8a26a.jpg +0 -0
- package/kb/references/thumbs/92a70e6867.jpg +0 -0
- package/kb/references/thumbs/92c77ece22.jpg +0 -0
- package/kb/references/thumbs/92e5914fbf.jpg +0 -0
- package/kb/references/thumbs/92ee36419a.jpg +0 -0
- package/kb/references/thumbs/94153a60b0.jpg +0 -0
- package/kb/references/thumbs/9449666640.jpg +0 -0
- package/kb/references/thumbs/944be6a646.jpg +0 -0
- package/kb/references/thumbs/945831476e.jpg +0 -0
- package/kb/references/thumbs/94c1af82f4.jpg +0 -0
- package/kb/references/thumbs/9599d6d589.jpg +0 -0
- package/kb/references/thumbs/960710f4cf.jpg +0 -0
- package/kb/references/thumbs/9608f12d64.jpg +0 -0
- package/kb/references/thumbs/962dabfaa0.jpg +0 -0
- package/kb/references/thumbs/965a3a95c6.jpg +0 -0
- package/kb/references/thumbs/9672ed5ae4.jpg +0 -0
- package/kb/references/thumbs/96891ae9c1.jpg +0 -0
- package/kb/references/thumbs/96e1907c99.jpg +0 -0
- package/kb/references/thumbs/96f25b6578.jpg +0 -0
- package/kb/references/thumbs/97211df9ae.jpg +0 -0
- package/kb/references/thumbs/9769d763a5.jpg +0 -0
- package/kb/references/thumbs/9792bd6d05.jpg +0 -0
- package/kb/references/thumbs/97d2837e3e.jpg +0 -0
- package/kb/references/thumbs/97d90d1d85.jpg +0 -0
- package/kb/references/thumbs/97fcd5774a.jpg +0 -0
- package/kb/references/thumbs/980f68564e.jpg +0 -0
- package/kb/references/thumbs/98511fb393.jpg +0 -0
- package/kb/references/thumbs/98f8fa694d.jpg +0 -0
- package/kb/references/thumbs/9a42c6bb97.jpg +0 -0
- package/kb/references/thumbs/9ab3600a06.jpg +0 -0
- package/kb/references/thumbs/9ab48d9130.jpg +0 -0
- package/kb/references/thumbs/9ad519197d.jpg +0 -0
- package/kb/references/thumbs/9b1382c657.jpg +0 -0
- package/kb/references/thumbs/9b6cc1e077.jpg +0 -0
- package/kb/references/thumbs/9beede8480.jpg +0 -0
- package/kb/references/thumbs/9bf8976952.jpg +0 -0
- package/kb/references/thumbs/9cace7b75a.jpg +0 -0
- package/kb/references/thumbs/9cdcc5745e.jpg +0 -0
- package/kb/references/thumbs/9d0b269074.jpg +0 -0
- package/kb/references/thumbs/9d41788b48.jpg +0 -0
- package/kb/references/thumbs/9d475bd6af.jpg +0 -0
- package/kb/references/thumbs/9e6bc543d0.jpg +0 -0
- package/kb/references/thumbs/9ed0e0a206.jpg +0 -0
- package/kb/references/thumbs/9ef538de13.jpg +0 -0
- package/kb/references/thumbs/9efc373ab4.jpg +0 -0
- package/kb/references/thumbs/9f4a939fa5.jpg +0 -0
- package/kb/references/thumbs/9f8d12d7b9.jpg +0 -0
- package/kb/references/thumbs/9fd5e3efa7.jpg +0 -0
- package/kb/references/thumbs/a0a9b9c572.jpg +0 -0
- package/kb/references/thumbs/a29ca9b185.jpg +0 -0
- package/kb/references/thumbs/a2a42884af.jpg +0 -0
- package/kb/references/thumbs/a2f5064e34.jpg +0 -0
- package/kb/references/thumbs/a3112ce672.jpg +0 -0
- package/kb/references/thumbs/a3437736d1.jpg +0 -0
- package/kb/references/thumbs/a372667e76.jpg +0 -0
- package/kb/references/thumbs/a39bae94e9.jpg +0 -0
- package/kb/references/thumbs/a3fc75d94c.jpg +0 -0
- package/kb/references/thumbs/a440487631.jpg +0 -0
- package/kb/references/thumbs/a4993d5fb5.jpg +0 -0
- package/kb/references/thumbs/a500476a86.jpg +0 -0
- package/kb/references/thumbs/a55506bf46.jpg +0 -0
- package/kb/references/thumbs/a59a5f9843.jpg +0 -0
- package/kb/references/thumbs/a5bce0eede.jpg +0 -0
- package/kb/references/thumbs/a5d921e1f0.jpg +0 -0
- package/kb/references/thumbs/a5e19d4637.jpg +0 -0
- package/kb/references/thumbs/a5f92b97d5.jpg +0 -0
- package/kb/references/thumbs/a6562c210a.jpg +0 -0
- package/kb/references/thumbs/a6f61a8d09.jpg +0 -0
- package/kb/references/thumbs/a719fdf663.jpg +0 -0
- package/kb/references/thumbs/a724e5442f.jpg +0 -0
- package/kb/references/thumbs/a852b4319f.jpg +0 -0
- package/kb/references/thumbs/a896c08448.jpg +0 -0
- package/kb/references/thumbs/a8d190a4b8.jpg +0 -0
- package/kb/references/thumbs/a8dcdd57d7.jpg +0 -0
- package/kb/references/thumbs/a951347e18.jpg +0 -0
- package/kb/references/thumbs/a9a1a0bf7d.jpg +0 -0
- package/kb/references/thumbs/a9b72986a8.jpg +0 -0
- package/kb/references/thumbs/aa11555ba8.jpg +0 -0
- package/kb/references/thumbs/aa4aab9093.jpg +0 -0
- package/kb/references/thumbs/aa89b96658.jpg +0 -0
- package/kb/references/thumbs/aaeb3739b6.jpg +0 -0
- package/kb/references/thumbs/ab25a608ec.jpg +0 -0
- package/kb/references/thumbs/ab34b62268.jpg +0 -0
- package/kb/references/thumbs/ab3b0217bb.jpg +0 -0
- package/kb/references/thumbs/ac70c04afb.jpg +0 -0
- package/kb/references/thumbs/ace0879117.jpg +0 -0
- package/kb/references/thumbs/ad0515ae55.jpg +0 -0
- package/kb/references/thumbs/ad66b25b47.jpg +0 -0
- package/kb/references/thumbs/ad68229d2f.jpg +0 -0
- package/kb/references/thumbs/add6480693.jpg +0 -0
- package/kb/references/thumbs/ae5b8c3b8c.jpg +0 -0
- package/kb/references/thumbs/ae81247b47.jpg +0 -0
- package/kb/references/thumbs/af8aa54379.jpg +0 -0
- package/kb/references/thumbs/afa80dedd4.jpg +0 -0
- package/kb/references/thumbs/afe04d730f.jpg +0 -0
- package/kb/references/thumbs/b09a7dc315.jpg +0 -0
- package/kb/references/thumbs/b0c02629f6.jpg +0 -0
- package/kb/references/thumbs/b1cb4f91de.jpg +0 -0
- package/kb/references/thumbs/b1d4c13c92.jpg +0 -0
- package/kb/references/thumbs/b20eef86db.jpg +0 -0
- package/kb/references/thumbs/b3136ccdde.jpg +0 -0
- package/kb/references/thumbs/b3f5e8d7dd.jpg +0 -0
- package/kb/references/thumbs/b44adb81c9.jpg +0 -0
- package/kb/references/thumbs/b457a5894b.jpg +0 -0
- package/kb/references/thumbs/b461281e0f.jpg +0 -0
- package/kb/references/thumbs/b4942644f0.jpg +0 -0
- package/kb/references/thumbs/b49f8eccad.jpg +0 -0
- package/kb/references/thumbs/b56c69be23.jpg +0 -0
- package/kb/references/thumbs/b59786b33c.jpg +0 -0
- package/kb/references/thumbs/b5d368ce5a.jpg +0 -0
- package/kb/references/thumbs/b5eb442406.jpg +0 -0
- package/kb/references/thumbs/b7fdabf4ab.jpg +0 -0
- package/kb/references/thumbs/b88ee8d235.jpg +0 -0
- package/kb/references/thumbs/b8a4e5be8a.jpg +0 -0
- package/kb/references/thumbs/b8c85b661c.jpg +0 -0
- package/kb/references/thumbs/ba1b8e7435.jpg +0 -0
- package/kb/references/thumbs/ba9a593eed.jpg +0 -0
- package/kb/references/thumbs/baa7afc201.jpg +0 -0
- package/kb/references/thumbs/baf74398f7.jpg +0 -0
- package/kb/references/thumbs/bb3e947c10.jpg +0 -0
- package/kb/references/thumbs/bb4c1bb7c1.jpg +0 -0
- package/kb/references/thumbs/bbaa25cc8a.jpg +0 -0
- package/kb/references/thumbs/bc7e7f88cc.jpg +0 -0
- package/kb/references/thumbs/bc9d5b58f5.jpg +0 -0
- package/kb/references/thumbs/bcc99a51f7.jpg +0 -0
- package/kb/references/thumbs/bce13dd1c1.jpg +0 -0
- package/kb/references/thumbs/bd079a6130.jpg +0 -0
- package/kb/references/thumbs/bd2d70dda7.jpg +0 -0
- package/kb/references/thumbs/bd5895c5f2.jpg +0 -0
- package/kb/references/thumbs/bde8e31d62.jpg +0 -0
- package/kb/references/thumbs/be084e78f3.jpg +0 -0
- package/kb/references/thumbs/be94f170c8.jpg +0 -0
- package/kb/references/thumbs/bed33654f7.jpg +0 -0
- package/kb/references/thumbs/beeb9a0c18.jpg +0 -0
- package/kb/references/thumbs/bef42094dc.jpg +0 -0
- package/kb/references/thumbs/bf625496fa.jpg +0 -0
- package/kb/references/thumbs/bf771f1398.jpg +0 -0
- package/kb/references/thumbs/c0ddefa3d9.jpg +0 -0
- package/kb/references/thumbs/c0f01e536e.jpg +0 -0
- package/kb/references/thumbs/c1d592b678.jpg +0 -0
- package/kb/references/thumbs/c1e83e1b3e.jpg +0 -0
- package/kb/references/thumbs/c2168f8096.jpg +0 -0
- package/kb/references/thumbs/c249cd6b17.jpg +0 -0
- package/kb/references/thumbs/c2e3d4feed.jpg +0 -0
- package/kb/references/thumbs/c3cec01df1.jpg +0 -0
- package/kb/references/thumbs/c47bedb42d.jpg +0 -0
- package/kb/references/thumbs/c4b03b4680.jpg +0 -0
- package/kb/references/thumbs/c4e6d18ec3.jpg +0 -0
- package/kb/references/thumbs/c5477e2877.jpg +0 -0
- package/kb/references/thumbs/c566794674.jpg +0 -0
- package/kb/references/thumbs/c5b945afbb.jpg +0 -0
- package/kb/references/thumbs/c5e4659497.jpg +0 -0
- package/kb/references/thumbs/c622786702.jpg +0 -0
- package/kb/references/thumbs/c6250649ca.jpg +0 -0
- package/kb/references/thumbs/c6261a9526.jpg +0 -0
- package/kb/references/thumbs/c62e609076.jpg +0 -0
- package/kb/references/thumbs/c6602d3e85.jpg +0 -0
- package/kb/references/thumbs/c6c1a16e40.jpg +0 -0
- package/kb/references/thumbs/c77f932157.jpg +0 -0
- package/kb/references/thumbs/c79788f01e.jpg +0 -0
- package/kb/references/thumbs/c7a511ad1e.jpg +0 -0
- package/kb/references/thumbs/c7acfbc3c8.jpg +0 -0
- package/kb/references/thumbs/c7bb6d1bb8.jpg +0 -0
- package/kb/references/thumbs/c829eadcb9.jpg +0 -0
- package/kb/references/thumbs/c891fd9d85.jpg +0 -0
- package/kb/references/thumbs/c89f812ee3.jpg +0 -0
- package/kb/references/thumbs/c8a85b9f61.jpg +0 -0
- package/kb/references/thumbs/c8fdf85c9a.jpg +0 -0
- package/kb/references/thumbs/c961ac1031.jpg +0 -0
- package/kb/references/thumbs/c9fd3f88d8.jpg +0 -0
- package/kb/references/thumbs/ca0d6399c3.jpg +0 -0
- package/kb/references/thumbs/ca316c83e4.jpg +0 -0
- package/kb/references/thumbs/ca3b93aa0d.jpg +0 -0
- package/kb/references/thumbs/cb0596a85b.jpg +0 -0
- package/kb/references/thumbs/cb95a5c3ef.jpg +0 -0
- package/kb/references/thumbs/cbe238b656.jpg +0 -0
- package/kb/references/thumbs/cbf530e608.jpg +0 -0
- package/kb/references/thumbs/cc173494ec.jpg +0 -0
- package/kb/references/thumbs/ccb664bddf.jpg +0 -0
- package/kb/references/thumbs/ccf69d36cd.jpg +0 -0
- package/kb/references/thumbs/ccf759db42.jpg +0 -0
- package/kb/references/thumbs/cd2a285807.jpg +0 -0
- package/kb/references/thumbs/cd4a24a8ca.jpg +0 -0
- package/kb/references/thumbs/cdb3fe8938.jpg +0 -0
- package/kb/references/thumbs/cdce1b9bc6.jpg +0 -0
- package/kb/references/thumbs/cde3aa761a.jpg +0 -0
- package/kb/references/thumbs/ce9d5cd9c2.jpg +0 -0
- package/kb/references/thumbs/ceb01f8a34.jpg +0 -0
- package/kb/references/thumbs/cee15c98d0.jpg +0 -0
- package/kb/references/thumbs/cf6944ddae.jpg +0 -0
- package/kb/references/thumbs/d15dd21cd8.jpg +0 -0
- package/kb/references/thumbs/d1633bf2ed.jpg +0 -0
- package/kb/references/thumbs/d16a838000.jpg +0 -0
- package/kb/references/thumbs/d1cf87e9f0.jpg +0 -0
- package/kb/references/thumbs/d32511d913.jpg +0 -0
- package/kb/references/thumbs/d327e9dedd.jpg +0 -0
- package/kb/references/thumbs/d35bf6c85e.jpg +0 -0
- package/kb/references/thumbs/d37afc9d61.jpg +0 -0
- package/kb/references/thumbs/d3b66655c7.jpg +0 -0
- package/kb/references/thumbs/d40b4172b6.jpg +0 -0
- package/kb/references/thumbs/d4c40d1824.jpg +0 -0
- package/kb/references/thumbs/d4cb55a4b6.jpg +0 -0
- package/kb/references/thumbs/d4f0c30f7e.jpg +0 -0
- package/kb/references/thumbs/d51cce3ae5.jpg +0 -0
- package/kb/references/thumbs/d52948f9ba.jpg +0 -0
- package/kb/references/thumbs/d62bd3cba4.jpg +0 -0
- package/kb/references/thumbs/d668a21c92.jpg +0 -0
- package/kb/references/thumbs/d685072c52.jpg +0 -0
- package/kb/references/thumbs/d6d7b96093.jpg +0 -0
- package/kb/references/thumbs/d7cd874b21.jpg +0 -0
- package/kb/references/thumbs/d7e111736a.jpg +0 -0
- package/kb/references/thumbs/d88325f832.jpg +0 -0
- package/kb/references/thumbs/d9272ded76.jpg +0 -0
- package/kb/references/thumbs/d962e7c654.jpg +0 -0
- package/kb/references/thumbs/d97f000ee2.jpg +0 -0
- package/kb/references/thumbs/d9c1ae2543.jpg +0 -0
- package/kb/references/thumbs/d9ccb3cac8.jpg +0 -0
- package/kb/references/thumbs/da99019680.jpg +0 -0
- package/kb/references/thumbs/da9b8bc615.jpg +0 -0
- package/kb/references/thumbs/daafbee2c1.jpg +0 -0
- package/kb/references/thumbs/db0f11f143.jpg +0 -0
- package/kb/references/thumbs/db5dd367f5.jpg +0 -0
- package/kb/references/thumbs/db69677866.jpg +0 -0
- package/kb/references/thumbs/db87c1956e.jpg +0 -0
- package/kb/references/thumbs/dbb86d8bda.jpg +0 -0
- package/kb/references/thumbs/dbd3a8ff2a.jpg +0 -0
- package/kb/references/thumbs/dbdf4b2794.jpg +0 -0
- package/kb/references/thumbs/dd4c19b4b1.jpg +0 -0
- package/kb/references/thumbs/dd98d9f6fa.jpg +0 -0
- package/kb/references/thumbs/ddb00e3b6a.jpg +0 -0
- package/kb/references/thumbs/dde3541a5c.jpg +0 -0
- package/kb/references/thumbs/de2a4da502.jpg +0 -0
- package/kb/references/thumbs/de4c387a66.jpg +0 -0
- package/kb/references/thumbs/de5618fa82.jpg +0 -0
- package/kb/references/thumbs/de6bec2538.jpg +0 -0
- package/kb/references/thumbs/dea13cbb1f.jpg +0 -0
- package/kb/references/thumbs/deff9202aa.jpg +0 -0
- package/kb/references/thumbs/df12835f8d.jpg +0 -0
- package/kb/references/thumbs/df57acbb3d.jpg +0 -0
- package/kb/references/thumbs/df8265009e.jpg +0 -0
- package/kb/references/thumbs/dfc99a1e8e.jpg +0 -0
- package/kb/references/thumbs/dfc9fde460.jpg +0 -0
- package/kb/references/thumbs/e038348eee.jpg +0 -0
- package/kb/references/thumbs/e04c2ae1d5.jpg +0 -0
- package/kb/references/thumbs/e070345c43.jpg +0 -0
- package/kb/references/thumbs/e0a0c84d47.jpg +0 -0
- package/kb/references/thumbs/e0af1e6b9e.jpg +0 -0
- package/kb/references/thumbs/e1025942c4.jpg +0 -0
- package/kb/references/thumbs/e11b6f5b82.jpg +0 -0
- package/kb/references/thumbs/e1553de3fc.jpg +0 -0
- package/kb/references/thumbs/e162ebe7cd.jpg +0 -0
- package/kb/references/thumbs/e1f1e531d8.jpg +0 -0
- package/kb/references/thumbs/e20842e5c9.jpg +0 -0
- package/kb/references/thumbs/e24e7d949b.jpg +0 -0
- package/kb/references/thumbs/e2a3e5d10a.jpg +0 -0
- package/kb/references/thumbs/e2de02615a.jpg +0 -0
- package/kb/references/thumbs/e305dad7dd.jpg +0 -0
- package/kb/references/thumbs/e52e3ef97f.jpg +0 -0
- package/kb/references/thumbs/e570e92d06.jpg +0 -0
- package/kb/references/thumbs/e583932fb9.jpg +0 -0
- package/kb/references/thumbs/e5da3c038f.jpg +0 -0
- package/kb/references/thumbs/e657634af3.jpg +0 -0
- package/kb/references/thumbs/e67946e3e1.jpg +0 -0
- package/kb/references/thumbs/e69e0f3639.jpg +0 -0
- package/kb/references/thumbs/e6ebe66031.jpg +0 -0
- package/kb/references/thumbs/e7db9563c9.jpg +0 -0
- package/kb/references/thumbs/e84a4c3b7b.jpg +0 -0
- package/kb/references/thumbs/e84cf52c27.jpg +0 -0
- package/kb/references/thumbs/e8707cf6e8.jpg +0 -0
- package/kb/references/thumbs/e888890b40.jpg +0 -0
- package/kb/references/thumbs/e8a502b418.jpg +0 -0
- package/kb/references/thumbs/e8ba68371d.jpg +0 -0
- package/kb/references/thumbs/e9098f54cc.jpg +0 -0
- package/kb/references/thumbs/e9144deae9.jpg +0 -0
- package/kb/references/thumbs/e93e98d757.jpg +0 -0
- package/kb/references/thumbs/e9762dd435.jpg +0 -0
- package/kb/references/thumbs/e9db4544c8.jpg +0 -0
- package/kb/references/thumbs/e9ddffeacd.jpg +0 -0
- package/kb/references/thumbs/e9e2cf1d7e.jpg +0 -0
- package/kb/references/thumbs/ea1e23e623.jpg +0 -0
- package/kb/references/thumbs/ea41200f5e.jpg +0 -0
- package/kb/references/thumbs/eaf4916e1a.jpg +0 -0
- package/kb/references/thumbs/eb2c505fc8.jpg +0 -0
- package/kb/references/thumbs/eb47943693.jpg +0 -0
- package/kb/references/thumbs/eb4ffd6625.jpg +0 -0
- package/kb/references/thumbs/eb82ac0a4d.jpg +0 -0
- package/kb/references/thumbs/ebeb345ade.jpg +0 -0
- package/kb/references/thumbs/ec4e2aba0a.jpg +0 -0
- package/kb/references/thumbs/ed683bc9f7.jpg +0 -0
- package/kb/references/thumbs/ed9e236a84.jpg +0 -0
- package/kb/references/thumbs/ee45e1caea.jpg +0 -0
- package/kb/references/thumbs/ee50bbf2e7.jpg +0 -0
- package/kb/references/thumbs/eed6ad3b7b.jpg +0 -0
- package/kb/references/thumbs/eee247fd70.jpg +0 -0
- package/kb/references/thumbs/ef87b6cb99.jpg +0 -0
- package/kb/references/thumbs/ef87dccf04.jpg +0 -0
- package/kb/references/thumbs/ef941bba1e.jpg +0 -0
- package/kb/references/thumbs/effc14fb2c.jpg +0 -0
- package/kb/references/thumbs/f04aa5a191.jpg +0 -0
- package/kb/references/thumbs/f13f12485f.jpg +0 -0
- package/kb/references/thumbs/f16a5c0fd4.jpg +0 -0
- package/kb/references/thumbs/f1ba7a7a8f.jpg +0 -0
- package/kb/references/thumbs/f1bc4c9c19.jpg +0 -0
- package/kb/references/thumbs/f1ee827878.jpg +0 -0
- package/kb/references/thumbs/f21736aeff.jpg +0 -0
- package/kb/references/thumbs/f22bc41213.jpg +0 -0
- package/kb/references/thumbs/f266aaffcc.jpg +0 -0
- package/kb/references/thumbs/f2c0ed0d65.jpg +0 -0
- package/kb/references/thumbs/f32ac710fd.jpg +0 -0
- package/kb/references/thumbs/f32b697ff6.jpg +0 -0
- package/kb/references/thumbs/f39c883904.jpg +0 -0
- package/kb/references/thumbs/f3b9d55e6e.jpg +0 -0
- package/kb/references/thumbs/f3c1763e14.jpg +0 -0
- package/kb/references/thumbs/f40853fd43.jpg +0 -0
- package/kb/references/thumbs/f4fd07dc4d.jpg +0 -0
- package/kb/references/thumbs/f50b756ee5.jpg +0 -0
- package/kb/references/thumbs/f51272e9b3.jpg +0 -0
- package/kb/references/thumbs/f538895eee.jpg +0 -0
- package/kb/references/thumbs/f5d28081b5.jpg +0 -0
- package/kb/references/thumbs/f6046c9501.jpg +0 -0
- package/kb/references/thumbs/f62e4af316.jpg +0 -0
- package/kb/references/thumbs/f6f6bffeb8.jpg +0 -0
- package/kb/references/thumbs/f736e00af6.jpg +0 -0
- package/kb/references/thumbs/f7932da47d.jpg +0 -0
- package/kb/references/thumbs/f879e118ca.jpg +0 -0
- package/kb/references/thumbs/f88257215d.jpg +0 -0
- package/kb/references/thumbs/f88c45a6d7.jpg +0 -0
- package/kb/references/thumbs/f89a7b646e.jpg +0 -0
- package/kb/references/thumbs/f8a1e7a274.jpg +0 -0
- package/kb/references/thumbs/f9183cf2b6.jpg +0 -0
- package/kb/references/thumbs/f995de5ce9.jpg +0 -0
- package/kb/references/thumbs/f9ada2c3e1.jpg +0 -0
- package/kb/references/thumbs/f9d4616f89.jpg +0 -0
- package/kb/references/thumbs/f9f4307bb0.jpg +0 -0
- package/kb/references/thumbs/fa070122c7.jpg +0 -0
- package/kb/references/thumbs/fa29cc1369.jpg +0 -0
- package/kb/references/thumbs/fa791a4dab.jpg +0 -0
- package/kb/references/thumbs/fa8060509e.jpg +0 -0
- package/kb/references/thumbs/fafeed4003.jpg +0 -0
- package/kb/references/thumbs/fb1c024f38.jpg +0 -0
- package/kb/references/thumbs/fb77aa28b3.jpg +0 -0
- package/kb/references/thumbs/fb9f7f1966.jpg +0 -0
- package/kb/references/thumbs/fba8a8c2da.jpg +0 -0
- package/kb/references/thumbs/fce2754c36.jpg +0 -0
- package/kb/references/thumbs/fce2fb83df.jpg +0 -0
- package/kb/references/thumbs/fd4c51bb47.jpg +0 -0
- package/kb/references/thumbs/fd8c269817.jpg +0 -0
- package/kb/references/thumbs/fdb7b250ca.jpg +0 -0
- package/kb/references/thumbs/fe18088de8.jpg +0 -0
- package/kb/references/thumbs/fe4f742ba7.jpg +0 -0
- package/kb/references/thumbs/fe64742ce7.jpg +0 -0
- package/kb/references/thumbs/feb5d62161.jpg +0 -0
- package/kb/references/thumbs/fed21b3e98.jpg +0 -0
- package/kb/references/thumbs/fed2205951.jpg +0 -0
- package/kb/references/thumbs/ffdacf1715.jpg +0 -0
- package/kb/sections/_buttons.md +93 -0
- package/kb/sections/_finish.md +325 -0
- package/kb/sections/about-founder-note.md +85 -0
- package/kb/sections/about-team-roster.md +86 -0
- package/kb/sections/alternating-rows-live-tiles.md +110 -0
- package/kb/sections/annotated-product-shot.md +105 -0
- package/kb/sections/asymmetric-bento-dominant.md +114 -0
- package/kb/sections/before-after-features.md +104 -0
- package/kb/sections/before-after-repair.md +107 -0
- package/kb/sections/bento-lead-tile.md +112 -0
- package/kb/sections/book-a-slot-honest.md +116 -0
- package/kb/sections/capability-prompt-ledger.md +68 -0
- package/kb/sections/case-study-band.md +113 -0
- package/kb/sections/centred-stack-hero.md +107 -0
- package/kb/sections/closing-demo-final-state.md +81 -0
- package/kb/sections/closing-full-bleed-line-and-form.md +86 -0
- package/kb/sections/closing-result-previewed.md +88 -0
- package/kb/sections/closing-three-real-steps.md +87 -0
- package/kb/sections/command-reference-table.md +70 -0
- package/kb/sections/comparison-old-way-bars.md +88 -0
- package/kb/sections/comparison-same-task-two-ways.md +88 -0
- package/kb/sections/day-of-the-place.md +102 -0
- package/kb/sections/docs-reading-rail.md +88 -0
- package/kb/sections/editorial-columns-hero.md +107 -0
- package/kb/sections/editorial-essay-pull-quote.md +112 -0
- package/kb/sections/events-calendar-list.md +107 -0
- package/kb/sections/explorable-control-demo.md +102 -0
- package/kb/sections/faq-open-answers-editorial.md +85 -0
- package/kb/sections/faq-ruled-accordion-aside.md +87 -0
- package/kb/sections/footer-closing-scene.md +84 -0
- package/kb/sections/footer-editorial-sitemap.md +85 -0
- package/kb/sections/footer-minimal-credits.md +80 -0
- package/kb/sections/full-bleed-image-band.md +103 -0
- package/kb/sections/full-bleed-image-hero.md +105 -0
- package/kb/sections/gallery-first-hero.md +109 -0
- package/kb/sections/horizontal-scroll-strip.md +101 -0
- package/kb/sections/how-i-work-own-voice.md +111 -0
- package/kb/sections/how-it-works-in-place.md +109 -0
- package/kb/sections/impact-numbers-sourced.md +109 -0
- package/kb/sections/install-steps-per-agent.md +77 -0
- package/kb/sections/masonry-real-work.md +109 -0
- package/kb/sections/numbered-editorial-columns.md +105 -0
- package/kb/sections/object-first-hero.md +106 -0
- package/kb/sections/object-timeline.md +105 -0
- package/kb/sections/one-huge-number.md +100 -0
- package/kb/sections/one-person-story.md +103 -0
- package/kb/sections/order-ahead-ticket.md +119 -0
- package/kb/sections/press-strip-quoted.md +106 -0
- package/kb/sections/pricing-comparison-table-sticky.md +94 -0
- package/kb/sections/pricing-free-pro-upgrade-moment.md +85 -0
- package/kb/sections/pricing-plan-beside-product.md +88 -0
- package/kb/sections/pricing-plans-ledger.md +94 -0
- package/kb/sections/pricing-usage-calculator.md +93 -0
- package/kb/sections/printed-menu-card.md +110 -0
- package/kb/sections/process-happening.md +102 -0
- package/kb/sections/project-index-ruled.md +106 -0
- package/kb/sections/proof-logo-cloud-with-reasons.md +82 -0
- package/kb/sections/proof-measured-numbers.md +88 -0
- package/kb/sections/proof-output-wall.md +84 -0
- package/kb/sections/proof-single-honest-quote.md +81 -0
- package/kb/sections/resources-searchable-list.md +110 -0
- package/kb/sections/rooms-and-rates.md +107 -0
- package/kb/sections/ruled-facts-table.md +108 -0
- package/kb/sections/ruled-list-pinned-visual.md +107 -0
- package/kb/sections/scroll-scrubbed-product-demo.md +103 -0
- package/kb/sections/self-playing-run-demo.md +104 -0
- package/kb/sections/services-price-ledger.md +106 -0
- package/kb/sections/signup-form-with-next-steps.md +86 -0
- package/kb/sections/signup-waitlist-place-in-line.md +90 -0
- package/kb/sections/spec-sheet-features.md +108 -0
- package/kb/sections/split-hero-live-object.md +108 -0
- package/kb/sections/sticky-feature-narrative.md +104 -0
- package/kb/sections/todays-board-hero.md +112 -0
- package/kb/sections/touchable-tool-hero.md +111 -0
- package/kb/sections/typographic-statement-hero.md +99 -0
- package/kb/sections/visit-hours-map.md +110 -0
- package/kb/sections/ways-to-help-honest.md +115 -0
- package/kb/sources/design-reference.md +991 -0
- package/kb/sources/product-and-docs.md +37 -0
- package/kb/systems/1win/DESIGN.md +463 -0
- package/kb/systems/LICENSE-awesome-design-md +21 -0
- package/kb/systems/README.md +7 -0
- package/kb/systems/airbnb/DESIGN.md +545 -0
- package/kb/systems/airtable/DESIGN.md +554 -0
- package/kb/systems/aljazeera/DESIGN.md +594 -0
- package/kb/systems/apple/DESIGN.md +562 -0
- package/kb/systems/binance/DESIGN.md +634 -0
- package/kb/systems/bmw/DESIGN.md +544 -0
- package/kb/systems/bmw-m/DESIGN.md +503 -0
- package/kb/systems/bugatti/DESIGN.md +454 -0
- package/kb/systems/cal/DESIGN.md +542 -0
- package/kb/systems/categories.json +87 -0
- package/kb/systems/claude/DESIGN.md +589 -0
- package/kb/systems/clay/DESIGN.md +541 -0
- package/kb/systems/clickhouse/DESIGN.md +544 -0
- package/kb/systems/cohere/DESIGN.md +451 -0
- package/kb/systems/coinbase/DESIGN.md +570 -0
- package/kb/systems/composio/DESIGN.md +506 -0
- package/kb/systems/cursor/DESIGN.md +537 -0
- package/kb/systems/dell-1996/DESIGN.md +632 -0
- package/kb/systems/dji/DESIGN.md +882 -0
- package/kb/systems/elevenlabs/DESIGN.md +504 -0
- package/kb/systems/expo/DESIGN.md +526 -0
- package/kb/systems/ferrari/DESIGN.md +531 -0
- package/kb/systems/figma/DESIGN.md +578 -0
- package/kb/systems/framer/DESIGN.md +544 -0
- package/kb/systems/hashicorp/DESIGN.md +575 -0
- package/kb/systems/hp/DESIGN.md +670 -0
- package/kb/systems/ibm/DESIGN.md +550 -0
- package/kb/systems/intercom/DESIGN.md +546 -0
- package/kb/systems/jobright/DESIGN.md +525 -0
- package/kb/systems/kraken/DESIGN.md +125 -0
- package/kb/systems/lamborghini/DESIGN.md +288 -0
- package/kb/systems/linear.app/DESIGN.md +548 -0
- package/kb/systems/lovable/DESIGN.md +298 -0
- package/kb/systems/mastercard/DESIGN.md +365 -0
- package/kb/systems/mercury/DESIGN.md +568 -0
- package/kb/systems/meta/DESIGN.md +683 -0
- package/kb/systems/minimax/DESIGN.md +746 -0
- package/kb/systems/mintlify/DESIGN.md +852 -0
- package/kb/systems/miro/DESIGN.md +825 -0
- package/kb/systems/mistral.ai/DESIGN.md +773 -0
- package/kb/systems/mongodb/DESIGN.md +767 -0
- package/kb/systems/mydealz/DESIGN.md +551 -0
- package/kb/systems/nerdwallet/DESIGN.md +722 -0
- package/kb/systems/nike/DESIGN.md +575 -0
- package/kb/systems/nintendo-2001/DESIGN.md +649 -0
- package/kb/systems/notion/DESIGN.md +821 -0
- package/kb/systems/nvidia/DESIGN.md +640 -0
- package/kb/systems/ollama/DESIGN.md +539 -0
- package/kb/systems/opencode.ai/DESIGN.md +521 -0
- package/kb/systems/oracle/DESIGN.md +778 -0
- package/kb/systems/oura/DESIGN.md +616 -0
- package/kb/systems/pinterest/DESIGN.md +597 -0
- package/kb/systems/playstation/DESIGN.md +661 -0
- package/kb/systems/posthog/DESIGN.md +690 -0
- package/kb/systems/raycast/DESIGN.md +669 -0
- package/kb/systems/renault/DESIGN.md +589 -0
- package/kb/systems/replicate/DESIGN.md +616 -0
- package/kb/systems/resend/DESIGN.md +585 -0
- package/kb/systems/revolut/DESIGN.md +636 -0
- package/kb/systems/runwayml/DESIGN.md +244 -0
- package/kb/systems/sanity/DESIGN.md +357 -0
- package/kb/systems/sap/DESIGN.md +639 -0
- package/kb/systems/sentry/DESIGN.md +551 -0
- package/kb/systems/shopify/DESIGN.md +516 -0
- package/kb/systems/slack/DESIGN.md +482 -0
- package/kb/systems/spacex/DESIGN.md +363 -0
- package/kb/systems/spotify/DESIGN.md +246 -0
- package/kb/systems/starbucks/DESIGN.md +580 -0
- package/kb/systems/stripe/DESIGN.md +487 -0
- package/kb/systems/supabase/DESIGN.md +462 -0
- package/kb/systems/superhuman/DESIGN.md +448 -0
- package/kb/systems/tesla/DESIGN.md +286 -0
- package/kb/systems/theverge/DESIGN.md +339 -0
- package/kb/systems/together.ai/DESIGN.md +633 -0
- package/kb/systems/uber/DESIGN.md +636 -0
- package/kb/systems/vercel/DESIGN.md +736 -0
- package/kb/systems/vodafone/DESIGN.md +538 -0
- package/kb/systems/voltagent/DESIGN.md +521 -0
- package/kb/systems/warp/DESIGN.md +526 -0
- package/kb/systems/webflow/DESIGN.md +588 -0
- package/kb/systems/wired/DESIGN.md +497 -0
- package/kb/systems/wise/DESIGN.md +544 -0
- package/kb/systems/x.ai/DESIGN.md +465 -0
- package/kb/systems/zapier/DESIGN.md +537 -0
- package/kb/taste/garvit-by-job.md +46 -0
- package/kb/taste/garvit-portfolio.md +94 -0
- package/kb/universal/color-roles.md +26 -0
- package/kb/universal/copy.md +16 -0
- package/kb/universal/details.md +31 -0
- package/kb/universal/first-screen.md +30 -0
- package/kb/universal/fit-the-codebase.md +29 -0
- package/kb/universal/layout-width.md +28 -0
- package/kb/universal/motion-feedback.md +23 -0
- package/kb/universal/signature.md +29 -0
- package/kb/universal/states.md +17 -0
- package/kb/universal/type-app.md +33 -0
- package/kb/universal/type-marketing.md +28 -0
- package/package.json +37 -4
- package/scripts/pack-assets.mjs +58 -0
- package/skill/palate/SKILL.md +261 -0
- package/src/auth-recheck.mjs +4 -0
- package/src/auth.mjs +416 -0
- package/src/capture.mjs +182 -0
- package/src/catalog/classify.mjs +96 -0
- package/src/catalog/curated.mjs +128 -0
- package/src/catalog/index-build.mjs +67 -0
- package/src/catalog/literal.mjs +146 -0
- package/src/catalog/store.mjs +40 -0
- package/src/catalog/vibrant.mjs +126 -0
- package/src/check.mjs +93 -0
- package/src/concept.mjs +157 -0
- package/src/context.mjs +226 -0
- package/src/copy.mjs +188 -0
- package/src/devserver.mjs +135 -0
- package/src/fontgenre.mjs +44 -0
- package/src/guard-agents.mjs +213 -0
- package/src/guard.mjs +377 -0
- package/src/kb.mjs +91 -0
- package/src/look.mjs +312 -0
- package/src/loop/ambition.mjs +620 -0
- package/src/loop/animate.mjs +70 -0
- package/src/loop/artdirection.mjs +264 -0
- package/src/loop/bench.mjs +184 -0
- package/src/loop/benchpick.mjs +155 -0
- package/src/loop/blueprint.mjs +620 -0
- package/src/loop/board.html +180 -0
- package/src/loop/build.mjs +393 -0
- package/src/loop/buttons.mjs +413 -0
- package/src/loop/common.mjs +206 -0
- package/src/loop/cost.mjs +63 -0
- package/src/loop/craft.mjs +152 -0
- package/src/loop/craftchecks.mjs +148 -0
- package/src/loop/critique.mjs +393 -0
- package/src/loop/details.mjs +225 -0
- package/src/loop/direction.html +168 -0
- package/src/loop/direction.mjs +256 -0
- package/src/loop/directions.json +8 -0
- package/src/loop/explore.mjs +219 -0
- package/src/loop/fail.mjs +110 -0
- package/src/loop/fix.mjs +194 -0
- package/src/loop/floor.mjs +677 -0
- package/src/loop/forget.mjs +52 -0
- package/src/loop/gate.mjs +1053 -0
- package/src/loop/grid.html +123 -0
- package/src/loop/growth.mjs +118 -0
- package/src/loop/icons.mjs +109 -0
- package/src/loop/imagery.mjs +1280 -0
- package/src/loop/judge-api.mjs +245 -0
- package/src/loop/judge.mjs +167 -0
- package/src/loop/layouts.mjs +492 -0
- package/src/loop/library.mjs +82 -0
- package/src/loop/lookplan.mjs +182 -0
- package/src/loop/lookvec.mjs +645 -0
- package/src/loop/match.mjs +923 -0
- package/src/loop/matched.mjs +26 -0
- package/src/loop/myrefs.mjs +151 -0
- package/src/loop/pick.mjs +213 -0
- package/src/loop/picker.html +118 -0
- package/src/loop/plan.mjs +289 -0
- package/src/loop/polish.mjs +39 -0
- package/src/loop/research-learn.mjs +41 -0
- package/src/loop/research.mjs +1130 -0
- package/src/loop/rulereview.mjs +146 -0
- package/src/loop/rules-board.html +199 -0
- package/src/loop/rules.mjs +939 -0
- package/src/loop/similar.mjs +276 -0
- package/src/loop/states-source.mjs +258 -0
- package/src/loop/states.mjs +1547 -0
- package/src/loop/stats.mjs +78 -0
- package/src/loop/taste.mjs +81 -0
- package/src/loop/timeline.mjs +149 -0
- package/src/loop/variants.mjs +228 -0
- package/src/loop/vary.mjs +249 -0
- package/src/mcp/server.mjs +1246 -0
- package/src/motion.mjs +207 -0
- package/src/moves.mjs +242 -0
- package/src/novelty.mjs +116 -0
- package/src/page-ambition.js +181 -0
- package/src/page-craft.js +724 -0
- package/src/page-details.js +415 -0
- package/src/page-devices.js +365 -0
- package/src/page-fingerprint.js +281 -0
- package/src/page-gate.js +1307 -0
- package/src/page-look.js +698 -0
- package/src/page-metrics.js +78 -0
- package/src/page-principles.js +1167 -0
- package/src/page-rules.js +308 -0
- package/src/page-sections.js +211 -0
- package/src/page-states.js +703 -0
- package/src/paths.mjs +13 -0
- package/src/png.mjs +107 -0
- package/src/point/auto.mjs +224 -0
- package/src/point/locate.mjs +114 -0
- package/src/point/overlay.js +1516 -0
- package/src/point/server.mjs +1122 -0
- package/src/point/trail.mjs +219 -0
- package/src/pool.mjs +80 -0
- package/src/principles.mjs +279 -0
- package/src/refs.mjs +299 -0
- package/src/robots.mjs +145 -0
- package/src/sections.mjs +210 -0
- package/src/shoot.mjs +235 -0
- package/src/systems/apply.mjs +355 -0
- package/src/systems/load.mjs +251 -0
- package/src/systems/pick.mjs +213 -0
- package/templates/vite-react-tw/index.html +12 -0
- package/templates/vite-react-tw/package.json +25 -0
- package/templates/vite-react-tw/src/App.tsx +3 -0
- package/templates/vite-react-tw/src/index.css +1 -0
- package/templates/vite-react-tw/src/main.tsx +10 -0
- package/templates/vite-react-tw/tsconfig.app.json +26 -0
- package/templates/vite-react-tw/tsconfig.json +7 -0
- package/templates/vite-react-tw/tsconfig.node.json +23 -0
- package/templates/vite-react-tw/vite.config.ts +8 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Sources to follow
|
|
2
|
+
|
|
3
|
+
A reading list of the people and sites that were most useful for kb/craft. It lists sources only, for following and citing. Do not scrape their designs, copy their pages, or train on their sites; when an entry in kb/craft cites them, it summarises the idea in our own words and links back.
|
|
4
|
+
|
|
5
|
+
## Design engineers and designers
|
|
6
|
+
|
|
7
|
+
- **Rauno Freiberg**: https://rauno.me/craft (essays: Invisible Details of Interaction Design, Novelty, Designing Depth, Contrasting Aesthetics, Crafting the Next.js Website, What will you ship?); course: https://devouringdetails.com; X: https://x.com/raunofreiberg. Best source on interaction metaphors, frequency vs novelty, and motion rhythm on marketing pages.
|
|
8
|
+
- **Emil Kowalski**: https://emilkowal.ski (7 Practical Animation Tips, You Don't Need Animations, Agents with Taste, Building a Toast Component, Developing Taste, Friction as a Feature); course: https://animations.dev; X: https://x.com/emilkowalski. Concrete durations, easing, press states; author of Sonner and Vaul.
|
|
9
|
+
- **Jakub Krehel**: https://jakub.kr/writing (Details That Make Interfaces Feel Better, Less Is More, Understanding Gradients); X: https://x.com/jakubkrehel. Shadow stacks, concentric radii, stagger values; his writing list includes the Interfere site write-up.
|
|
10
|
+
- **Benji Taylor**: https://benji.org (Family Values; Annotating for agents). Motion as product identity; the delight-versus-frequency curve.
|
|
11
|
+
- **Paco Coursey**: https://paco.me/writing. Small implementation details (favicons in dark Safari, theme-switch transitions).
|
|
12
|
+
- **Josh W. Comeau**: https://www.joshwcomeau.com (Designing Beautiful Shadows, spring physics, prefers-reduced-motion, How I Built My Blog). Shadows, springs, accessible motion, interactive explanation.
|
|
13
|
+
- **Anthony Hobday**: https://anthonyhobday.com/sideprojects/saferules/ and https://anthonyhobday.com/sideprojects/visualtechniques/. Numeric "safe rules" and a large catalogue of visual techniques.
|
|
14
|
+
- **Steve Schoger / Refactoring UI**: https://www.refactoringui.com, X: https://x.com/steveschoger. Visual-design tips (summarised in our own words only; the book is paid).
|
|
15
|
+
- **Sara Soueidan**: https://www.sarasoueidan.com/blog/focus-indicators/. The definitive guide to focus indicators.
|
|
16
|
+
- **Bret Victor**: https://worrydream.com/ExplorableExplanations/. Explorable explanations; the basis for interactive demos.
|
|
17
|
+
- **Alex Murrell**: https://www.alexmurrell.co.uk/articles/the-age-of-average. Why everything converges, and why that is the opening.
|
|
18
|
+
- **Detail** (account collecting interface details): https://x.com/detaildotdesign.
|
|
19
|
+
- **Karri Saarinen / Linear**: https://linear.app/now (How we redesigned the Linear UI). Colour systems in LCH, restraint, alignment. (Profile: https://sequoiacap.com/article/linear-spotlight/)
|
|
20
|
+
- **Mariana Castilho**: interview at https://dive-club.beehiiv.com/p/blastoise. We could not find her own published writing; follow her via that profile.
|
|
21
|
+
|
|
22
|
+
## Team and company writing
|
|
23
|
+
|
|
24
|
+
- **Vercel Web Interface Guidelines**: https://vercel.com/design/guidelines. The densest single checklist for interaction, forms, content and animation.
|
|
25
|
+
- **Interfere**: https://interfere.com/blog/how-we-built-interferes-new-website. How a product site shows the product in code.
|
|
26
|
+
- **Stripe**: https://stripe.com/blog/connect-front-end-experience. Code-built product animation and performance on a landing page.
|
|
27
|
+
- **Anthropic**: https://claude.com/blog/improving-frontend-design-through-skills. Why models converge on generic UI and how direction counters it.
|
|
28
|
+
- **Sanity**: https://www.sanity.io/blog/the-logo-soup-problem and Dan Paquette https://danpaquette.net/read/automatically-resizing-a-list-of-icons-or-logos-so-theyre-visually-proportional/. Logo wall sizing.
|
|
29
|
+
- **Close**: https://making.close.com/posts/ultimate-guide-to-timestamps. Timestamp rules.
|
|
30
|
+
- **Apple, Designing Fluid Interfaces (WWDC18)**: https://developer.apple.com/videos/play/wwdc2018/803/. Springs, interruptibility, gestures.
|
|
31
|
+
- **Chrome for Developers, scroll-driven animations**: https://developer.chrome.com/docs/css-ui/scroll-driven-animations.
|
|
32
|
+
- **WebKit blog, text-wrap: pretty**: https://webkit.org/blog/16547/better-typography-with-text-wrap-pretty/.
|
|
33
|
+
|
|
34
|
+
## Research and reference
|
|
35
|
+
|
|
36
|
+
- **Nielsen Norman Group**: https://www.nngroup.com (animation duration, skeleton screens, empty states, tooltips, error messages, icon usability, response times, scrolljacking, horizontal attention, layer-cake scanning, glassmorphism).
|
|
37
|
+
- **Viget**: https://www.viget.com/articles/a-bone-to-pick-with-skeleton-screens/. The skeleton-screen study that disagrees with conventional wisdom.
|
|
38
|
+
- **Butterick's Practical Typography**: https://practicaltypography.com/summary-of-key-rules.html.
|
|
39
|
+
- **W3C WCAG Understanding docs**: https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html.
|
|
40
|
+
- **APCA**: https://github.com/Myndex/apca-introduction (contrast model debated against WCAG 2).
|
|
41
|
+
|
|
42
|
+
## AI-slop critiques (useful as tell lists; quality varies)
|
|
43
|
+
|
|
44
|
+
- **avoid-ai-design catalogue**: https://github.com/funboy322/avoid-ai-design. Most complete list, including the second-order "tasteful" defaults.
|
|
45
|
+
- **Mania Design, Spot the Slop**: https://www.mania.design/blog/spot-the-slop-a-ui-designers-guide-to-fixing-ai-defaults/.
|
|
46
|
+
- **Developers Digest, 16 patterns**: https://www.developersdigest.tech/blog/ai-design-slop-and-how-to-spot-it.
|
|
47
|
+
- **925 Studios**: https://www.925studios.co/blog/ai-slop-design-tells.
|
|
48
|
+
- **Adam Wathan on the indigo default**: https://x.com/adamwathan/status/1953510802159219096.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Creativity: getting original work instead of the default
|
|
2
|
+
|
|
3
|
+
How to use: run these before designing (as prompts for direction) and after (as a critique of whether the result has a point of view). Detection here is usually a swap test: replace the logo and product name; if the page could belong to any company, the entry applies.
|
|
4
|
+
Novelty is a budget, not a goal. Most of the screen should be familiar; the entries below are about spending the rest well.
|
|
5
|
+
|
|
6
|
+
## Why the default happens
|
|
7
|
+
|
|
8
|
+
- **[C01] Undirected output converges.** Detect: no named direction in the brief (no typeface, palette, reference or tone). Models sample the most common patterns in training data, which Anthropic calls distributional convergence; designers describe slop as AI output nobody directed rather than AI output as such. Fix: before generating, write down a named aesthetic direction, a typeface, a palette source and a layout principle. (Source: https://claude.com/blog/improving-frontend-design-through-skills, https://x.com/designcoursecom/status/2080802781087089047, https://prg.sh/ramblings/Why-Your-AI-Keeps-Building-the-Same-Purple-Gradient-Website)
|
|
9
|
+
- **[C02] Banning defaults moves the default.** Detect: the output avoided purple and Inter but landed on Space Grotesk, cream + terracotta or near-black + lime. Fix: ban lists help but are not enough; vary light/dark, type and aesthetic across generations and track what this project used recently. (Source: https://claude.com/blog/improving-frontend-design-through-skills, https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
10
|
+
- **[C03] Sameness is the market, and the opening.** Detect: the page mirrors the category leader's section order and look. Sameness comes from shared frameworks, templates and copying competitors; Alex Murrell's "Age of Average" shows the same convergence in interiors, cars and brands. Fix: treat sameness as the opportunity; decide one place to zag. (Source: https://www.alexmurrell.co.uk/articles/the-age-of-average)
|
|
11
|
+
|
|
12
|
+
## How strong designers get original work
|
|
13
|
+
|
|
14
|
+
- **[C04] 90% familiar, 10% unexpected.** Detect: either nothing surprising, or surprise everywhere (custom cursors, novel scroll, odd navigation all at once). Rauno borrows the 60/30/10 colour rule: keep most of the experience familiar and put novelty where it pays. Fix: name the one or two places where this product does something unexpected; keep navigation, forms and controls conventional. (Source: https://rauno.me/craft/novelty)
|
|
15
|
+
- **[C05] Spend novelty where the audience cares and where it is rare.** Detect: novel treatment on a daily task; a forgettable first-run. Onboarding is seen once, so it can carry more; intent sets tolerance (players accept more than people at work); novelty has a learning tax. (Source: https://rauno.me/craft/novelty, https://benji.org/family-values)
|
|
16
|
+
- **[C06] A signature move tied to the brand.** Detect: no element that only this product would have. Good signatures echo something the brand already owns: Interfere pixelates the last word of its headline to echo its logo; Vercel's Ship site uses the full spectrum as a metaphor for "what will you ship"; the Next.js site's switchboard lights spell NEXT on hover. Fix: one signature per page, derived from the product's mark, domain or data, and it must carry meaning. (Source: https://interfere.com/blog/how-we-built-interferes-new-website, https://rauno.me/craft/vercel, https://rauno.me/craft/nextjs)
|
|
17
|
+
- **[C07] Contrasting aesthetics, on purpose.** Detect: a page in a single pure style that feels forgettable. Pairing distinct aesthetics (a bitmap face with a Renaissance painting; retro objects in a minimal room) creates curiosity when it is sparing and crafted; keep one anchor constant while the rest varies (amo's wordmark changes typeface but never word, size, position or colour). Less suited to everyday productivity tools. (Source: https://rauno.me/craft/contrasting-aesthetics)
|
|
18
|
+
- **[C08] Constraints as the engine.** Detect: a brief with no limits produces a median page. The Eameses described design as depending largely on constraints, and the designer's skill as recognising as many as possible. Rauno notes designing in only black and white forces creativity with layers, depth, shadows and spotlights. Fix: impose a real constraint (one colour, one typeface, no cards, the product's own material) and design inside it. (Source: https://www.hermanmiller.com/stories/why-magazine/design-q-and-a-charles-and-ray-eames/, https://x.com/raunofreiberg/status/1579874895022141440)
|
|
19
|
+
- **[C09] References from outside the domain.** Detect: every reference is another SaaS landing page. Viral work becomes everyone's reference; look in old magazines and archives, workshops and factories, adjacent arts. Fix: bring at least one reference from outside software and say what you take from it (a material, a rhythm, a colour relationship). (Source: https://marioalessiani.substack.com/p/we-risk-designing-the-same-things, https://rauno.me/craft/contrasting-aesthetics)
|
|
20
|
+
- **[C10] Articulate why a reference works.** Detect: "make it like Linear" with no stated reason. Collect 3–5 references, write what makes each work, and give that description to the model rather than the brand name; taste grows from asking why you like something. (Source: https://prg.sh/ramblings/Why-Your-AI-Keeps-Building-the-Same-Purple-Gradient-Website, https://emilkowal.ski/ui/developing-taste)
|
|
21
|
+
- **[C11] Explore wide, then converge.** Detect: one direction, polished from the start. Interfere explored dozens of completely different directions in a one-week identity sprint before choosing. Fix: generate several genuinely different directions (different type, colour and layout ideas, not variants of one), compare them, then commit. Building A and B is a form of thinking only if you actually compare and discard. (Source: https://interfere.com/blog/how-we-built-interferes-new-website, https://emilkowal.ski/ui/friction-as-a-feature)
|
|
22
|
+
|
|
23
|
+
## Typography and colour as identity
|
|
24
|
+
|
|
25
|
+
- **[C12] Type is the fastest signal of authorship.** Detect: the display face is a default or a currently fashionable free font. Fix: one distinctive face used decisively; pair with high contrast (display + mono, serif + geometric sans); use extreme weight contrast (200 vs 800) and big size jumps (3x) rather than timid steps. **Disagreement:** restraint camps (Hobday: no more than two typefaces; Linear: Inter Display + Inter) get identity from tuning a quiet face rather than a loud one. Both reject the unchosen default. (Source: https://claude.com/blog/improving-frontend-design-through-skills, https://www.mania.design/blog/spot-the-slop-a-ui-designers-guide-to-fixing-ai-defaults/, https://anthonyhobday.com/sideprojects/saferules/, https://linear.app/now/how-we-redesigned-the-linear-ui)
|
|
26
|
+
- **[C13] Colour from the product, with a dominant hue.** Detect: an evenly spread, timid palette, or colour that signals nothing. Fix: a dominant colour with sharp accents rather than many equal colours; each colour has a function; draw palettes from IDE themes, cultural aesthetics or the product's material. (Source: https://claude.com/blog/improving-frontend-design-through-skills, https://www.mania.design/blog/spot-the-slop-a-ui-designers-guide-to-fixing-ai-defaults/)
|
|
27
|
+
- **[C14] Build colour systems, not swatches.** Detect: hand-picked hex values that look uneven across hues. Linear generates themes in LCH from three inputs (base, accent, contrast) instead of 98 variables, and reduced chroma for a more neutral, timeless feel; OKLCH/OKLab interpolation keeps gradients vivid. (Source: https://linear.app/now/how-we-redesigned-the-linear-ui, https://jakub.kr/work/gradients)
|
|
28
|
+
|
|
29
|
+
## Texture, illustration, depth
|
|
30
|
+
|
|
31
|
+
- **[C15] Atmosphere instead of flat fills.** Detect: solid white or solid near-black sections with nothing in them but cards. Fix: layered gradients, patterns, noise, halftone or dot grids that fit the aesthetic (Interfere's halftone skyline; the Next.js grid built from repeating gradients with a mask, a technique borrowed from Stripe). Pair complex backgrounds with simple foregrounds, never complex on complex. (Source: https://claude.com/blog/improving-frontend-design-through-skills, https://interfere.com/blog/how-we-built-interferes-new-website, https://rauno.me/craft/nextjs, https://anthonyhobday.com/sideprojects/saferules/)
|
|
32
|
+
- **[C16] Illustration built in code, with a meaning.** Detect: raster hero art or stock 3D shapes. Code-built visuals stay sharp, respond, and can animate: Stripe drew a laptop in under 1KB of CSS; Vercel builds marketing visuals as React components. Fix: draw illustrations from the product's own shapes and states, in code. (Source: https://stripe.com/blog/connect-front-end-experience, https://rauno.me/craft/vercel)
|
|
33
|
+
- **[C17] Depth through layering.** Detect: everything on one plane. Fix: blur and fade background layers, dim the backdrop behind overlays, put out-of-focus objects in front of or behind the focal point, tied to the content's meaning. (Source: https://rauno.me/craft/depth)
|
|
34
|
+
- **[C18] A technique catalogue beats the default card.** Detect: every section is the same card on the same background. Hobday's visual-techniques index lists over 200 alternatives (background shapes, stroke treatments, cut-outs, offset borders, tilted elements); pick one or two that fit and repeat them as the page's language. (Source: https://anthonyhobday.com/sideprojects/visualtechniques/)
|
|
35
|
+
- **[C19] Build the effect or cut it.** Detect: stock effect components (beams, meteors, spotlight) used as shipped. Fix: an effect that comes from the product, or none. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
36
|
+
|
|
37
|
+
## Repetition and rhythm
|
|
38
|
+
|
|
39
|
+
- **[C20] A device used everywhere stops working.** Detect: the same kicker, number style, card or reveal in every section. Repetition dulls novelty the way a repeated word loses meaning; Vercel's Ship site never put two high-novelty moments back to back. Fix: give each section a different entry point; let one recurring element be the system and everything else vary. (Source: https://rauno.me/craft/novelty, https://rauno.me/craft/vercel, https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
40
|
+
- **[C21] Motion as identity.** Detect: motion that could be on any site. Family made continuity its signature: "Continue" morphs into "Confirm" via shared letters, trays rise from the screen that triggered them, tabs slide toward the tapped tab. A single coherent motion idea, carried through, is a brand. (Source: https://benji.org/family-values)
|
|
41
|
+
|
|
42
|
+
## Words
|
|
43
|
+
|
|
44
|
+
- **[C22] Concrete words you can picture.** Detect: abstract claims ("a better way to work"). Harry Dry's landing-page order is title, subtitle, visual, social proof, CTA, and his first copy test is whether the reader can visualise it. Fix: name specific numbers, objects and outcomes. (Source: https://x.com/thejustinwelsh/status/1508420178111041550, https://www.mania.design/blog/spot-the-slop-a-ui-designers-guide-to-fixing-ai-defaults/)
|
|
45
|
+
- **[C23] The domain's own vocabulary.** Detect: generic product words (Items, Records, Manage). Fix: use the words people already use on that platform or in that trade, as Linear does per platform. (Source: https://x.com/detaildotdesign)
|
|
46
|
+
|
|
47
|
+
## Playfulness and explanation
|
|
48
|
+
|
|
49
|
+
- **[C24] Whimsy that rewards attention.** Detect: a site with no moments of play at all, or play that blocks the task. Josh Comeau's site bends a rainbow toward the cursor and adds small spring micro-interactions to icons; the play lives in details you discover, never in the path. (Source: https://www.joshwcomeau.com/blog/how-i-built-my-blog-v2/)
|
|
50
|
+
- **[C25] Let people manipulate the idea.** Detect: a concept explained only in prose and static diagrams. Bret Victor's explorable explanations: reactive documents where readers change an assumption and see the conclusion update. Fix: one control that changes an input and shows the effect. (Source: https://worrydream.com/ExplorableExplanations/, https://www.joshwcomeau.com/blog/how-i-built-my-blog-v2/)
|
|
51
|
+
|
|
52
|
+
## Restraint
|
|
53
|
+
|
|
54
|
+
- **[C26] Know what not to build.** Detect: features, sections or animations added because they were cheap to generate. As building gets cheaper, judgement about whether to build matters more; simplicity reads as more credible. Fix: for every section ask what is lost if it is removed. (Source: https://jakub.kr/writing/less-is-more, https://emilkowal.ski/ui/friction-as-a-feature)
|
|
55
|
+
- **[C27] Ship static first, add motion after.** Detect: a page whose layout only works mid-animation. The Next.js team shipped a static version first, then layered animation in small follow-ups, and kept the design restrained rather than leaning on gradients or gimmicks. (Source: https://rauno.me/craft/nextjs)
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Micro-detail craft
|
|
2
|
+
|
|
3
|
+
How to use: these are the small parts that separate a finished product from a generated one. Check each entry against the DOM (computed styles, attributes, pseudo-elements) and a 200% zoom of the screenshot; most can be verified mechanically. Values are starting points from named practitioners, not laws; where they disagree it says so.
|
|
4
|
+
|
|
5
|
+
## Buttons and press feedback
|
|
6
|
+
|
|
7
|
+
- **[D01] Press state.** Detect: no `:active` style on buttons. A subtle scale-down on press makes the interface feel like it heard you. Fix: `transform: scale(0.97)` (0.97–0.98) on `:active` with a ~150ms transition; animate a child, not the hit area, if hover flickers. (Source: https://x.com/emilkowalski_/status/1952354760637505541, https://emilkowal.ski/ui/7-practical-animation-tips, https://emilkowal.ski/ui/agents-with-taste)
|
|
8
|
+
- **[D02] Loading buttons keep their label.** Detect: label replaced by a spinner, or a spinner that flashes for 50ms. Fix: spinner beside the original label; show it only after ~150–300ms, keep it at least ~300–500ms once shown; disable at submission start (with an idempotency key), not before. (Source: https://vercel.com/design/guidelines)
|
|
9
|
+
- **[D03] Interaction states out-contrast rest.** Detect: hover/active/focus colours lighter or equal in contrast to the resting state. Fix: each interactive state has more contrast than rest. (Source: https://vercel.com/design/guidelines)
|
|
10
|
+
- **[D04] Button proportions.** Detect: tall buttons with tight sides. Fix: horizontal padding about twice the vertical; with an icon, slightly less padding on the icon side so it looks centred. (Source: https://anthonyhobday.com/sideprojects/saferules/, https://jakub.kr/writing/details-that-make-interfaces-feel-better)
|
|
11
|
+
- **[D05] Focus that passes.** Detect: `outline: none` without replacement, single-colour rings that vanish on some backgrounds, dashed 1px rings, rings hidden under a sticky header. Fix: `:focus-visible` with an `outline` (survives forced-colours mode) plus `outline-offset`; at least 3:1 against adjacent colours and an area of a 2px perimeter; on mixed backgrounds a two-tone ring (dark outline + light box-shadow); ring follows the element's radius. (Source: https://www.sarasoueidan.com/blog/focus-indicators/, https://rauno.me/craft/nextjs, https://vercel.com/design/guidelines)
|
|
12
|
+
- **[D06] Hit area bigger than the visual.** Detect: icon buttons whose clickable box equals a 16px glyph. Fix: at least 24px (44px on touch) via padding or a `::before` pseudo-element; label and checkbox share one target with no dead zone. (Source: https://vercel.com/design/guidelines, https://emilkowal.ski/ui/agents-with-taste)
|
|
13
|
+
- **[D07] Cursor on buttons.** Detect: mixed cursors (some buttons pointer, some default). **Disagreement:** browsers, the CSS spec and Tailwind v4 give buttons the default arrow and reserve the hand for links (Adam Silver, Hidde de Vries); many teams and users expect the hand on anything clickable and restore it. Fix: pick one rule per product, apply it to every button and button-role element; links always get the hand. (Source: https://tailwindcss.com/docs/upgrade-guide, https://adamsilver.io/blog/buttons-shouldnt-have-a-hand-cursor/, https://hidde.blog/some-pointers-on-default-cursors/)
|
|
14
|
+
|
|
15
|
+
## Inputs and forms
|
|
16
|
+
|
|
17
|
+
- **[D08] Input basics.** Detect: inputs under 16px on mobile (iOS zooms), controls without a `<label>`, placeholder used as label, wrong `type`/`inputmode`, spellcheck on emails or codes. Fix: 16px+ on mobile; a label on every control; placeholders show an example value and end with "…"; correct `type`, `inputmode` and `autocomplete`. (Source: https://vercel.com/design/guidelines)
|
|
18
|
+
- **[D09] Forgiving input.** Detect: typing blocked at a max length, paste disabled, trailing spaces causing errors. Fix: accept input and show feedback; block the submit past a limit, not the keystroke; trim trailing whitespace; allow pasting one-time codes. (Source: https://vercel.com/design/guidelines, https://x.com/detaildotdesign)
|
|
19
|
+
- **[D10] Keyboard submission.** Detect: Enter does nothing in a single-field form; Enter submits a textarea. Fix: Enter submits single-input forms; ⌘/Ctrl+Enter submits textareas. (Source: https://vercel.com/design/guidelines)
|
|
20
|
+
|
|
21
|
+
## Numbers, dates and text
|
|
22
|
+
|
|
23
|
+
- **[D11] Tabular numbers where values are compared or change.** Detect: proportional digits in table columns, prices, timers, counters (columns jitter). Fix: `font-variant-numeric: tabular-nums` (or a mono face) in tables and live counters only; note some fonts, Inter included, change numeral shapes when it is on. (Source: https://jakub.kr/writing/details-that-make-interfaces-feel-better, https://vercel.com/design/guidelines)
|
|
24
|
+
- **[D12] Number formatting.** Detect: "eight deployments", "$12" next to "$12.50", "10MB", locale-blind separators. Fix: numerals for counts; one decimal rule per context for currency (0 or 2, never both); a non-breaking space between number and unit; format with the user's locale. (Source: https://vercel.com/design/guidelines)
|
|
25
|
+
- **[D13] Timestamps.** Detect: "3 days ago" with no way to see the exact time, or full ISO dates for recent events. Fix: relative for recent items ("17m ago", "Yesterday"), absolute after about 7 days ("Oct 21"); omit the current year; a tooltip with full date, time and time zone on every timestamp; 12/24-hour from the locale. (Source: https://making.close.com/posts/ultimate-guide-to-timestamps, https://vercel.com/design/guidelines)
|
|
26
|
+
- **[D14] Wrapping.** Detect: orphaned last words in headings, short last lines in paragraphs. Fix: `text-wrap: balance` for headings and captions (Chromium balances up to 4 lines), `text-wrap: pretty` for body (Chromium adjusts the last 4 lines). (Source: https://webkit.org/blog/16547/better-typography-with-text-wrap-pretty/, https://jakub.kr/writing/details-that-make-interfaces-feel-better)
|
|
27
|
+
- **[D15] Glyph details.** Detect: `"`, `...`, `--`, broken "⌘ K" across lines. Fix: curly quotes, `…`, real dashes, ` ` inside glued terms (`10 MB`, `⌘ K`). (Source: https://vercel.com/design/guidelines, https://practicaltypography.com/summary-of-key-rules.html)
|
|
28
|
+
- **[D16] Size-aware tracking and leading.** Detect: 64px headings at default tracking and 1.5 leading; all-caps labels at 0 tracking. Fix: tighten leading and tracking as text grows, loosen for small text; add 5–12% tracking to all-caps. (Source: https://anthonyhobday.com/sideprojects/saferules/, https://practicaltypography.com/summary-of-key-rules.html)
|
|
29
|
+
- **[D17] Labels as a last resort.** Detect: "Email: x@y.com", "Phone: …" lists where the format already says what it is. Fix: drop labels the data explains; fold the label into the value ("12 left in stock"); demote labels on dashboards, promote them on dense spec sheets. (Source: https://www.refactoringui.com/previews/labels-are-a-last-resort)
|
|
30
|
+
- **[D18] Font smoothing.** Detect: heavy, blurry text on macOS. Fix: `-webkit-font-smoothing: antialiased` at the root for thinner, crisper text (a taste call; apply once, globally). (Source: https://jakub.kr/writing/details-that-make-interfaces-feel-better)
|
|
31
|
+
|
|
32
|
+
## Surfaces: borders, shadows, radii
|
|
33
|
+
|
|
34
|
+
- **[D19] Shadow-as-border.** Detect: solid 1px grey borders on cards over images or tinted backgrounds. Fix: a layered ring that adapts to any background, e.g. `0 0 0 1px rgba(0,0,0,.06), 0 1px 2px -1px rgba(0,0,0,.06), 0 2px 4px rgba(0,0,0,.04)`; dark mode `0 0 0 1px rgba(255,255,255,.08)`; raise alphas slightly on hover and transition `box-shadow` only. (Source: https://jakub.kr/writing/details-that-make-interfaces-feel-better, https://vercel.com/design/guidelines)
|
|
35
|
+
- **[D20] Inset image outline.** Detect: photos and avatars bleeding into same-coloured backgrounds. Fix: `outline: 1px solid rgba(0,0,0,.1); outline-offset: -1px` (white at 10% in dark mode). (Source: https://jakub.kr/writing/details-that-make-interfaces-feel-better)
|
|
36
|
+
- **[D21] Believable shadows.** Detect: single grey `0 4px 20px rgba(0,0,0,.25)` everywhere; shadows going in different directions. Fix: one light source for the whole UI; layer 2+ shadows; tint shadows toward the background hue; blur about twice the y-offset; as elevation grows, offsets and blur grow and opacity drops. Don't animate layered shadows. (Source: https://www.joshwcomeau.com/css/designing-shadows/, https://anthonyhobday.com/sideprojects/saferules/, https://vercel.com/design/guidelines)
|
|
37
|
+
- **[D22] Depth in dark mode.** Detect: drop shadows on dark surfaces doing nothing. Fix: express elevation by making closer surfaces lighter, and make 1px borders lighter than both container and background on dark (darker than both on light). **Disagreement:** Hobday says no shadows in dark UIs; Jakub keeps a faint white ring as a border substitute. (Source: https://anthonyhobday.com/sideprojects/saferules/, https://jakub.kr/writing/details-that-make-interfaces-feel-better)
|
|
38
|
+
- **[D23] One depth language.** Detect: some cards bordered, some shadowed, some tinted, with no rule. Fix: choose one depth technique and apply it everywhere. (Source: https://anthonyhobday.com/sideprojects/saferules/)
|
|
39
|
+
- **[D24] Concentric radii.** Detect: computed child `border-radius` ≥ parent radius minus padding. Fix: outer = inner + padding (+ border); not needed for 0 or pill radii. (Source: https://jakub.kr/writing/details-that-make-interfaces-feel-better, https://vercel.com/design/guidelines)
|
|
40
|
+
- **[D25] Tinted neutrals and hue consistency.** Detect: pure greys on a blue-tinted UI; borders and shadows neutral on a tinted background. Fix: tint neutrals toward the interface hue (under 5% saturation); tint borders, shadows and text toward the background hue. (Source: https://anthonyhobday.com/sideprojects/saferules/, https://vercel.com/design/guidelines)
|
|
41
|
+
- **[D26] Gradients without mud.** Detect: grey dead zone in the middle of a two-colour gradient; banding on fades to dark. Fix: interpolate `in oklab` (Tailwind 4 default) or `in oklch` (more vivid, may add hues you did not define); avoid CSS mask fades to dark, use background images. (Source: https://jakub.kr/work/gradients, https://vercel.com/design/guidelines)
|
|
42
|
+
|
|
43
|
+
## Icons and alignment
|
|
44
|
+
|
|
45
|
+
- **[D27] One icon family.** Detect: mixed stroke widths, filled and outline icons side by side, icons from two libraries. Fix: one set, one stroke weight, sized to its grid (16/20/24); one meaning per icon across the product; visible text labels except for the few universal icons (home, search, print). (Source: https://www.nngroup.com/articles/icon-usability/, https://vercel.com/design/guidelines)
|
|
46
|
+
- **[D28] Icon weight next to text.** Detect: icons visually heavier than the label they sit beside. Fix: lower icon contrast (opacity or a lighter colour) and balance weight, size and spacing in the lockup. (Source: https://anthonyhobday.com/sideprojects/saferules/, https://digitalsynopsis.com/design/useful-ui-ux-design-tips/, https://vercel.com/design/guidelines)
|
|
47
|
+
- **[D29] Optical alignment.** Detect: play triangles, chevrons and round icons centred by bounding box and looking off. Fix: adjust by eye (±1px), fix offsets inside the SVG where possible. (Source: https://vercel.com/design/guidelines, https://jakub.kr/writing/details-that-make-interfaces-feel-better, https://anthonyhobday.com/sideprojects/saferules/)
|
|
48
|
+
- **[D30] Badge placement follows the icon.** Detect: notification dots always top-right regardless of icon shape. Fix: place each badge where the icon's silhouette leaves room. (Source: https://x.com/detaildotdesign)
|
|
49
|
+
- **[D31] Status chips only for real state.** Detect: badges on every row with no changing state behind them; status by colour alone. Fix: chips only for real, changing state, one visual language, always with a text label. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md, https://vercel.com/design/guidelines)
|
|
50
|
+
|
|
51
|
+
## People and brands
|
|
52
|
+
|
|
53
|
+
- **[D32] Avatars.** Detect: initials everywhere when photos exist; placeholder generators (pravatar, DiceBear); initials colours that change on reload. Fix: real photo first; fallback chain photo → initials on a background colour hashed from a stable ID (identical input, identical colour); segment initials with `Intl.Segmenter` for non-Latin names; one avatar shape across the product; size by context (small in tables, large where the person is the subject); in overlapping stacks, a ring in the page background colour keeps edges clean, with a "+N" overflow. (Source: https://shopify.dev/docs/api/app-home/polaris-web-components/media/avatar, https://dev.to/joshuaslate/deterministic-react-avatar-fallbacks-5ghb, https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md, https://digitalsynopsis.com/design/useful-ui-ux-design-tips/)
|
|
54
|
+
- **[D33] Brand logos: colour or mono.** Detect: a customer wall mixing colour and grey logos; a "Sign in with Google" button with a grey G. Fix: customer and press walls in one uniform treatment (mono is the default so your brand stays loudest; full colour is reasonable when every logo is a household name); never mix. Functional logos that identify something to click (OAuth buttons, integration pickers) keep official colours: Google forbids recolouring or monochroming its G. (Source: https://genesysgrowth.com/blog/designing-customer-logo-walls, https://developers.google.com/identity/branding-guidelines)
|
|
55
|
+
- **[D34] Logo sizing by area, not height.** Detect: all logos the same height (wide wordmarks dominate) or same width (square marks balloon). Fix: width = base × aspect-ratio^0.5 (0 = same width, 1 = same height; ~0.5 is the sweet spot); compensate for ink density (scale solid marks down slightly, thin ones up); crop padding baked into files; align by visual centre. At a 48px base, a square mark is 48px, an 8:1 wordmark ~135×17px and a 15.6:1 wordmark ~190×12px, so on marketing pages a base of 56–64px keeps long wordmarks readable (derived from Sanity's worked examples). (Source: https://www.sanity.io/blog/the-logo-soup-problem, https://danpaquette.net/read/automatically-resizing-a-list-of-icons-or-logos-so-theyre-visually-proportional/)
|
|
56
|
+
- **[D35] Logo contrast floor.** Detect: mono logos rendered with opacity below ~0.45 black on white (or equivalent on dark). WCAG exempts logotypes from text contrast, but not when a logo is a link, and the exemption does not make a faint logo recognisable. Fix: treat 3:1 against the background as the floor (black at ≥ ~42% opacity on white; ~54% for 4.5:1, by WCAG luminance arithmetic); 6–12 logos per row rather than a dense grid; check in both themes. (Source: https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html, https://genesysgrowth.com/blog/designing-customer-logo-walls)
|
|
57
|
+
|
|
58
|
+
## Feedback surfaces
|
|
59
|
+
|
|
60
|
+
- **[D36] Toasts.** Detect: toasts that vanish while hovered, stack as a tall column, or exit in a different direction than they entered. Fix: ~4s default; pause on hover and when the tab is hidden; swipe to dismiss in the direction they came from; stack with each toast behind scaled down ~0.05 and offset, expand on hover; announce via polite `aria-live`; serious errors belong inline, not only in a toast. (Source: https://emilkowal.ski/ui/building-a-toast-component, https://vercel.com/design/guidelines, https://www.nngroup.com/articles/error-message-guidelines/)
|
|
61
|
+
- **[D37] Tooltips.** Detect: tooltips carrying information needed to finish a task; every tooltip in a toolbar re-delaying; hover-only tooltips. Fix: inline help first; delay the first tooltip in a group, show its neighbours instantly without animation; open on keyboard focus too; never hide essential instructions in one. (Source: https://emilkowal.ski/ui/7-practical-animation-tips, https://vercel.com/design/guidelines, https://www.nngroup.com/articles/tooltip-guidelines/)
|
|
62
|
+
- **[D38] Keyboard shortcuts.** Detect: shortcuts that exist but are never shown, or shown as "Ctrl" on a Mac. Fix: show the shortcut beside its action in menus and tooltips with platform symbols; support non-QWERTY layouts; holding a modifier can reveal number shortcuts in lists. (Source: https://vercel.com/design/guidelines, https://x.com/detaildotdesign)
|
|
63
|
+
- **[D39] Loading indicators matched to wait.** Detect: spinners on sub-second loads; skeletons that do not match the final layout; skeletons for uploads. Fix: under 1s show nothing; full-page loads under 10s get a skeleton matching the final layout exactly; single modules get a spinner; over 10s a progress bar with an estimate. **Disagreement:** Viget's 136-person test found skeletons felt slowest (2.82s perceived vs 2.41s spinner); treat skeletons as a layout-stability tool for familiar screens, not a perceived-speed trick. (Source: https://www.nngroup.com/articles/skeleton-screens/, https://vercel.com/design/guidelines, https://www.viget.com/articles/a-bone-to-pick-with-skeleton-screens/)
|
|
64
|
+
- **[D40] Optimistic UI with undo.** Detect: every action waits on a spinner; destructive actions with a modal confirm. Fix: update immediately, reconcile with the server, roll back with an error or offer undo; confirm or undo for destructive actions. (Source: https://vercel.com/design/guidelines)
|
|
65
|
+
- **[D41] Ellipsis on follow-ups.** Detect: "Rename" opening a dialog with no hint. Fix: menu items that open a follow-up and in-progress labels end with "…" ("Rename…", "Saving…"). (Source: https://vercel.com/design/guidelines)
|
|
66
|
+
|
|
67
|
+
## Browser chrome and page finish
|
|
68
|
+
|
|
69
|
+
- **[D42] Favicon and browser colour.** Detect: favicon that disappears or gets a white box on dark Safari tabs; mismatched browser UI colour. Fix: brighten the mark and reduce its padding (Paco's fix moved Linear's favicon from #6E79D6 to #8299FF); set `<meta name="theme-color">` to the page background and `color-scheme: dark` on dark themes. (Source: https://paco.me/writing/safari-favicon-showing-white-background, https://vercel.com/design/guidelines)
|
|
70
|
+
- **[D43] OG image.** Detect: missing `og:image`, or a generic one for every page. Fix: at least 1200×630 (1.91:1), not below 600×315, under 8MB; one short message in a heavy face that survives thumbnail size; page-specific `<title>` that reflects context. (Source: https://developers.facebook.com/docs/sharing/webmasters/images/, https://vercel.com/design/guidelines)
|
|
71
|
+
- **[D44] Scrollbars.** Detect: double scrollbars, scrollbars on elements that never overflow, layout jumping when a scrollbar appears. Fix: render only useful scrollbars (preview with macOS "always show"); `scrollbar-gutter: stable` where content length changes; `overscroll-behavior: contain` in modals and drawers. (Source: https://vercel.com/design/guidelines, https://developer.mozilla.org/en-US/docs/Web/CSS/scrollbar-gutter)
|
|
72
|
+
- **[D45] Theme switching.** Detect: elements cross-fading at different speeds when toggling dark mode. Fix: disable all transitions for the frame of the switch (inject `transition: none !important`, flip the theme, force a style read, remove). (Source: https://paco.me/writing/disable-theme-transitions)
|
|
73
|
+
- **[D46] Selection colour.** Detect: default blue selection clashing with a strongly branded page. Fix (optional): a `::selection` colour from the brand with enough contrast against the selected text. **Disagreement:** some argue overriding selection is cosmetic and risky for accessibility; only do it with a contrast check. (Source: https://classic.yarnpkg.com/en/package/custom-selection)
|
|
74
|
+
- **[D47] Links, URLs and anchors.** Detect: navigation built with `<button>` or `<div onClick>`; tabs and filters lost on refresh; anchored headings hidden under sticky headers. Fix: `<a>` for navigation so ⌘-click works; state in the URL; `scroll-margin-top` on anchored headings. (Source: https://vercel.com/design/guidelines)
|
|
75
|
+
- **[D48] Drag details.** Detect: drags that start on the first pixel (accidental drags), text getting selected mid-drag. Fix: start a drag only after a few pixels of movement; disable text selection and mark the dragged element `inert` while dragging. (Source: https://x.com/raunofreiberg/status/1923056929389019314, https://vercel.com/design/guidelines)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Landing pages that show the product working
|
|
2
|
+
|
|
3
|
+
How to use: for product and waitlist pages. Check the first viewport, then scroll once and note every place the product appears: is it a picture of the product, or the product doing something? Detection works from a screenshot sequence plus the DOM (`<img>` vs live HTML, `<video>`, `<canvas>`, animation code).
|
|
4
|
+
Evidence quality varies: practitioner write-ups (Interfere, Vercel, Stripe) describe what they built; conversion numbers come mostly from vendors and are marked as such.
|
|
5
|
+
|
|
6
|
+
## Show it, don't frame it
|
|
7
|
+
|
|
8
|
+
- **[L01] Build the product in code, not as screenshots.** Detect: hero and feature visuals are `<img>` screenshots, often inside device or browser frames. Teams known for craft build product visuals as live HTML/CSS/SVG instead: Interfere builds UI graphics in code rather than screenshots; Vercel builds marketing visuals as React components; Stripe animated its Connect onboarding demo entirely in code (~5KB); one survey of server HTML found no `<video>` on the Linear, Vercel, Raycast, Supabase, Cal.com, Stripe or Figma homepages. Code-built UI is crisp at any size, can respond, and can show behaviour. Fix: rebuild the key product moment in HTML from real data. (Source: https://interfere.com/blog/how-we-built-interferes-new-website, https://rauno.me/craft/vercel, https://stripe.com/blog/connect-front-end-experience, https://github.com/AbdelrhmanAh7/FlowLine_Web/issues/96)
|
|
9
|
+
- **[L02] Show only what the moment needs.** Detect: a full-fidelity product clone with every sidebar item and toolbar. Interfere reduces unimportant chrome to skeleton placeholders so each graphic communicates one thing; the raw product adds noise. Fix: keep the real content of the moment, abstract the rest. (Source: https://interfere.com/blog/how-we-built-interferes-new-website)
|
|
10
|
+
- **[L03] No fake browser chrome.** Detect: traffic-light dots, fake URL bars, or a generic panel framed as a window. Fix: a plain rounded window or the product's own chrome (Linear's homepage composition uses no browser chrome). (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md, https://github.com/AbdelrhmanAh7/FlowLine_Web/issues/96)
|
|
11
|
+
- **[L04] Product preview at real size.** Detect: a hero visual shrunk into an unreadable thumbnail or cropped so the key action is cut. Cursor's hero shows a realistic editor window at full size so visitors see the product before clicking; its download CTA adapts its label to the visitor's OS. (Source: https://blog.logrocket.com/ux-design/hero-section-examples-best-practices/)
|
|
12
|
+
- **[L05] Cover-the-headline test.** Detect: hide the H1; if the first viewport no longer says what the product does, the visual is decoration. Harry Dry's order puts a visual third, right after title and subtitle, so the visitor can picture the outcome. (Source: https://x.com/thejustinwelsh/status/1508420178111041550, https://blog.logrocket.com/ux-design/hero-section-examples-best-practices/)
|
|
13
|
+
|
|
14
|
+
## Demo patterns
|
|
15
|
+
|
|
16
|
+
- **[L06] Hero timeline that mirrors real product behaviour.** Detect: a static hero for a product whose value is something happening over time. Interfere's hero plays a timeline sequence that mirrors how new events appear in the product, with blur 10px→0, opacity 0→1 and translateY 20%→0 staggered by group, on first visit only. (Source: https://interfere.com/blog/how-we-built-interferes-new-website)
|
|
17
|
+
- **[L07] One feature, one animated explanation.** Detect: a feature section with a heading and paragraph but no demonstration. Emil Kowalski points to Linear's animated explanation of a feature on its marketing page as motion that earns its place. Fix: each feature section gets a small product fragment that performs that feature once. (Source: https://emilkowal.ski/ui/you-dont-need-animations)
|
|
18
|
+
- **[L08] A live, clickable component.** Detect: a component library or UI product shown only as code or images. Sonner's own page lets visitors fire real toasts by type (success, error, promise, action…), position and expand mode: the docs are the demo. Fix: when the product is UI, let visitors trigger it. (Source: https://sonner.emilkowal.ski)
|
|
19
|
+
- **[L09] Reactive demo: change an input, see the output.** Detect: a claim about transformation shown as before/after images. Explorable explanations let the reader change an assumption and see results update; Josh Comeau embeds draggable controls (e.g. container width) to teach by manipulation. Fix: one input the visitor controls and the product's real response beside it. (Source: https://worrydream.com/ExplorableExplanations/, https://www.joshwcomeau.com/blog/how-i-built-my-blog-v2/)
|
|
20
|
+
- **[L10] Diagram for the invisible part.** Detect: infrastructure or engineering value described in prose. Interfere's engineering hero is an animated SVG diagram; Vercel's Ship site sends icons along orbit rings with CSS `offset-path`; Stripe used rotating 3D cubes as building blocks. Fix: animate the flow, not a metaphor unrelated to it. (Source: https://interfere.com/blog/how-we-built-interferes-new-website, https://rauno.me/craft/vercel, https://stripe.com/blog/connect-front-end-experience)
|
|
21
|
+
- **[L11] Video when capture beats rebuilding.** Detect: GIFs, or a 60s autoplay video as the hero. Measured practice: hero loops around 6s (Arc 6.7s; Screen Studio 5.5–6.3s), tile loops 10–20s at 0.3–0.4MB (Resend), long walkthroughs behind a click; posters, `preload="none"`/`metadata`, muted and `playsinline`; Linear uses video in its changelog rather than its homepage. (Source: https://github.com/AbdelrhmanAh7/FlowLine_Web/issues/96, https://vercel.com/design/guidelines)
|
|
22
|
+
- **[L12] Let people control the pace.** Detect: demo videos with no controls. Interfere offers playback speeds from 0.25x to 2x on its demo videos; any loop longer than 5s next to content needs pause/stop. (Source: https://interfere.com/blog/how-we-built-interferes-new-website, https://vercel.com/design/guidelines)
|
|
23
|
+
- **[L13] Ambient interaction is not a demo.** Detect: a hero whose only interactivity is light following the cursor. Raycast's hero light reacts to the pointer; it sets mood but does not show the product. Fix: atmosphere is fine as a layer, but some element on the first screen must show the product doing its job. (Source: https://hero.gallery/hero-gallery/raycast)
|
|
24
|
+
|
|
25
|
+
## Structure and rhythm
|
|
26
|
+
|
|
27
|
+
- **[L14] "How it works" in three steps with product, not a text row.** Detect: four or more columns of heading + paragraph; numbered steps with no visual. Readers scan headings and the left side; prose rows read as documentation. Fix: at most three steps, each with a fragment of the product at that step; or show the finished result first and the steps that made it. (Source: https://www.nngroup.com/articles/horizontal-attention-leans-left/, https://www.nngroup.com/articles/layer-cake-pattern-scanning/, https://www.developersdigest.tech/blog/ai-design-slop-and-how-to-spot-it)
|
|
28
|
+
- **[L15] Scroll-driven product story without hijacking.** Detect: sticky sections that take over the wheel; horizontal scroll driven by vertical. Fix: a sticky claim with the product proof scrolling beside it, or CSS view-timeline reveals; keep native scroll speed; keep important text out of scroll-driven sections. (Source: https://developer.chrome.com/docs/css-ui/scroll-driven-animations, https://www.nngroup.com/articles/scrolljacking-101/)
|
|
29
|
+
- **[L16] Vary how sections open.** Detect: the same eyebrow/kicker, mono number or small-caps label above every H2. Fix: one recurring system element at most; each section starts with what it is about (a product fragment, a plain heading, a number that matters). (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md, https://rauno.me/craft/novelty, https://x.com/steveschoger/status/956229542288543744)
|
|
30
|
+
- **[L17] Alternate loud and quiet motion.** Detect: every section animates for attention, or none does. Vercel's Ship site paired each high-novelty animation with low-novelty micro-motion and never put two loud ones back to back; Interfere kept loops below the hero deliberately restrained. (Source: https://rauno.me/craft/vercel, https://interfere.com/blog/how-we-built-interferes-new-website)
|
|
31
|
+
- **[L18] Fast first paint, enhancement after.** Detect: hero waits on JS or WebGL. Vercel's hero renders five of six layers without client JS; the shader is code-split, fades in after load and is skipped on low-powered devices. Never start the first viewport at `opacity: 0`. (Source: https://rauno.me/craft/vercel, https://dev.to/gillygangopolus/the-scroll-animation-that-was-hiding-our-lcp-element-2edp)
|
|
32
|
+
- **[L19] Cheap to render.** Detect: heavy video or thousands of DOM nodes for a decorative pattern. Stripe's CSS laptop is under 1KB and its animated demo ~5KB; Interfere moved a dot pattern from SVG to canvas; animations start via IntersectionObserver once fully visible. (Source: https://stripe.com/blog/connect-front-end-experience, https://interfere.com/blog/how-we-built-interferes-new-website)
|
|
33
|
+
- **[L20] Reduced motion keeps the story.** Detect: demos that vanish or keep looping under reduced motion. Fix: pause ambient loops gracefully, keep user-triggered interactions, show posters with a play button instead of autoplay video. (Source: https://rauno.me/craft/vercel, https://github.com/AbdelrhmanAh7/FlowLine_Web/issues/96)
|
|
34
|
+
- **[L21] Accessible illustrations.** Detect: decorative HTML demos read aloud node by node. Fix: `aria-hidden` on the inner tree and one descriptive label on the group; copy buttons labelled, with a polite "copied" announcement. (Source: https://rauno.me/craft/nextjs, https://rauno.me/craft/vercel)
|
|
35
|
+
|
|
36
|
+
## Proof
|
|
37
|
+
|
|
38
|
+
- **[L22] Logo strip that can be read.** Detect: logos below ~0.45 opacity, wordmarks under ~16px tall, colour mixed with mono, 20+ logos in a grid. Fix: 6–12 real customer logos, one treatment (mono by default; colour if every mark is a household name), area-normalised sizing (see D34), at least 3:1 against the background, placed right under the hero or beside the CTA. (Source: https://genesysgrowth.com/blog/designing-customer-logo-walls, https://www.sanity.io/blog/the-logo-soup-problem, https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html)
|
|
39
|
+
- **[L23] Logos only work if this buyer recognises them.** Detect: a logo wall of companies the target visitor would not know or care about, and no other proof. Logos act as a fast credibility check right under the hero, but only when the target buyer recognises and respects the companies; one detailed case study can outweigh many short quotes, and proof works best at moments of doubt such as next to the CTA. Fix: pick logos for this audience, link them to case studies, put one specific result beside the CTA. **Disagreement:** SaaS Hero cites an unverified claim that most B2B brands that tested removing their logo bar saw conversions improve; test rather than assume a logo strip helps. (Source: https://www.saashero.net/strategy/landing-page-social-proof-examples/, https://genesysgrowth.com/blog/designing-customer-logo-walls)
|
|
40
|
+
- **[L24] No customers yet: show the work, honestly.** Detect: placeholder logos or invented testimonials on a pre-launch page. Fix: real product output, shipped changes with dates, the founder's own words; fake reviews and testimonials, including AI-generated ones, are illegal in the US since 2024. (Source: https://www.ftc.gov/news-events/news/press-releases/2024/08/federal-trade-commission-announces-final-rule-banning-fake-reviews-testimonials)
|
|
41
|
+
|
|
42
|
+
## Interactive demos and waitlists: what the numbers say
|
|
43
|
+
|
|
44
|
+
- **[L25] Interactive demos get clicked when they are short and have a way out.** Navattic's vendor data: top 1% of interactive demos reached ~54% click-through to a CTA (2025, 28k demos); in 2023 most CTA clicks landed around steps 7 and 15, and offering two options at a CTA step (continue the demo, or convert) worked well. Treat as vendor data. (Source: https://navattic.com/report/state-of-the-interactive-product-demo-2025, https://www.navattic.com/report/state-of-the-interactive-product-demo-2023)
|
|
45
|
+
- **[L26] Waitlist page: one action, then a reason to share.** Detect: navigation, multiple CTAs and long forms on a waitlist page. Common advice: an outcome headline, one email field above the fold, real signup numbers only, a referral mechanic on the success page. Robinhood's pre-launch page showed each person's place in line and let referrals move them up, reportedly reaching about a million signups (secondary sources). (Source: https://getlaunchlist.com/blog/waitlist-landing-page-examples-that-convert, https://thegrowthplaybook.substack.com/p/how-robinhood-turned-a-landing-page)
|
|
46
|
+
- **[L27] For designers, the page is the portfolio.** Detect: a design tool's own page with default type, faint logos or broken states. A design-literate audience judges the craft directly: focus rings that follow radius, fluid `clamp()` headings, restrained motion, no gimmicks (the Next.js site's approach). Fix: the waitlist page should demonstrate the product's standard in its own details, and ideally run the product on itself (e.g. critique a sample screen live). (Source: https://rauno.me/craft/nextjs)
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Mistakes that make UI look amateur or AI-generated
|
|
2
|
+
|
|
3
|
+
How to use: run each entry against a screenshot (squint, zoom to 200%) and the DOM (computed styles, class names). Flag an entry only when the detection condition is actually met, and quote the element. Entries marked **Disagreement** have credible designers on both sides: report them as judgement calls, not defects.
|
|
4
|
+
Many tells are fine alone; the "default" look comes from several of them together. Three or more first-order tells (M01–M12) on one page means the page was averaged, not designed.
|
|
5
|
+
|
|
6
|
+
## First-order AI tells (the 2024–25 default look)
|
|
7
|
+
|
|
8
|
+
- **[M01] Unchosen purple/indigo gradient.** Violet-to-indigo or blue-to-purple gradients on the hero background, primary button or accents. In the DOM, look for `indigo-500`/`violet-*` classes or tokens named `gradient-start`/`gradient-end`. This is the single most recognised AI tell: Tailwind's creator joked in 2025 that his `bg-indigo-500` demo buttons from five years earlier are why every generated UI is indigo. Fix: derive the palette from something true about the product and name colours by job (primary action, warning, success), not by position in a gradient. (Source: https://x.com/adamwathan/status/1953510802159219096, https://www.mania.design/blog/spot-the-slop-a-ui-designers-guide-to-fixing-ai-defaults/, https://www.925studios.co/blog/ai-slop-design-tells)
|
|
9
|
+
- **[M02] Gradient-filled headline text.** `background-clip: text` with a gradient on an H1 or a single word. Contrast changes across the word, so some letters fail even when others pass, and it reads as decoration standing in for hierarchy. Fix: solid text; let size, weight and line breaks carry the headline. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md, https://www.developersdigest.tech/blog/ai-design-slop-and-how-to-spot-it)
|
|
10
|
+
- **[M03] Inter (or system UI) everywhere, by default.** Computed `font-family` is Inter/Roboto/Arial/system on both H1 and body, with no display face and no deliberate weight contrast. Type is the fastest signal of authorship; the issue is the missing decision, not Inter itself. Fix: choose a display face for the brand and a quiet text face; changing the font is about an hour of work and the highest-leverage anti-slop move. **Disagreement:** Linear deliberately uses Inter Display for headings and Inter for text; Inter chosen and tuned is fine. (Source: https://www.925studios.co/blog/ai-slop-design-tells, https://www.mania.design/blog/spot-the-slop-a-ui-designers-guide-to-fixing-ai-defaults/, https://linear.app/now/how-we-redesigned-the-linear-ui)
|
|
11
|
+
- **[M04] Three (or four) equal icon-topped feature cards.** A row of identically sized rounded cards, soft shadow, a thin line icon in a tinted rounded square on each, a two-word title and a sentence. Equal tiles mean nothing is most important, and the icon-in-chip is the stock Lucide look. Fix: one dominant tile with the rest supporting, or content that refuses a 3-column grid; drop the icon chip or draw marks for this product. (Source: https://www.925studios.co/blog/ai-slop-design-tells, https://www.developersdigest.tech/blog/ai-design-slop-and-how-to-spot-it, https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
12
|
+
- **[M05] Emoji used as icons.** Emoji code points in nav items, feature headings, buttons or bullets (rocket, lightning, sparkles). Emoji render differently per OS, cannot take the text colour, and look like placeholders. Fix: one icon set with one stroke weight, or plain text labels. (Source: https://www.ohhwells.com/blog/vibe-coded-website, https://www.developersdigest.tech/blog/ai-design-slop-and-how-to-spot-it)
|
|
13
|
+
- **[M06] Centred everything.** `text-align: center` on paragraphs longer than two lines and on every section heading. Eye-tracking puts about 80% of fixations on the left half of the screen, and centred multi-line text has a ragged left edge the eye must hunt for. Fix: left-align body copy and most section starts; centre only short lockups (a one-line headline + CTA). (Source: https://www.nngroup.com/articles/horizontal-attention-leans-left/, https://practicaltypography.com/summary-of-key-rules.html)
|
|
14
|
+
- **[M07] Pill badge above the H1.** A small capsule ("New", sparkle emoji, "Introducing…") directly above a centred headline. It is now template furniture. Fix: remove it unless it announces dated, real news, and then link it to that news. (Source: https://www.developersdigest.tech/blog/ai-design-slop-and-how-to-spot-it, https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
15
|
+
- **[M08] Reflexive glassmorphism.** `backdrop-filter: blur()` on nav, cards and pills over a flat or gradient background where nothing is actually behind them. Translucent panels give uneven contrast across busy backgrounds and look like a trend applied without a reason. Fix: use blur only where layering is real (an overlay or nav over scrolling content); use more blur over busy backgrounds; check text contrast against every background the panel can sit on. (Source: https://www.nngroup.com/articles/glassmorphism/, https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
16
|
+
- **[M09] Generic copy.** Headlines that could belong to any company ("Build faster. Ship smarter.", "The all-in-one platform for…"), tricolon slogans, superlatives (seamless, powerful, cutting-edge) and CTAs like "Get started", "Learn more", "Continue". Fix: say what the product does and for whom in words a founder would say aloud; name the action and its object on buttons ("Save API key", not "Continue"). (Source: https://www.mania.design/blog/spot-the-slop-a-ui-designers-guide-to-fixing-ai-defaults/, https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md, https://vercel.com/design/guidelines)
|
|
17
|
+
- **[M10] Invented proof.** Testimonials with stock or generated faces (pravatar, DiceBear), logo strips of companies that are not customers, round-number stats with no source. Beyond trust, the US FTC rule (in force since Oct 2024) bans fake and AI-generated reviews and testimonials, with penalties up to about $52k per violation. Fix: real proof only; if there is none yet, show honest product facts or shipped work instead. (Source: https://www.ftc.gov/news-events/news/press-releases/2024/08/federal-trade-commission-announces-final-rule-banning-fake-reviews-testimonials, https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
18
|
+
- **[M11] Stat banner and count-up numbers.** A row of 3–4 huge numbers ("10x", "99.9%", "50k+"), often ticking up on scroll. Unsourced numbers read as filler, and the count-up delays the one thing the visitor wanted to read. Fix: cut unless each number is real, specific and attributed; show the final value immediately. (Source: https://www.developersdigest.tech/blog/ai-design-slop-and-how-to-spot-it, https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
19
|
+
- **[M12] Untouched library defaults and stock effects.** shadcn zinc/slate base, default radius on every component, unstyled Card/Badge; or Aceternity/Magic UI effects as shipped (Spotlight, Background Beams, Border Beam, Meteors, Shimmer Button, Marquee). Fix: theme base colour, radius and type scale; build an effect tied to the product or cut it. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
20
|
+
|
|
21
|
+
## Second-order tells (the "tasteful" defaults that replaced the first set)
|
|
22
|
+
|
|
23
|
+
- **[M13] The new default fonts.** Space Grotesk, Instrument Serif, Fraunces or Geist pairings, especially one italic serif word inside an otherwise sans headline. Anthropic's own write-up notes models converge on Space Grotesk even after being told to avoid Inter. Fix: pick a face for this brand's reasons and keep the type system consistent; no single accented word. (Source: https://claude.com/blog/improving-frontend-design-through-skills, https://www.developersdigest.tech/blog/ai-design-slop-and-how-to-spot-it)
|
|
24
|
+
- **[M14] Accented headline word.** One word set apart by colour, italic, highlight or gradient. It is a template move that tells the reader where to look instead of writing a headline that does it. Fix: let size, weight and the line break carry emphasis; if something must be emphasised, emphasise the meaningful noun through the type system everywhere. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
25
|
+
- **[M15] Cream ground + terracotta accent, or near-black + one neon.** Parchment background with clay/rust accent and a high-contrast serif; or a permanent dark page with a single acid-green/lime/vermilion signal and mono labels. Both became the "I avoided purple" default. Fix: derive colour from the subject; go dark only when the product calls for it; give the accent one job. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md, https://www.developersdigest.tech/blog/ai-design-slop-and-how-to-spot-it)
|
|
26
|
+
- **[M16] Template chrome: the same kicker on every section.** Detect: three or more sections opening with the same small device (uppercase tracked label, mono "01 —", middle-dot meta string, "WORD — fragment") above the H2. Steve Schoger popularised the eyebrow as a way to make a plain heading pattern more interesting, which only works while it is rare; repeated on every section it becomes wallpaper, the same way a word repeated loses meaning. Fix: keep a label only where it adds information; vary how sections open (a number, a product fragment, a plain heading); set labels in the body face, sentence case. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md, https://x.com/steveschoger/status/956229542288543744, https://rauno.me/craft/novelty)
|
|
27
|
+
- **[M17] Decorative 01/02/03 numbering.** Two-digit numbers on cards or features that have no order. Numbers promise a sequence; without one they are ornament. Fix: number only real steps, rankings or an index the page actually navigates by. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md, https://www.developersdigest.tech/blog/ai-design-slop-and-how-to-spot-it)
|
|
28
|
+
- **[M18] Mono and all-caps where nothing is data.** Monospace on labels, nav and section titles; uppercase headings. Mono should signal machine values (IDs, code, timestamps); caps lower legibility for anything longer than a short label. Fix: sentence case in the body face; reserve mono for real data. **Disagreement:** tracked caps for short labels are a classic, legitimate device (add 5–12% tracking); the problem is using it everywhere. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md, https://practicaltypography.com/summary-of-key-rules.html, https://anthonyhobday.com/sideprojects/visualtechniques/techniques/text/letter-spacing-on-all-capitals.html)
|
|
29
|
+
- **[M19] Fake window chrome and screenshots in frames.** Traffic-light dots or a fake browser bar around a panel; product shown as flat screenshots inside device or browser frames instead of working. The frame says "this is a picture of software" and the screenshot cannot show behaviour. Fix: build the product UI in HTML from real data, strip unimportant chrome to skeletons, and make one thing in it happen (see landing-demos.md). (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md, https://interfere.com/blog/how-we-built-interferes-new-website, https://github.com/AbdelrhmanAh7/FlowLine_Web/issues/96)
|
|
30
|
+
- **[M20] Copied "Linear glow".** Dark hero, blurred animated gradient glow behind a product shot, faint white-10% borders on zinc-950 cards. Fix: borrow the principle (atmosphere, depth) and build your own; separate dark surfaces by more than a faint border. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
31
|
+
|
|
32
|
+
## Layout and structure
|
|
33
|
+
|
|
34
|
+
- **[M21] Uniform everything.** Same radius, padding and card height on every surface (e.g. 16px radius and 24px padding everywhere), so nothing leads. Fix: vary size, closeness and weight on purpose so the primary element is bigger or heavier and the rest recedes; vary radius and elevation by role. (Source: https://www.mania.design/blog/spot-the-slop-a-ui-designers-guide-to-fixing-ai-defaults/, https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
35
|
+
- **[M22] Many-column "how it works" text row.** Detect: four or more columns in one row, each a heading plus 25+ words of prose, with no product visual. It reads as documentation: attention falls off sharply to the right, and readers scan headings rather than paragraphs. Fix: at most three steps, each paired with a small working product fragment; or show the end result first and the two or three moves that produced it; headings that make sense on their own. (Source: https://www.nngroup.com/articles/horizontal-attention-leans-left/, https://www.nngroup.com/articles/layer-cake-pattern-scanning/, https://www.developersdigest.tech/blog/ai-design-slop-and-how-to-spot-it)
|
|
36
|
+
- **[M23] Cards inside cards.** Boxes nested two or three deep, each with border and radius. Fix: one level of containment; use space, alignment and type for the rest. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
37
|
+
- **[M24] Coloured stripe on card edges.** A 2–4px coloured left or top border on every card. Fix: express status or category with weight, position, background or a real label. (Source: https://www.developersdigest.tech/blog/ai-design-slop-and-how-to-spot-it, https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
38
|
+
- **[M25] Off-scale spacing and inverted padding.** Gaps like 10px, 18px, 22px next to each other; a container whose inner padding is larger than the space around it. Fix: a mathematical scale (multiples of 4/8); outer padding equal to or larger than inner padding; measure gaps between the high-contrast edges you actually see, not bounding boxes. (Source: https://anthonyhobday.com/sideprojects/saferules/)
|
|
39
|
+
- **[M26] Elements that align with nothing.** Header, toolbar and content start at different x positions; icons centred geometrically but visibly off. Fix: every element aligns to a grid, baseline, edge or optical centre; nudge by ±1px where perception beats geometry. (Source: https://vercel.com/design/guidelines, https://anthonyhobday.com/sideprojects/saferules/)
|
|
40
|
+
- **[M27] Everything visible at once.** Every table, panel and control on screen regardless of the task. Fix: progressive disclosure: show each control when the person needs it. (Source: https://www.mania.design/blog/spot-the-slop-a-ui-designers-guide-to-fixing-ai-defaults/)
|
|
41
|
+
- **[M28] Two hard edges touching.** A section background change directly against a card edge or a divider line. Fix: never stack two hard divides; drop one. (Source: https://anthonyhobday.com/sideprojects/saferules/)
|
|
42
|
+
|
|
43
|
+
## Type, colour and contrast
|
|
44
|
+
|
|
45
|
+
- **[M29] Flat or mis-set hierarchy.** Headings differ from body only by size; large headings keep body leading (1.5) and default tracking. Fix: use size, weight and colour as separate levers; tighten leading and tracking as size grows, loosen for small text; de-emphasise secondary text rather than shouting the primary. (Source: https://anthonyhobday.com/sideprojects/saferules/, https://digitalsynopsis.com/design/useful-ui-ux-design-tips/, https://www.refactoringui.com/previews/labels-are-a-last-resort)
|
|
46
|
+
- **[M30] Line length out of range.** Body text lines over ~90 or under ~45 characters. Fix: aim for 60–75 characters (`max-width: 65ch` is a good default). (Source: https://practicaltypography.com/summary-of-key-rules.html, https://anthonyhobday.com/sideprojects/saferules/, https://emilkowal.ski/ui/agents-with-taste)
|
|
47
|
+
- **[M31] Orphans and ragged headings.** A single word alone on a heading's last line; very uneven multi-line headings. Fix: `text-wrap: balance` on headings, `text-wrap: pretty` on paragraphs. (Source: https://vercel.com/design/guidelines, https://webkit.org/blog/16547/better-typography-with-text-wrap-pretty/)
|
|
48
|
+
- **[M32] Typewriter punctuation.** Straight quotes, three periods instead of an ellipsis, double hyphens for dashes. Fix: curly quotes, the `…` character, proper dashes. (Source: https://vercel.com/design/guidelines, https://practicaltypography.com/summary-of-key-rules.html)
|
|
49
|
+
- **[M33] Low-contrast body text, especially on dark.** Mid-grey body copy on near-black that fails 4.5:1. Fix: check every text colour; raise body text contrast; muted text still needs to pass. **Disagreement:** Vercel prefers APCA over WCAG 2 ratios because WCAG 2 misjudges dark mode, but WCAG 2.2 AA is still the legal standard; check both. (Source: https://www.developersdigest.tech/blog/ai-design-slop-and-how-to-spot-it, https://vercel.com/design/guidelines, https://github.com/Myndex/apca-introduction)
|
|
50
|
+
- **[M34] Pure grey on colour, pure black on white.** Neutral grey text on a tinted background looks dirty; #000 on #fff and #fff on #000 look harsh. Fix: tint greys toward the background hue; use near-black and near-white; saturate neutrals with under 5% of the interface hue, all warm or all cool. (Source: https://digitalsynopsis.com/design/useful-ui-ux-design-tips/, https://anthonyhobday.com/sideprojects/saferules/, https://vercel.com/design/guidelines)
|
|
51
|
+
- **[M35] Non-concentric nested radii.** A rounded child inside a rounded parent where the child's radius equals or exceeds the parent's, so the gap between curves pinches at the corners. Fix: inner radius = outer radius − gap (padding + border), e.g. 24px outer with 8px padding gives 16px inner; skip the rule for 0 or fully round shapes. (Source: https://vercel.com/design/guidelines, https://jakub.kr/writing/details-that-make-interfaces-feel-better, https://anthonyhobday.com/sideprojects/saferules/)
|
|
52
|
+
- **[M36] Large radius and soft shadow on everything.** `rounded-2xl shadow-lg` on every surface, or a grey border plus a diffuse shadow on each card. Fix: reserve strong shadows for floating elements; let some surfaces be flat; one depth technique used consistently. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md, https://anthonyhobday.com/sideprojects/saferules/)
|
|
53
|
+
|
|
54
|
+
## States, feedback and forms
|
|
55
|
+
|
|
56
|
+
- **[M37] Only the happy path is designed.** No hover/focus/active/disabled styles, no empty, loading or error states. Fix: design every state; empty and error states each take under an hour. (Source: https://www.mania.design/blog/spot-the-slop-a-ui-designers-guide-to-fixing-ai-defaults/, https://vercel.com/design/guidelines)
|
|
57
|
+
- **[M38] Blank or lying empty states.** An empty container with no message, or "No records" shown while data is still loading. Fix: status message only after loading finishes, one line on what will appear here, and a direct action to fill it. (Source: https://www.nngroup.com/articles/empty-state-interface-design/)
|
|
58
|
+
- **[M39] Generic, distant or colour-only errors.** "An error occurred" in a toast at the top, red border with no text, input cleared after failure. Fix: message next to the field in plain words with the fix, icon plus text (not colour alone), input preserved, focus moved to the first error on submit. (Source: https://www.nngroup.com/articles/error-message-guidelines/, https://vercel.com/design/guidelines)
|
|
59
|
+
- **[M40] Focus removed or left to the browser.** `outline: none` with nothing in its place, or reliance on browser defaults, which measured as low as 1.4:1 against some backgrounds. Fix: see D05. (Source: https://www.sarasoueidan.com/blog/focus-indicators/)
|
|
60
|
+
- **[M41] Tiny hit targets.** Icon buttons with a 16px clickable area; checkbox and label that do not share a target. Fix: at least 24px (44px on touch), expanded with padding or a pseudo-element rather than a bigger icon. (Source: https://vercel.com/design/guidelines, https://emilkowal.ski/ui/agents-with-taste)
|
|
61
|
+
- **[M42] Hostile forms.** Submit disabled until valid, typing blocked at a character limit, paste blocked in password/OTP fields. Fix: let people submit to see validation, block submit (not typing) past a limit, never block paste. (Source: https://vercel.com/design/guidelines, https://x.com/detaildotdesign)
|
|
62
|
+
|
|
63
|
+
## Motion and loading
|
|
64
|
+
|
|
65
|
+
- **[M43] No motion at all on a marketing page.** Nothing moves: no press feedback, no product behaviour, no explanation of how a feature works. A static page cannot show cause and effect, and pages with nothing moving read as unfinished. Fix: put motion where it explains (a feature demonstrated in a short loop, a state change in the hero) and on primary controls; not everywhere. (Source: https://www.mania.design/blog/spot-the-slop-a-ui-designers-guide-to-fixing-ai-defaults/, https://emilkowal.ski/ui/you-dont-need-animations)
|
|
66
|
+
- **[M44] The same fade-up on every section.** Every block rises 20px and fades in on scroll with the same timing. Identical motion is a tell and signals no motion language. Fix: one or two deliberate moments; vary by intent; let most content simply be there. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md, https://www.mania.design/blog/spot-the-slop-a-ui-designers-guide-to-fixing-ai-defaults/)
|
|
67
|
+
- **[M45] Above-the-fold content hidden until JavaScript runs.** Hero heading starts at `opacity: 0` waiting for an IntersectionObserver. One team measured a 6–7s mobile LCP with a 72ms server response because of this. Fix: never animate the first viewport in from invisible; reveal only below the fold. (Source: https://dev.to/gillygangopolus/the-scroll-animation-that-was-hiding-our-lcp-element-2edp)
|
|
68
|
+
|
|
69
|
+
## Brand and finish
|
|
70
|
+
|
|
71
|
+
- **[M46] A logo cloud nobody can read.** Detect: customer logos at low opacity (black at 40% on white is about 2.8:1; 30% is about 2.1:1, by WCAG luminance arithmetic), wordmarks under ~16px tall, or colour and grey logos mixed in one row. The strip exists to be recognised in a glance; faint, tiny marks fail that job. Fix: see D28–D30 for when to use colour vs mono, area-normalised sizing and a 3:1 floor. (Source: https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html, https://genesysgrowth.com/blog/designing-customer-logo-walls, https://www.sanity.io/blog/the-logo-soup-problem)
|
|
72
|
+
- **[M47] Stock or generic imagery.** Team-around-a-laptop photos, glossy 3D blobs, faceless flat figures with long limbs. Fix: real product UI, real photos of the work, or illustration with a point of view. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md, https://www.ohhwells.com/blog/vibe-coded-website)
|
|
73
|
+
- **[M48] Missing finish-line details.** Default favicon, default `<title>`, no page-specific meta or OG image, missing alt text. Fix: favicon that survives dark tabs, accurate titles per page, a 1200×630 OG image (see D41–D42). (Source: https://www.ohhwells.com/blog/vibe-coded-website, https://vercel.com/design/guidelines)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Motion
|
|
2
|
+
|
|
3
|
+
How to use: for each animated element, ask the entries in order: should it move at all (A01–A04), how long and on what curve (A05–A12), how it enters and leaves (A13–A20), and what happens with reduced motion (A29–A32). In the DOM, check `transition`, `animation`, `@keyframes`, Motion/Framer props and `prefers-reduced-motion` blocks; on a page, record the first 2 seconds and scroll once.
|
|
4
|
+
Product UI and marketing pages differ: tools favour fast or absent motion for frequent actions; marketing pages may run longer when the motion explains something.
|
|
5
|
+
|
|
6
|
+
## Whether to animate
|
|
7
|
+
|
|
8
|
+
- **[A01] Motion needs a job.** Detect: animation that neither shows cause and effect, keeps place, gives feedback, nor adds a deliberate moment of delight. Fix: cut it. Motion should clarify a change or confirm an action. (Source: https://vercel.com/design/guidelines, https://emilkowal.ski/ui/you-dont-need-animations)
|
|
9
|
+
- **[A02] Frequency decides.** Detect: open/close animation on command menus, context menus, keyboard-driven highlights, hover effects on things used many times a day. A 300ms menu opened 200 times a day costs about six hours a year of waiting. Fix: no animation for high-frequency and keyboard-initiated actions (Raycast opens instantly; macOS context menus appear without animation and only fade out). Reserve motion for rare moments. (Source: https://rauno.me/craft/interaction-design, https://emilkowal.ski/ui/you-dont-need-animations, https://jakub.kr/writing/less-is-more)
|
|
10
|
+
- **[A03] Delight scales inversely with frequency.** Detect: big celebratory motion on a daily action, or none on a once-ever milestone. Fix: subtle touches on frequent features, bigger moments on rare ones (Family: confetti after a wallet backup; commas shifting as you type an amount). (Source: https://benji.org/family-values, https://rauno.me/craft/novelty)
|
|
11
|
+
- **[A04] A marketing page with zero motion.** Detect: a product page where nothing moves, including no demonstration of a feature. Static pages cannot show how something works; Emil cites Linear's animated explanation of a feature as motion that earns its place. Fix: animate the explanation (a feature working in a short loop, a state change in the product hero) and primary controls; keep the rest still. (Source: https://emilkowal.ski/ui/you-dont-need-animations, https://www.mania.design/blog/spot-the-slop-a-ui-designers-guide-to-fixing-ai-defaults/)
|
|
12
|
+
|
|
13
|
+
## Duration and easing
|
|
14
|
+
|
|
15
|
+
- **[A05] Durations by size.** Detect: UI transitions at 400–600ms. Fix: micro-interactions 100–150ms; tooltips, dropdowns 150–250ms; modals and drawers 200–300ms; stay under 300ms in product UI; up to ~400ms only for large movements across big screens; 500ms+ feels like a drag. Bigger elements and longer distances get longer durations. (Source: https://emilkowal.ski/ui/agents-with-taste, https://www.nngroup.com/articles/animation-duration/)
|
|
16
|
+
- **[A06] Exits faster than entrances.** Detect: identical enter and exit durations on dialogs and popovers. Fix: exits about 20% faster (e.g. 300ms in, 200–250ms out). (Source: https://emilkowal.ski/ui/agents-with-taste, https://www.nngroup.com/articles/animation-duration/)
|
|
17
|
+
- **[A07] Easing by situation.** Detect: `linear` on UI movement, `ease-in` on entrances. Fix: ease-out for entering/exiting; ease-in-out for things moving on screen; plain `ease` for hover colour; linear only for constant motion (spinners, marquees). **Disagreement:** NN/g suggests ease-in for exits; Emil uses ease-out for both, because ease-in starts slowly and feels laggy. Prefer ease-out in product UI. (Source: https://emilkowal.ski/ui/agents-with-taste, https://emilkowal.ski/ui/7-practical-animation-tips, https://www.nngroup.com/articles/animation-duration/)
|
|
18
|
+
- **[A08] Custom curves over keywords.** Detect: only `ease`/`ease-in-out` keywords. Built-ins are weak; strong custom ease-outs feel snappier. Example from Jakub's enter keyframes: `cubic-bezier(0.25, 0.46, 0.45, 0.94)`. Stripe likewise tuned custom curves for its Connect page. (Source: https://emilkowal.ski/ui/7-practical-animation-tips, https://jakub.kr/writing/details-that-make-interfaces-feel-better, https://stripe.com/blog/connect-front-end-experience)
|
|
19
|
+
- **[A09] Springs for movement, not for colour.** Detect: springs on opacity/colour; bouncy springs on dialogs. Fix: springs for position, scale, drag and gesture release; start critically damped (no overshoot) and add bounce only when the gesture carried momentum in that direction (Apple used 100% damping for tapping open Now Playing, ~80% for swiping it away). In Motion, default `bounce` is 0.25: set it to 0 for product UI. **Disagreement:** Emil replaced a spring with an ease-out on Linear's dialog because the spring felt abrupt; and bounce/elastic easing on marketing pages is flagged as an AI tell. (Source: https://developer.apple.com/videos/play/wwdc2018/803/, https://www.joshwcomeau.com/animation/a-friendly-introduction-to-spring-physics/, https://motion.dev/docs/react-transitions, https://x.com/emilkowalski/status/2102798004281635184, https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
20
|
+
- **[A10] Coupled elements share timing.** Detect: dialog and its overlay animating on different durations. Fix: match durations of elements that belong together. (Source: https://x.com/emilkowalski/status/2102798004281635184)
|
|
21
|
+
- **[A11] One motion language.** Detect: many unrelated hovers and bounces with different curves and durations. Fix: define a small easing and duration scale and use only it. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
22
|
+
- **[A12] Spinner speed.** Detect: a slow, lazy spinner. A faster spin makes the same wait feel shorter. (Source: https://emilkowal.ski/ui/you-dont-need-animations)
|
|
23
|
+
|
|
24
|
+
## Entering, leaving, moving
|
|
25
|
+
|
|
26
|
+
- **[A13] Never from scale(0).** Detect: popovers/modals scaling from 0. Fix: start from 0.9–0.97 with opacity 0, so the element keeps its shape. (Source: https://emilkowal.ski/ui/7-practical-animation-tips, https://emilkowal.ski/ui/agents-with-taste)
|
|
27
|
+
- **[A14] Origin-aware.** Detect: dropdowns growing from their centre. Fix: `transform-origin` at the trigger (Radix and Base UI expose a CSS variable for it); motion starts where it physically comes from. (Source: https://emilkowal.ski/ui/7-practical-animation-tips, https://vercel.com/design/guidelines)
|
|
28
|
+
- **[A15] Spatial consistency.** Detect: a panel that enters from the right and leaves downward; tabs that slide the same way regardless of direction. Fix: enter and exit along the same path; tab content slides toward the tapped tab; things open from their source (Dynamic Island apps slide out of the island). (Source: https://rauno.me/craft/interaction-design, https://developer.apple.com/videos/play/wwdc2018/803/, https://benji.org/family-values)
|
|
29
|
+
- **[A16] Blur bridges a crossfade.** Detect: two states visibly swapping as separate objects. Fix: ~2px `filter: blur()` during the transition; for icon swaps animate opacity, scale and blur together. (Source: https://emilkowal.ski/ui/7-practical-animation-tips, https://jakub.kr/writing/details-that-make-interfaces-feel-better)
|
|
30
|
+
- **[A17] Exits quieter than entrances.** Detect: elements leaving with as much travel as they arrived. Fix: let opacity and a small blur (~4px) do the exit with partial travel (e.g. `-70%` instead of the full width), so exits do not compete with what is entering. (Source: https://jakub.kr/writing/details-that-make-interfaces-feel-better)
|
|
31
|
+
- **[A18] Staggering.** Detect: a whole block appearing at once, or every word appearing one by one. Fix: stagger groups (title, description, buttons ~100ms apart; words ~80ms) from `translateY(8px)`, `blur(8px)`, opacity 0. **Disagreement:** Interfere tried word-by-word and found it robotic, animating testimonial words in groups of three instead; Rauno notes staggering siblings adds depth without slowing the UI. (Source: https://jakub.kr/writing/details-that-make-interfaces-feel-better, https://interfere.com/blog/how-we-built-interferes-new-website, https://rauno.me/craft/depth)
|
|
32
|
+
- **[A19] Interruptible by default.** Detect: keyframe animations on hover/toggle that must finish before reversing. Fix: CSS transitions (or springs) for interactions so they retarget mid-flight; keyframes only for one-shot staged sequences; user input can cancel animation. (Source: https://jakub.kr/writing/details-that-make-interfaces-feel-better, https://vercel.com/design/guidelines, https://developer.apple.com/videos/play/wwdc2018/803/)
|
|
33
|
+
- **[A20] Gestures.** Detect: swipes that only act on release; drags that stop dead at boundaries; flicks that snap to the nearest point. Fix: respond immediately and track 1:1; lightweight actions may commit mid-gesture, destructive ones only on release; rubber-band past edges; project momentum to pick the target. (Source: https://rauno.me/craft/interaction-design, https://developer.apple.com/videos/play/wwdc2018/803/)
|
|
34
|
+
|
|
35
|
+
## Page-level motion
|
|
36
|
+
|
|
37
|
+
- **[A21] Entrances never hide content.** Detect: above-the-fold elements at `opacity: 0` until JS runs; nothing visible on a no-JS or slow load. Fix: the first viewport renders fully without animation; animate from a visible state or reveal only below the fold. One team traced a 6–7s mobile LCP to this. (Source: https://dev.to/gillygangopolus/the-scroll-animation-that-was-hiding-our-lcp-element-2edp)
|
|
38
|
+
- **[A22] Not the same reveal everywhere.** Detect: identical fade-up on every section (AOS, `whileInView` with one preset). Fix: one or two high-impact moments, the rest still. **Disagreement:** Anthropic's frontend guidance recommends one orchestrated page load with staggered reveals; critics flag uniform section reveals as a tell. Both agree on one considered moment over scattered effects. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md, https://claude.com/blog/improving-frontend-design-through-skills)
|
|
39
|
+
- **[A23] Special moments play once.** Detect: hero intro replaying on every visit or every in-app navigation. Fix: play the intro on first visit only (Interfere's hero timeline); don't replay a staggered load on client navigation. (Source: https://interfere.com/blog/how-we-built-interferes-new-website, https://rauno.me/craft/novelty)
|
|
40
|
+
- **[A24] Novelty rhythm.** Detect: two attention-grabbing animations in consecutive sections. Fix: alternate high-novelty and low-novelty motion; cut animations that feel pompous or break rhythm (Vercel's Ship site). (Source: https://rauno.me/craft/vercel)
|
|
41
|
+
- **[A25] Scroll-linked motion done well.** Detect: scroll listeners on the main thread; parallax on everything. Fix: CSS scroll-driven animations (`animation-timeline: view()` with `animation-range: entry …`), which can run off the main thread; use for progress indicators, image reveals, sticky stacking. (Source: https://developer.chrome.com/docs/css-ui/scroll-driven-animations)
|
|
42
|
+
- **[A26] No scrolljacking.** Detect: scroll speed or direction altered; horizontal sections driven by vertical scroll. Fix: keep native scroll. If unavoidable: short, vertical, below the fold, no important text inside, sticky nav to escape, not on mobile. Parallax and scrolljacking can cause dizziness and nausea. (Source: https://www.nngroup.com/articles/scrolljacking-101/, https://www.nngroup.com/articles/animation-duration/)
|
|
43
|
+
- **[A27] Numbers don't count up.** Detect: stats ticking from 0 on scroll. Fix: show the real value; animate numbers only when the value genuinely changes. (Source: https://github.com/funboy322/avoid-ai-design/blob/main/references/ai-tells-catalog.md)
|
|
44
|
+
- **[A28] Hover delays.** Detect: hover previews that flash as the pointer crosses a list. Fix: slight delay before hover-triggered previews; instant response for confirmations. (Source: https://www.nngroup.com/articles/animation-duration/)
|
|
45
|
+
|
|
46
|
+
## Accessibility and performance
|
|
47
|
+
|
|
48
|
+
- **[A29] Reduced motion, done right.** Detect: no `prefers-reduced-motion` handling, or a global `* { transition-duration: 0.01ms !important }`. Fix: write motion inside `@media (prefers-reduced-motion: no-preference)`; keep fades, drop movement; in JS default to reduced until the query is read; don't zero durations globally (it can make JS animations faster and worse). (Source: https://www.joshwcomeau.com/react/prefers-reduced-motion/, https://vercel.com/design/guidelines)
|
|
49
|
+
- **[A30] Pause loops, keep interactions.** Detect: ambient loops that keep running under reduced motion, or that stop abruptly mid-frame. Fix: pause ambient loops with `animation-play-state` so they freeze gracefully; user-initiated interactions can stay. Any motion over 5s next to content needs pause/stop/hide controls. (Source: https://rauno.me/craft/vercel, https://vercel.com/design/guidelines)
|
|
50
|
+
- **[A31] Compositor-only properties.** Detect: transitions on `width`, `height`, `top`, `left`, `box-shadow`, or `transition: all`. Fix: animate `transform` and `opacity`; fake glows with a pseudo-element whose opacity changes; list exact properties. (Source: https://vercel.com/design/guidelines, https://rauno.me/craft/nextjs)
|
|
51
|
+
- **[A32] Text and SVG jitter.** Detect: text shimmering or shifting during scale animations; SVG transforms off-centre in Safari. Fix: animate a wrapper, not the text; `will-change: transform` or `translateZ(0)` if artifacts persist; transform SVG `<g>` wrappers with `transform-box: fill-box; transform-origin: center`. (Source: https://vercel.com/design/guidelines, https://emilkowal.ski/ui/agents-with-taste)
|
|
52
|
+
- **[A33] Video, not GIF.** Detect: GIF demos. Fix: `<video autoplay muted loop playsinline>` with a poster, a still alternative and a reduced-motion gate. (Source: https://vercel.com/design/guidelines)
|
|
53
|
+
- **[A34] Start on view, once.** Detect: animations that run off-screen or restart every time they scroll in. Fix: IntersectionObserver (Stripe used threshold 1, fire once) and stop work when not visible. (Source: https://stripe.com/blog/connect-front-end-experience)
|