@prestyj/cli 5.5.0 → 5.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/end-notification.mp3 +0 -0
- package/assets/skills/evidence-led-ui/LICENSES.md +68 -0
- package/assets/skills/evidence-led-ui/SKILL.md +139 -0
- package/{LICENSE → assets/skills/evidence-led-ui/corpus/awesome-design-md/LICENSE} +1 -1
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/airbnb/DESIGN.md +545 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/airtable/DESIGN.md +554 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/apple/DESIGN.md +562 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/binance/DESIGN.md +634 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/bmw/DESIGN.md +544 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/bmw-m/DESIGN.md +503 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/bugatti/DESIGN.md +454 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/cal/DESIGN.md +542 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/claude/DESIGN.md +589 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/clay/DESIGN.md +541 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/clickhouse/DESIGN.md +544 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/cohere/DESIGN.md +451 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/coinbase/DESIGN.md +570 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/composio/DESIGN.md +506 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/cursor/DESIGN.md +537 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/dell-1996/DESIGN.md +632 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/elevenlabs/DESIGN.md +504 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/expo/DESIGN.md +526 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/ferrari/DESIGN.md +531 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/figma/DESIGN.md +578 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/framer/DESIGN.md +544 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/hashicorp/DESIGN.md +575 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/hp/DESIGN.md +670 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/ibm/DESIGN.md +550 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/intercom/DESIGN.md +546 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/kraken/DESIGN.md +125 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/lamborghini/DESIGN.md +288 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/linear.app/DESIGN.md +548 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/lovable/DESIGN.md +298 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mastercard/DESIGN.md +365 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/meta/DESIGN.md +683 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/minimax/DESIGN.md +746 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mintlify/DESIGN.md +852 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/miro/DESIGN.md +825 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mistral.ai/DESIGN.md +773 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/mongodb/DESIGN.md +767 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/nike/DESIGN.md +575 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/nintendo-2001/DESIGN.md +649 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/notion/DESIGN.md +821 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/nvidia/DESIGN.md +640 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/ollama/DESIGN.md +539 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/opencode.ai/DESIGN.md +521 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/pinterest/DESIGN.md +597 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/playstation/DESIGN.md +661 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/posthog/DESIGN.md +690 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/raycast/DESIGN.md +669 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/renault/DESIGN.md +589 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/replicate/DESIGN.md +616 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/resend/DESIGN.md +585 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/revolut/DESIGN.md +636 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/runwayml/DESIGN.md +244 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/sanity/DESIGN.md +357 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/sentry/DESIGN.md +551 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/shopify/DESIGN.md +516 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/slack/DESIGN.md +482 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/spacex/DESIGN.md +363 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/spotify/DESIGN.md +246 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/starbucks/DESIGN.md +580 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/stripe/DESIGN.md +487 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/supabase/DESIGN.md +462 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/superhuman/DESIGN.md +448 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/tesla/DESIGN.md +286 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/theverge/DESIGN.md +339 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/together.ai/DESIGN.md +633 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/uber/DESIGN.md +636 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/vercel/DESIGN.md +736 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/vodafone/DESIGN.md +538 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/voltagent/DESIGN.md +521 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/warp/DESIGN.md +526 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/webflow/DESIGN.md +588 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/wired/DESIGN.md +497 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/wise/DESIGN.md +544 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/x.ai/DESIGN.md +465 -0
- package/assets/skills/evidence-led-ui/corpus/awesome-design-md/design-md/zapier/DESIGN.md +537 -0
- package/assets/skills/evidence-led-ui/data/corpus-manifest.json +768 -0
- package/assets/skills/evidence-led-ui/data/observations.json +47053 -0
- package/assets/skills/evidence-led-ui/references/anti-defaults.md +203 -0
- package/assets/skills/evidence-led-ui/references/archetypes.md +97 -0
- package/assets/skills/evidence-led-ui/references/craft-rulings.md +167 -0
- package/assets/skills/evidence-led-ui/references/methodology.md +72 -0
- package/assets/skills/evidence-led-ui/references/observed-patterns.md +68 -0
- package/assets/skills/evidence-led-ui/references/production-contract.md +120 -0
- package/assets/skills/evidence-led-ui/references/provenance.md +117 -0
- package/assets/skills/evidence-led-ui/references/quality-rubric.md +126 -0
- package/dist/app-sidecar.js +159 -43
- package/dist/app-sidecar.js.map +1 -1
- package/dist/chat-agents/general.test.js +3 -0
- package/dist/chat-agents/general.test.js.map +1 -1
- package/dist/chat-agents/jiwa.d.ts +53 -0
- package/dist/chat-agents/jiwa.d.ts.map +1 -0
- package/dist/chat-agents/jiwa.js +352 -0
- package/dist/chat-agents/jiwa.js.map +1 -0
- package/dist/chat-agents/jiwa.test.d.ts +2 -0
- package/dist/chat-agents/jiwa.test.d.ts.map +1 -0
- package/dist/chat-agents/jiwa.test.js +66 -0
- package/dist/chat-agents/jiwa.test.js.map +1 -0
- package/dist/chat-agents/shared.d.ts.map +1 -1
- package/dist/chat-agents/shared.js +5 -1
- package/dist/chat-agents/shared.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +15 -0
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session-review-coverage.test.d.ts +2 -0
- package/dist/core/agent-session-review-coverage.test.d.ts.map +1 -0
- package/dist/core/agent-session-review-coverage.test.js +57 -0
- package/dist/core/agent-session-review-coverage.test.js.map +1 -0
- package/dist/core/agent-session.d.ts +13 -7
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +143 -38
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/compactor.test.js +1 -1
- package/dist/core/compaction/compactor.test.js.map +1 -1
- package/dist/core/event-bus.d.ts +2 -0
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/goal-worker.test.js +3 -2
- package/dist/core/goal-worker.test.js.map +1 -1
- package/dist/core/ideal-review.d.ts +27 -0
- package/dist/core/ideal-review.d.ts.map +1 -1
- package/dist/core/ideal-review.js +64 -0
- package/dist/core/ideal-review.js.map +1 -1
- package/dist/core/ideal-review.test.js +34 -1
- package/dist/core/ideal-review.test.js.map +1 -1
- package/dist/core/loop-breaker.d.ts +23 -16
- package/dist/core/loop-breaker.d.ts.map +1 -1
- package/dist/core/loop-breaker.js +52 -11
- package/dist/core/loop-breaker.js.map +1 -1
- package/dist/core/loop-breaker.test.js +37 -16
- package/dist/core/loop-breaker.test.js.map +1 -1
- package/dist/core/lsp/client.d.ts +3 -0
- package/dist/core/lsp/client.d.ts.map +1 -1
- package/dist/core/lsp/client.js +20 -0
- package/dist/core/lsp/client.js.map +1 -1
- package/dist/core/lsp/manager.d.ts +32 -9
- package/dist/core/lsp/manager.d.ts.map +1 -1
- package/dist/core/lsp/manager.js +89 -37
- package/dist/core/lsp/manager.js.map +1 -1
- package/dist/core/lsp/manager.test.js +56 -4
- package/dist/core/lsp/manager.test.js.map +1 -1
- package/dist/core/nolan-prompt.d.ts +3 -3
- package/dist/core/nolan-prompt.d.ts.map +1 -1
- package/dist/core/nolan-prompt.js +10 -10
- package/dist/core/nolan-prompt.js.map +1 -1
- package/dist/core/nolan-prompt.test.js +17 -0
- package/dist/core/nolan-prompt.test.js.map +1 -1
- package/dist/core/run-lifecycle.d.ts +40 -0
- package/dist/core/run-lifecycle.d.ts.map +1 -0
- package/dist/core/run-lifecycle.js +95 -0
- package/dist/core/run-lifecycle.js.map +1 -0
- package/dist/core/run-lifecycle.test.d.ts +2 -0
- package/dist/core/run-lifecycle.test.d.ts.map +1 -0
- package/dist/core/run-lifecycle.test.js +64 -0
- package/dist/core/run-lifecycle.test.js.map +1 -0
- package/dist/core/session-manager.d.ts +25 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +66 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-manager.test.js +80 -2
- package/dist/core/session-manager.test.js.map +1 -1
- package/dist/core/skills-routing.test.d.ts +2 -0
- package/dist/core/skills-routing.test.d.ts.map +1 -0
- package/dist/core/skills-routing.test.js +70 -0
- package/dist/core/skills-routing.test.js.map +1 -0
- package/dist/core/skills.d.ts +2 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +32 -9
- package/dist/core/skills.js.map +1 -1
- package/dist/core/subagent-manager.d.ts +40 -3
- package/dist/core/subagent-manager.d.ts.map +1 -1
- package/dist/core/subagent-manager.js +342 -30
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/subagent-manager.test.js +189 -3
- package/dist/core/subagent-manager.test.js.map +1 -1
- package/dist/core/subagent-store.d.ts +20 -0
- package/dist/core/subagent-store.d.ts.map +1 -0
- package/dist/core/subagent-store.js +177 -0
- package/dist/core/subagent-store.js.map +1 -0
- package/dist/core/subagent-store.test.d.ts +2 -0
- package/dist/core/subagent-store.test.d.ts.map +1 -0
- package/dist/core/subagent-store.test.js +94 -0
- package/dist/core/subagent-store.test.js.map +1 -0
- package/dist/modes/agent-home-mode.d.ts.map +1 -1
- package/dist/modes/agent-home-mode.js +10 -3
- package/dist/modes/agent-home-mode.js.map +1 -1
- package/dist/modes/serve-mode.d.ts.map +1 -1
- package/dist/modes/serve-mode.js +10 -3
- package/dist/modes/serve-mode.js.map +1 -1
- package/dist/modes/subagent-worker-mode.d.ts +2 -0
- package/dist/modes/subagent-worker-mode.d.ts.map +1 -1
- package/dist/modes/subagent-worker-mode.js +13 -3
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/system-prompt.js +2 -2
- package/dist/system-prompt.js.map +1 -1
- package/dist/system-prompt.test.js +7 -5
- package/dist/system-prompt.test.js.map +1 -1
- package/dist/tools/goals.d.ts +3 -3
- package/dist/tools/skill.d.ts.map +1 -1
- package/dist/tools/skill.js +8 -3
- package/dist/tools/skill.js.map +1 -1
- package/dist/tools/tasks.d.ts +2 -2
- package/dist/tools/web-fetch.d.ts +1 -1
- package/dist/ui/App.d.ts +7 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +63 -17
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/Footer.d.ts +1 -0
- package/dist/ui/components/Footer.d.ts.map +1 -1
- package/dist/ui/components/Footer.js +3 -3
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/components/Footer.test.d.ts +2 -0
- package/dist/ui/components/Footer.test.d.ts.map +1 -0
- package/dist/ui/components/Footer.test.js +16 -0
- package/dist/ui/components/Footer.test.js.map +1 -0
- package/dist/ui/components/SkillsOverlay.d.ts.map +1 -1
- package/dist/ui/components/SkillsOverlay.js +8 -3
- package/dist/ui/components/SkillsOverlay.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts +8 -3
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +70 -25
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.test.js +27 -0
- package/dist/ui/hooks/useAgentLoop.test.js.map +1 -1
- package/dist/ui/hooks/useSessionPersistence.d.ts +4 -2
- package/dist/ui/hooks/useSessionPersistence.d.ts.map +1 -1
- package/dist/ui/hooks/useSessionPersistence.js +7 -1
- package/dist/ui/hooks/useSessionPersistence.js.map +1 -1
- package/dist/ui/render.d.ts +7 -0
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +4 -0
- package/dist/ui/render.js.map +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# Anti-Defaults
|
|
2
|
+
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- Purpose and review method
|
|
6
|
+
- Template composition: centered gradient hero, glass cards, equal card grids, eyebrows, metric blocks, pills, dark-premium assumptions, huge type, fake terminals, floating screenshots, and bento layouts
|
|
7
|
+
- Decoration and truth: ambient motion, icon medallions, false authenticity, emoji, and mixed icon language
|
|
8
|
+
- Craft regressions: generic hover lift, abrupt states, accidental misalignment, reimplemented local styling, generic type, and generated em dashes
|
|
9
|
+
- Final anti-default review
|
|
10
|
+
|
|
11
|
+
## Purpose
|
|
12
|
+
|
|
13
|
+
An anti-default is not a ban. It is a prompt to prove that a visual choice belongs to this product, audience, content, and archetype. A choice passes when changing it would weaken the screen’s job or subject-specific identity.
|
|
14
|
+
|
|
15
|
+
For every flagged pattern, write one sentence: **“This belongs because…”** If the sentence only says “modern,” “premium,” “clean,” “engaging,” or “on brand,” replace the choice.
|
|
16
|
+
|
|
17
|
+
## Centered gradient hero
|
|
18
|
+
|
|
19
|
+
**AI tell:** Centered oversized headline, violet/blue glow, two CTAs, product screenshot floating below.
|
|
20
|
+
|
|
21
|
+
**Default action:** Build hierarchy from the actual claim, proof, and product behavior; choose composition after content.
|
|
22
|
+
|
|
23
|
+
**Legitimate when:** The brand owns the gradient or light behavior, the page has one conversion job, and the centered pause supports the narrative. `stripe` and `framer` are relevant evidence; neither makes the pattern universal.
|
|
24
|
+
|
|
25
|
+
## Generic glass cards
|
|
26
|
+
|
|
27
|
+
**AI tell:** Translucent rounded rectangles with blur and hairlines layered over decorative color fields.
|
|
28
|
+
|
|
29
|
+
**Default action:** Use a clear material model—flat canvas, tonal surface, border, or measured elevation—with one reason for each layer.
|
|
30
|
+
|
|
31
|
+
**Legitimate when:** Content conceptually sits over live media/map/video, temporary overlays need context, or translucency is an established local platform material.
|
|
32
|
+
|
|
33
|
+
## Equal three-card feature grid
|
|
34
|
+
|
|
35
|
+
**AI tell:** Three interchangeable icon-title-copy cards used because the viewport divides neatly.
|
|
36
|
+
|
|
37
|
+
**Default action:** Rank the content, then let importance and relationship determine module size and sequence.
|
|
38
|
+
|
|
39
|
+
**Legitimate when:** Exactly three peer choices exist, comparison is the user’s task, and equal weight is truthful.
|
|
40
|
+
|
|
41
|
+
## Decorative eyebrow label
|
|
42
|
+
|
|
43
|
+
**AI tell:** Uppercase mono text above every heading, often paired with a dot or rule, regardless of content.
|
|
44
|
+
|
|
45
|
+
**Default action:** Remove it unless it names useful hierarchy, sequence, category, status, or technical context.
|
|
46
|
+
|
|
47
|
+
**Legitimate when:** Editorial taxonomy, step labels, system state, or a real dual-register type system makes the eyebrow informative.
|
|
48
|
+
|
|
49
|
+
## Random metric blocks
|
|
50
|
+
|
|
51
|
+
**AI tell:** Large percentages and counts inserted to make a page look credible or data-rich.
|
|
52
|
+
|
|
53
|
+
**Default action:** Show only metrics with a source, unit, time frame, comparison, and decision consequence.
|
|
54
|
+
|
|
55
|
+
**Legitimate when:** The metric is auditable and answers a question central to the screen, such as current capacity, conversion, latency, or balance.
|
|
56
|
+
|
|
57
|
+
## Ubiquitous pills
|
|
58
|
+
|
|
59
|
+
**AI tell:** Navigation, buttons, filters, badges, cards, and inputs all become capsules.
|
|
60
|
+
|
|
61
|
+
**Default action:** Reserve full pills for roles that benefit from compact enclosure or toggle/tag semantics; use a smaller local radius vocabulary elsewhere.
|
|
62
|
+
|
|
63
|
+
**Legitimate when:** The project already uses an orbital/capsule motif, a control’s variable label length needs it, or tactile consumer friendliness is a deliberate material rule.
|
|
64
|
+
|
|
65
|
+
## Dark equals premium
|
|
66
|
+
|
|
67
|
+
**AI tell:** Near-black canvas, purple glow, thin gray borders, and muted text chosen without product evidence.
|
|
68
|
+
|
|
69
|
+
**Default action:** Choose theme from environment, content, task duration, contrast needs, imagery, and existing brand.
|
|
70
|
+
|
|
71
|
+
**Legitimate when:** Media needs darkness, the tool is used in low-light environments, the brand is dark-first, or the existing product already supports a tested dark theme.
|
|
72
|
+
|
|
73
|
+
## Huge type equals distinction
|
|
74
|
+
|
|
75
|
+
**AI tell:** 96–160px headline doing all the visual work while content hierarchy remains shallow.
|
|
76
|
+
|
|
77
|
+
**Default action:** Establish contrast through wording, measure, weight, width, placement, and surrounding scale before increasing size.
|
|
78
|
+
|
|
79
|
+
**Legitimate when:** The surface is campaign/editorial, the phrase is short, localization is tested, and the type itself is the subject or signature.
|
|
80
|
+
|
|
81
|
+
## Fake terminal or code theater
|
|
82
|
+
|
|
83
|
+
**AI tell:** Decorative prompts, logs, monospace labels, and syntax colors on any developer-facing page.
|
|
84
|
+
|
|
85
|
+
**Default action:** Use real commands, code, output, errors, and copy behavior—or use ordinary product evidence.
|
|
86
|
+
|
|
87
|
+
**Legitimate when:** The user’s task genuinely involves code/CLI output and the example is accurate, selectable, versioned, and useful.
|
|
88
|
+
|
|
89
|
+
## Floating product screenshot
|
|
90
|
+
|
|
91
|
+
**AI tell:** Perspective-tilted dashboard image with glow, no readable details, and no relationship to the claim.
|
|
92
|
+
|
|
93
|
+
**Default action:** Show a focused, legible product state tied to the adjacent proof, or demonstrate the interaction directly.
|
|
94
|
+
|
|
95
|
+
**Legitimate when:** Spatial overview matters, the screenshot is current and honest, and perspective does not hide evidence users need to judge.
|
|
96
|
+
|
|
97
|
+
## Bento by default
|
|
98
|
+
|
|
99
|
+
**AI tell:** Every feature becomes a differently sized rounded tile, producing visual variety without semantic structure.
|
|
100
|
+
|
|
101
|
+
**Default action:** Map module size to priority, content type, and reading order; simplify any tile that exists only to fill a gap.
|
|
102
|
+
|
|
103
|
+
**Legitimate when:** The screen is genuinely an overview of heterogeneous modules and tile persistence supports scanning or rearrangement.
|
|
104
|
+
|
|
105
|
+
## Ambient perpetual motion
|
|
106
|
+
|
|
107
|
+
**AI tell:** Marquees, floating particles, pulsing glows, or auto-rotating cards that continue without user intent.
|
|
108
|
+
|
|
109
|
+
**Default action:** Keep the resting screen still; animate state change, spatial continuity, feedback, or a finite narrative beat.
|
|
110
|
+
|
|
111
|
+
**Legitimate when:** Motion is the content (audio, time, live system activity), remains comprehensible when paused, and has a reduced-motion alternative.
|
|
112
|
+
|
|
113
|
+
## Generic icon medallions
|
|
114
|
+
|
|
115
|
+
**AI tell:** Every section starts with a line icon inside the same tinted rounded square.
|
|
116
|
+
|
|
117
|
+
**Default action:** Remove icons that repeat the heading; use diagrams, imagery, or symbols only where recognition becomes faster.
|
|
118
|
+
|
|
119
|
+
**Legitimate when:** Icons support repeated navigation, status scanning, compact controls, or a real category system.
|
|
120
|
+
|
|
121
|
+
## False authenticity
|
|
122
|
+
|
|
123
|
+
**AI tell:** Invented testimonials, logos, avatars, customer counts, ratings, or precise business data.
|
|
124
|
+
|
|
125
|
+
**Default action:** Use real project content; if unavailable, label honest illustrative content plainly and avoid claims.
|
|
126
|
+
|
|
127
|
+
**Legitimate when:** The user explicitly supplies approved fixtures or asks for a clearly marked prototype dataset.
|
|
128
|
+
|
|
129
|
+
## Emoji used as interface imagery
|
|
130
|
+
|
|
131
|
+
**AI tell:** Emoji stand in for icons, status marks, bullets, empty-state art, or section decoration, producing platform-dependent color and inconsistent geometry.
|
|
132
|
+
|
|
133
|
+
**Default action:** Reuse the project's icon system or one coherent icon package, with accessible labels and consistent optical sizing.
|
|
134
|
+
|
|
135
|
+
**Legitimate when:** The user explicitly requests emoji, emoji is the actual content being entered or discussed, or exact supplied source copy must retain it.
|
|
136
|
+
|
|
137
|
+
## Mixed or improvised icon language
|
|
138
|
+
|
|
139
|
+
**AI tell:** Package icons, hand-drawn SVGs, text glyphs, and platform symbols appear together with mismatched stroke, fill, weight, and bounding boxes.
|
|
140
|
+
|
|
141
|
+
**Default action:** Select one installed family and one wrapper component. Normalize size, stroke/fill, color, target, label, and state treatment.
|
|
142
|
+
|
|
143
|
+
**Legitimate when:** A required third-party brand mark or native platform symbol carries meaning that the product icon family cannot replace.
|
|
144
|
+
|
|
145
|
+
## Generic hover lift
|
|
146
|
+
|
|
147
|
+
**AI tell:** Cards and buttons jump upward, scale, bob, or float on every hover regardless of material or task.
|
|
148
|
+
|
|
149
|
+
**Default action:** Use a short background, border, underline, icon-fill, opacity, or restrained shadow transition. Keep geometry stable.
|
|
150
|
+
|
|
151
|
+
**Legitimate when:** Spatial movement communicates actual drag, depth, stacking, or physical direct manipulation, and reduced motion removes non-essential travel.
|
|
152
|
+
|
|
153
|
+
## Abrupt interactive states
|
|
154
|
+
|
|
155
|
+
**AI tell:** Hover, press, expand, selection, loading, success, and error snap with no continuity or acknowledgement.
|
|
156
|
+
|
|
157
|
+
**Default action:** Give every relevant state clear feedback and transition interpolable properties with shared duration/easing tokens. Keep focus visible immediately.
|
|
158
|
+
|
|
159
|
+
**Legitimate when:** Reduced-motion preference, urgent safety feedback, or an inherently discrete state requires an immediate change; meaning must still remain clear.
|
|
160
|
+
|
|
161
|
+
## Accidental misalignment
|
|
162
|
+
|
|
163
|
+
**AI tell:** Almost-shared edges, drifting section widths, mismatched card padding, uneven control heights, and dividers that miss neighboring boundaries.
|
|
164
|
+
|
|
165
|
+
**Default action:** Establish key lines, grid, spacing tokens, component anatomy, and responsive alignment before adding decoration.
|
|
166
|
+
|
|
167
|
+
**Legitimate when:** A deliberate editorial or media break communicates hierarchy and remains visibly intentional across viewports.
|
|
168
|
+
|
|
169
|
+
## Reimplemented local styling
|
|
170
|
+
|
|
171
|
+
**AI tell:** A new button, modal, card, status color, icon wrapper, or focus ring duplicates an existing project primitive with slightly different values.
|
|
172
|
+
|
|
173
|
+
**Default action:** Reuse the existing component or extend its documented variant API. Add a new primitive only for a genuinely different semantic role.
|
|
174
|
+
|
|
175
|
+
**Legitimate when:** The project has no suitable primitive or reuse would corrupt semantics; document the new role and make it reusable.
|
|
176
|
+
|
|
177
|
+
## Generic type by neglect
|
|
178
|
+
|
|
179
|
+
**AI tell:** Net-new aesthetic work ships with Arial, Helvetica, or bare `system-ui` because typography was never designed.
|
|
180
|
+
|
|
181
|
+
**Default action:** Reuse the product type system or choose an intentional, efficiently loaded family/pairing from `craft-rulings.md`. Assign clear display, body, utility, and technical roles.
|
|
182
|
+
|
|
183
|
+
**Legitimate when:** The existing system requires it, native platform fidelity is the goal, network/self-hosted fonts are prohibited, or performance evidence favors the established stack.
|
|
184
|
+
|
|
185
|
+
## Generated em dash voice
|
|
186
|
+
|
|
187
|
+
**AI tell:** UI headings, descriptions, empty states, and helper text repeatedly use em dashes as an LLM writing habit.
|
|
188
|
+
|
|
189
|
+
**Default action:** Rewrite with a period, comma, colon, parentheses, or two sentences.
|
|
190
|
+
|
|
191
|
+
**Legitimate when:** The user explicitly wants em dashes or exact supplied, quoted, brand, or legal copy must remain unchanged.
|
|
192
|
+
|
|
193
|
+
## Anti-default review
|
|
194
|
+
|
|
195
|
+
Before implementation, flag every pattern above that appears in the thesis. Keep a flagged choice only with its one-sentence product-specific justification.
|
|
196
|
+
|
|
197
|
+
After the first screenshot:
|
|
198
|
+
|
|
199
|
+
1. Cover the logo and product name. Identify what still makes the screen specific.
|
|
200
|
+
2. Remove one decorative idea and compare hierarchy.
|
|
201
|
+
3. Replace one block of generic copy with real content.
|
|
202
|
+
4. Check whether the signature survives mobile without becoming clutter.
|
|
203
|
+
5. If another unrelated product could use the same screenshot unchanged, revise the weakest area.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Archetype Guidance
|
|
2
|
+
|
|
3
|
+
## How to choose
|
|
4
|
+
|
|
5
|
+
Choose the archetype by the screen’s job, not the company category. A developer company’s billing console is application UI; its API reference is documentation; its launch page is marketing/brand. Hybrid screens may borrow one secondary archetype, but one must lead.
|
|
6
|
+
|
|
7
|
+
All coverage and counts come from `data/observations.json`, commit `664b3e78fd1a298ba11973822da988483256d4b4`, extraction version 1. Each section names two aligned references and one contrast. References are observational analyses, not templates to copy.
|
|
8
|
+
|
|
9
|
+
Every archetype also follows `craft-rulings.md`: no emoji UI, one coherent icon family, uniform key lines, reuse of local primitives, purposeful non-abrupt feedback without generic hover lift, intentional typography, measured contrast, consistent flow, and no generated em dashes in UI copy. Every implemented surface must also pass the applicable `production-contract.md` checks; archetype evidence never overrides semantics, accessibility, resilience, performance, platform, or trust requirements.
|
|
10
|
+
|
|
11
|
+
## Marketing and brand
|
|
12
|
+
|
|
13
|
+
**Coverage:** **29/74 documents**. Dark **17/29**, mixed **7/29**, light **5/29**; motion mentioned in **19/29**. This is the largest and most technology-heavy group, so avoid exporting its conventions to product screens.
|
|
14
|
+
|
|
15
|
+
**Design read:** Establish one claim, one audience, and one conversion. Let content cadence determine whether the composition is cinematic, editorial, demonstrative, or direct.
|
|
16
|
+
|
|
17
|
+
**Direction:** Use a strong typographic or media hierarchy, variable section rhythm, and one subject-specific signature. Motion may stage narrative transitions, but it must not delay comprehension or interaction. Keep conversion hierarchy unmistakable.
|
|
18
|
+
|
|
19
|
+
**Aligned evidence:** `apple`, `sanity`. **Useful contrast:** `figma`.
|
|
20
|
+
|
|
21
|
+
**Reject:** A centered gradient headline, generic dashboard mockup, three equal feature cards, and floating glass shapes that could advertise any SaaS.
|
|
22
|
+
|
|
23
|
+
## Application UI
|
|
24
|
+
|
|
25
|
+
**Coverage:** **7/74 documents**. Focus mentioned in **7/7**, disabled state in **6/7**, motion in **5/7**, keyboard language in only **1/7**. The sample is small and still based on public-site analyses.
|
|
26
|
+
|
|
27
|
+
**Design read:** Name the repeated task, frequency, consequence of error, user expertise, and information that must remain visible while acting.
|
|
28
|
+
|
|
29
|
+
**Direction:** Optimize stable navigation, predictable control placement, concise hierarchy, and fast state recognition. Use density appropriate to task frequency. Keep decorative layers behind the work surface. Add keyboard and loading/empty behavior even though the corpus documents it poorly.
|
|
30
|
+
|
|
31
|
+
**Aligned evidence:** `linear.app`, `superhuman`. **Useful contrast:** `intercom`.
|
|
32
|
+
|
|
33
|
+
**Reject:** Marketing-scale headings, scroll-led reveals, and oversized cards that turn repeated work into a tour.
|
|
34
|
+
|
|
35
|
+
## Dashboards and data-dense tools
|
|
36
|
+
|
|
37
|
+
**Coverage:** **5/74 documents**. Dense language in **4/5**, focus in **5/5**, keyboard in **3/5**, error in **5/5**. Theme is dark **3/5**, light **1/5**, mixed **1/5**; the denominator is too small to prescribe a theme.
|
|
38
|
+
|
|
39
|
+
**Design read:** Identify the decision the dashboard supports, update frequency, comparison axis, alert severity, and the smallest unit users scan repeatedly.
|
|
40
|
+
|
|
41
|
+
**Direction:** Build a scan path before styling cards. Prefer alignment, separators, restrained surface steps, and semantic status encoding. Preserve row/column context, expose units, support keyboard navigation, and make filters visibly affect results. Charts should answer named questions rather than fill grid slots.
|
|
42
|
+
|
|
43
|
+
**Aligned evidence:** `airtable`, `sentry`. **Useful contrast:** `miro`.
|
|
44
|
+
|
|
45
|
+
**Reject:** Random metric tiles, equal visual weight for all data, unlabeled sparklines, and decorative gradients that compete with status colors.
|
|
46
|
+
|
|
47
|
+
## Commerce and marketplaces
|
|
48
|
+
|
|
49
|
+
**Coverage:** **12/74 documents**. Theme is light **5/12**, dark **4/12**, mixed **3/12**; subtle-shadow policy appears in **8/12**; loading in **3/12** and empty state in **1/12**. Coverage spans retail, fintech, travel, and payments, so transaction risk varies widely.
|
|
50
|
+
|
|
51
|
+
**Design read:** Resolve discovery versus purchase, inventory variability, trust burden, comparison behavior, and the role of imagery.
|
|
52
|
+
|
|
53
|
+
**Direction:** Make product evidence, price, availability, trust, and primary transaction action legible in that order. Let imagery dictate card geometry when imagery is decision-critical. Use material softness only when it supports tactility or approachability. Design unavailable, loading, saved, and failure states explicitly.
|
|
54
|
+
|
|
55
|
+
**Aligned evidence:** `airbnb`, `nike`. **Useful contrast:** `binance`.
|
|
56
|
+
|
|
57
|
+
**Reject:** Generic product cards with fake ratings, identical crops, hidden fees, or a brand accent applied equally to navigation, price, badges, and purchase action.
|
|
58
|
+
|
|
59
|
+
## Editorial and content
|
|
60
|
+
|
|
61
|
+
**Coverage:** **5/74 documents**. Asymmetry appears in **3/5**, full-bleed composition in **4/5**, motion in **1/5**, sharp-corner language in **3/5**. This is a small sample dominated by technology and media.
|
|
62
|
+
|
|
63
|
+
**Design read:** Name the reading mode, expected session length, content hierarchy, recirculation goal, and whether imagery or text carries authority.
|
|
64
|
+
|
|
65
|
+
**Direction:** Design reading rhythm through measure, leading, headline contrast, captions, metadata, and deliberate interruption. Use asymmetry when it clarifies editorial priority. Keep controls quiet and persistent enough to support progress, saving, or navigation.
|
|
66
|
+
|
|
67
|
+
**Aligned evidence:** `wired`, `theverge`. **Useful contrast:** `spotify`.
|
|
68
|
+
|
|
69
|
+
**Reject:** SaaS feature cards, pill labels on every taxonomy term, animated ornaments beside long-form copy, and uniform modules that erase editorial priority.
|
|
70
|
+
|
|
71
|
+
## Documentation and developer tools
|
|
72
|
+
|
|
73
|
+
**Coverage:** **16/74 documents**. Dark **11/16**, mixed **4/16**, light **1/16**; sidebar language **8/16**; focus **13/16**; keyboard language **0/16**. The category is well represented but heavily biased toward developer marketing surfaces.
|
|
74
|
+
|
|
75
|
+
**Design read:** Determine whether the user is learning, looking up, debugging, or copying; identify versioning, code-language, and navigation depth.
|
|
76
|
+
|
|
77
|
+
**Direction:** Prioritize information scent, stable navigation, readable prose measure, copyable code, visible current context, and search. A technical accent or monospace register can support meaning, but code should not become decoration. Add keyboard access and command discoverability despite the corpus gap.
|
|
78
|
+
|
|
79
|
+
**Aligned evidence:** `mintlify`, `vercel`. **Useful contrast:** `hashicorp`.
|
|
80
|
+
|
|
81
|
+
**Reject:** Terminal theater, fake logs, neon syntax everywhere, hidden navigation, and dark mode chosen solely to look “developer.”
|
|
82
|
+
|
|
83
|
+
## Mobile and native surfaces
|
|
84
|
+
|
|
85
|
+
**Coverage:** **0/74 documents**. The corpus cannot support a quantitative mobile/native house style.
|
|
86
|
+
|
|
87
|
+
**Design read:** Resolve platform, input mode, reach zones, navigation convention, offline behavior, permissions, interruption, and whether the surface is phone, tablet, watch, or desktop native.
|
|
88
|
+
|
|
89
|
+
**Direction:** Preserve the project’s platform conventions and native controls. Use official platform guidance and rendered/device testing as primary evidence. Borrow only content hierarchy and brand semantics from the closest corpus archetype. Plan touch, keyboard, pointer, dynamic type, safe areas, orientation, and reduced motion as applicable.
|
|
90
|
+
|
|
91
|
+
**Aligned evidence:** none in this corpus. **Closest structural references:** `airbnb`, `superhuman`. **Useful contrast:** `apple` marketing analysis, which must not be mistaken for native UI guidance.
|
|
92
|
+
|
|
93
|
+
**Reject:** Shrinking a desktop web composition into a phone viewport or inventing gestures without discoverable alternatives.
|
|
94
|
+
|
|
95
|
+
## Cross-archetype rule
|
|
96
|
+
|
|
97
|
+
Select **two aligned references and one contrast**, then write why each is relevant to this exact screen. If the same palette, radius, font stack, composition, or motion policy survives unchanged across unrelated briefs, the thesis is under-specified.
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# Interface Craft Rulings
|
|
2
|
+
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
1. Icons, never emoji
|
|
6
|
+
2. Uniform geometry and alignment
|
|
7
|
+
3. Reuse before invention
|
|
8
|
+
4. Motion without generic hover lift
|
|
9
|
+
5. Typography and Google Fonts loading
|
|
10
|
+
6. Contrast as a release requirement
|
|
11
|
+
7. Consistency and flow
|
|
12
|
+
8. UI copy punctuation
|
|
13
|
+
9. Final craft check
|
|
14
|
+
|
|
15
|
+
These are binding defaults for UI implementation and review. They reflect Nolan's product taste, current accessibility guidance, current web-font delivery guidance, established design-system motion/grid practices, and the pinned observational corpus. Override one only when the user explicitly requests the exception or the existing product has a stronger documented rule.
|
|
16
|
+
|
|
17
|
+
## 1. Icons, never emoji
|
|
18
|
+
|
|
19
|
+
Do not use emoji as interface icons, bullets, status marks, empty-state decoration, or visual shorthand unless the user explicitly requests emoji.
|
|
20
|
+
|
|
21
|
+
1. Inspect the project for an existing icon system and reuse it.
|
|
22
|
+
2. If none exists and adding a dependency is allowed, choose one coherent stack-specific package. Default to Lucide for a restrained line system. Use Material Symbols when variable fill/weight/optical sizing fits an existing Google/Material language. Use Phosphor when the product needs a broader weight range and a softer illustrative voice.
|
|
23
|
+
3. Do not mix icon families within one product surface.
|
|
24
|
+
4. Do not hand-draw substitute SVGs when the selected package already has the icon.
|
|
25
|
+
5. Match icon stroke/fill weight, optical size, control size, and color role across repeated components.
|
|
26
|
+
6. Prefer visible text beside unfamiliar actions. Decorative icons are hidden from assistive technology. Icon-only buttons receive an accessible name on the button, a visible tooltip where useful, and at least a 44 by 44 CSS-pixel target.
|
|
27
|
+
|
|
28
|
+
Lucide's current accessibility guidance recommends visible labels in most cases, consistent icon treatment, keyboard access, adequate contrast, and a 44 by 44 target wrapper. Material Symbols provides variable fill, weight, grade, and optical-size axes; use those axes systematically rather than mixing arbitrary styles.
|
|
29
|
+
|
|
30
|
+
## 2. Uniform geometry and alignment
|
|
31
|
+
|
|
32
|
+
Uniformity means shared geometry, not equal visual importance.
|
|
33
|
+
|
|
34
|
+
- Establish container edges, columns, gutters, spacing tokens, control heights, border positions, and text baselines before styling individual sections.
|
|
35
|
+
- Repeated sections align to the same key lines. Cards in the same family share padding, header placement, border treatment, and action placement.
|
|
36
|
+
- Vertical dividers meet related horizontal boundaries cleanly. Avoid one-pixel drift, almost-aligned edges, arbitrary indents, and section widths that change without a content reason.
|
|
37
|
+
- Use one spacing rhythm. Prefer existing project tokens; otherwise derive a compact 4 or 8 pixel scale appropriate to density.
|
|
38
|
+
- Preserve alignment through responsive recomposition. Mobile may change order or layout, but repeated controls and content edges remain internally consistent.
|
|
39
|
+
- Break the grid only to express real hierarchy, media behavior, or editorial emphasis. A deliberate exception should be visible as an exception, not look accidental.
|
|
40
|
+
|
|
41
|
+
Carbon's grid guidance uses consistent mini-unit multiples, key lines, fixed padding within breakpoints, and type aligned to box padding. Apply the principle through the project's own grid rather than copying Carbon's exact values.
|
|
42
|
+
|
|
43
|
+
## 3. Reuse before invention
|
|
44
|
+
|
|
45
|
+
Before creating any token, component, style, or interaction:
|
|
46
|
+
|
|
47
|
+
1. Search the project for the same semantic role.
|
|
48
|
+
2. Reuse the existing component and variant when it meets the need.
|
|
49
|
+
3. Extend the nearest primitive when the need is genuinely new.
|
|
50
|
+
4. Create a new primitive only when reuse or extension would distort semantics.
|
|
51
|
+
|
|
52
|
+
Do not duplicate button systems, card shells, form controls, modal behavior, status colors, spacing scales, icon wrappers, focus rings, or motion curves. Reuse class utilities and design tokens where they already exist. Same function means same label, icon, accessible name, state treatment, and placement across pages.
|
|
53
|
+
|
|
54
|
+
## 4. Motion without generic hover lift
|
|
55
|
+
|
|
56
|
+
Every interactive component must provide clear feedback for relevant hover, focus, press, selected, expanded, loading, success, and error states. Feedback should not feel abrupt when an interpolated transition improves comprehension.
|
|
57
|
+
|
|
58
|
+
Default motion behavior:
|
|
59
|
+
|
|
60
|
+
- Do not use generic `translateY` hover lift, bobbing, floating, card jumping, or indiscriminate scale-up.
|
|
61
|
+
- Prefer background, foreground, border, underline, icon fill/weight, opacity, and restrained shadow transitions.
|
|
62
|
+
- Press feedback should feel connected to activation. Prefer color, inset, fill, or a brief controlled compression only when it matches the material model.
|
|
63
|
+
- Animate state and continuity, not decoration. Do not add ambient or perpetual motion to make a static layout feel designed.
|
|
64
|
+
- Never use `transition: all`. Name the properties that are allowed to interpolate.
|
|
65
|
+
- Avoid animating layout properties such as `width`, `height`, `top`, and `left` unless spatial change is the meaning and performance is verified.
|
|
66
|
+
- Keep focus indication immediate and visible. A transition must never delay awareness of keyboard focus.
|
|
67
|
+
|
|
68
|
+
Reuse existing motion tokens first. If none exist, begin with these restrained bands, then tune by component size and distance:
|
|
69
|
+
|
|
70
|
+
| Role | Typical duration | Use |
|
|
71
|
+
|---|---:|---|
|
|
72
|
+
| Immediate micro-feedback | 70 to 110 ms | button, toggle, icon fill, press |
|
|
73
|
+
| Standard state change | 140 to 200 ms | color, border, background, small disclosure |
|
|
74
|
+
| Entrance or panel continuity | 180 to 240 ms | menu, popover, drawer, inserted feedback |
|
|
75
|
+
| Exit | 120 to 180 ms | dismissal and removal |
|
|
76
|
+
|
|
77
|
+
For a neutral productive curve, Carbon documents `cubic-bezier(0.2, 0, 0.38, 0.9)` for standard productive motion, with separate entrance and exit curves. Use local easing when available.
|
|
78
|
+
|
|
79
|
+
The pinned observational corpus supports restrained hover treatment: Tesla and Lamborghini explicitly prefer color-only interactions over scale/translate; Vercel uses underline or surface changes; Linear uses a controlled color/surface state; Sanity uses a consistent interactive color. These are observations of selected surfaces, not universal brand rules. Refero content was not accessed because no authorized Refero MCP or user-provided export was available.
|
|
80
|
+
|
|
81
|
+
Reduced motion is mandatory. Under `prefers-reduced-motion: reduce`, remove non-essential travel, parallax, scale, and spatial choreography. Preserve state feedback through immediate color, border, text, icon, or opacity changes. WCAG 2.2 SC 2.3.3 treats disabling non-essential interaction animation as the accessible direction.
|
|
82
|
+
|
|
83
|
+
## 5. Typography that carries intent
|
|
84
|
+
|
|
85
|
+
Reuse the project's established type system first. For net-new web work without an established type system, choose an intentional family or pairing that matches the subject, language coverage, density, and reading mode.
|
|
86
|
+
|
|
87
|
+
Do not choose Arial, Helvetica, or a bare `system-ui` stack as the visible design direction for net-new aesthetic work. They remain acceptable technical fallbacks and may remain correct for an existing system or native-platform surface.
|
|
88
|
+
|
|
89
|
+
### Current Google Fonts inspiration
|
|
90
|
+
|
|
91
|
+
The following families were present in Google Fonts metadata fetched 14 July 2026. Popularity positions in that metadata included DM Sans 23, Manrope 37, Lora 43, Bricolage Grotesque 45, Plus Jakarta Sans 51, Space Grotesk 79, Instrument Serif 92, Geist 125, IBM Plex Mono 129, Source Serif 4 133, Instrument Sans 140, Newsreader 148, Geist Mono 149, and DM Mono 168. Popularity is discovery evidence, not a command to use the highest-ranked family.
|
|
92
|
+
|
|
93
|
+
| Pairing | Best fit | Role split |
|
|
94
|
+
|---|---|---|
|
|
95
|
+
| Instrument Sans + Instrument Serif | editorial brands, culture, thoughtful commerce | sans for UI/body, serif for display or pull quotes |
|
|
96
|
+
| Manrope + IBM Plex Mono | precise product UI, operations, technical SaaS | sans for interface, mono for data and technical labels |
|
|
97
|
+
| Plus Jakarta Sans + Source Serif 4 | trustworthy services, education, research | sans for navigation/UI, serif for long reading |
|
|
98
|
+
| DM Sans + DM Mono | clean application UI, data products | sans for hierarchy, mono for identifiers and code |
|
|
99
|
+
| Space Grotesk + Newsreader | modern editorial/product hybrids | grotesk for display/UI, serif for narrative |
|
|
100
|
+
| Bricolage Grotesque + Lora | playful or crafted consumer products | expressive sans for display, serif for supporting warmth |
|
|
101
|
+
| Geist + Geist Mono | restrained developer tools | sans for UI, mono for code/data |
|
|
102
|
+
| Noto Sans + Noto Serif | multilingual products | broad-script sans/serif system |
|
|
103
|
+
|
|
104
|
+
Use one family when role, weight, width, size, and tracking provide enough hierarchy. Add a second family only for a clear role contrast. Two families are usually sufficient; a third requires a specific content role.
|
|
105
|
+
|
|
106
|
+
### Loading Google Fonts
|
|
107
|
+
|
|
108
|
+
When network font loading is acceptable, connect the selected pair through the Google Fonts CSS API. Request only used families, styles, scripts, and weights. Use `display=swap`, preconnect to both Google Fonts origins, and test fallback metrics and layout shift.
|
|
109
|
+
|
|
110
|
+
```html
|
|
111
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
112
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
113
|
+
<link
|
|
114
|
+
rel="stylesheet"
|
|
115
|
+
href="https://fonts.googleapis.com/css2?family=Instrument+Sans:wght@400;500;600;700&family=Instrument+Serif:ital@0;1&display=swap"
|
|
116
|
+
/>
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Do not connect Google Fonts when privacy, offline operation, CSP, performance budgets, or project policy prohibit third-party font requests. Self-host approved WOFF2 files instead. Google and web.dev guidance recommends early discovery, preconnect for third-party font origins, explicit `font-display`, limited variants, and testing cumulative layout shift.
|
|
120
|
+
|
|
121
|
+
## 6. Contrast is a release requirement
|
|
122
|
+
|
|
123
|
+
Never use faint light-gray text on white, faint dark-gray text on black, or low-contrast borders/icons merely to look refined.
|
|
124
|
+
|
|
125
|
+
- Normal text meets at least 4.5:1 against its actual background.
|
|
126
|
+
- Large text meets at least 3:1.
|
|
127
|
+
- Meaningful icons, control boundaries, focus indicators, and graphical objects meet at least 3:1 against adjacent colors.
|
|
128
|
+
- Muted, secondary, placeholder, metadata, and disabled text remain intentionally legible. Disabled controls have a WCAG exception, but their meaning should not disappear.
|
|
129
|
+
- Do not round a failing ratio upward. W3C explicitly notes that 4.499:1 fails 4.5:1.
|
|
130
|
+
- Aim above the minimum for small, thin, long-form, or mission-critical text. Verify computed colors rather than judging from a screenshot alone.
|
|
131
|
+
- Do not use color as the only status cue. Pair color with text, shape, icon, or pattern.
|
|
132
|
+
|
|
133
|
+
## 7. Consistency and flow
|
|
134
|
+
|
|
135
|
+
A polished interface feels like one system from section to section, component to component, and page to page.
|
|
136
|
+
|
|
137
|
+
- Repeated navigation stays in the same relative order.
|
|
138
|
+
- Repeated functions keep the same component, label, icon, accessible name, and state behavior.
|
|
139
|
+
- Page templates share container widths, header logic, spacing cadence, and section transitions.
|
|
140
|
+
- A section should hand off to the next through intentional spacing, border, surface, continuation, or hierarchy. Avoid random background bands and arbitrary rhythm resets.
|
|
141
|
+
- Keep primary action placement predictable within a flow. Do not move the same action between card header, footer, and floating affordance without a reason.
|
|
142
|
+
- Preserve user orientation during loading, filtering, navigation, and responsive changes.
|
|
143
|
+
- Review adjacent screens together, not as isolated screenshots.
|
|
144
|
+
|
|
145
|
+
WCAG 2.2 SC 3.2.3 requires repeated navigation to keep the same relative order, and SC 3.2.4 requires components with the same function to be identified consistently. These accessibility requirements also reduce visual and cognitive friction for everyone.
|
|
146
|
+
|
|
147
|
+
## 8. UI copy punctuation
|
|
148
|
+
|
|
149
|
+
Do not generate em dashes in user-facing UI copy unless the user explicitly requests them or supplied brand/source copy already uses them and must remain unchanged.
|
|
150
|
+
|
|
151
|
+
Prefer a period, comma, colon, parentheses, or a rewritten sentence. Preserve exact quoted or legal source text. This is a product voice ruling, not a claim that em dashes are inaccessible.
|
|
152
|
+
|
|
153
|
+
## Final craft check
|
|
154
|
+
|
|
155
|
+
Before calling UI work complete, verify:
|
|
156
|
+
|
|
157
|
+
- no emoji used as UI imagery;
|
|
158
|
+
- one coherent icon family, with accessible names and target sizes;
|
|
159
|
+
- shared key lines, control heights, spacing, borders, and component geometry;
|
|
160
|
+
- existing components/tokens reused before new ones were created;
|
|
161
|
+
- every relevant interaction has purposeful, non-abrupt feedback;
|
|
162
|
+
- no generic hover lift or `transition: all`;
|
|
163
|
+
- reduced motion preserves state meaning;
|
|
164
|
+
- typography is intentional, loaded efficiently, and stable during fallback;
|
|
165
|
+
- all text and meaningful non-text contrast is measured;
|
|
166
|
+
- repeated navigation/actions remain consistent across sections and pages;
|
|
167
|
+
- generated UI copy contains no em dashes unless explicitly allowed.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Corpus Methodology
|
|
2
|
+
|
|
3
|
+
## Scope
|
|
4
|
+
|
|
5
|
+
This skill analyzes the MIT-licensed public `DESIGN.md` snapshot from [`VoltAgent/awesome-design-md`](https://github.com/VoltAgent/awesome-design-md) at commit `664b3e78fd1a298ba11973822da988483256d4b4` (retrieved 2026-07-13).
|
|
6
|
+
|
|
7
|
+
The archive contains **74/74 discovered `design-md/*/DESIGN.md` files**. The approved planning estimate said 75, while the upstream README badge at the pinned commit says 73 and omits the present `slack` file. Archive-tree enumeration is the authoritative count for this snapshot.
|
|
8
|
+
|
|
9
|
+
These files are independent analyses of public websites. They are not official brand design systems, and a frequency in this corpus is not a universal design rule.
|
|
10
|
+
|
|
11
|
+
## Deterministic extraction
|
|
12
|
+
|
|
13
|
+
Run:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
node scripts/analyze-corpus.mjs
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The analyzer uses only Node.js standard-library APIs. It checks every source against the SHA-256 in `data/corpus-manifest.json`, parses Markdown headings and optional YAML-like frontmatter, updates parser status in the manifest, and writes `data/observations.json` deterministically.
|
|
20
|
+
|
|
21
|
+
After any skill-package change, run `node scripts/validate-skill.mjs`. The validator checks frontmatter, progressive-disclosure structure, linked files, corpus hashes and totals, generated evidence consistency, fixture divergence, source boundaries, binding craft rules, and the production-contract release gate.
|
|
22
|
+
|
|
23
|
+
At extraction version 1, **64/74 documents** use frontmatter plus prose and **10/74** use numbered prose without frontmatter. All **74/74** are parsed; unsupported files would be retained with an explicit reason rather than silently dropped. Counts come from `data/observations.json`, source commit `664b3e…`, extraction version 1.
|
|
24
|
+
|
|
25
|
+
## What the parser measures
|
|
26
|
+
|
|
27
|
+
- **Color:** hexadecimal values, nearby semantic role language, accent count, surface ladder, HSL distributions, hue bins, and semantic-state mentions. It never averages colors into a recommended hex value.
|
|
28
|
+
- **Typography:** family strings, display/body/utility/code role language, font sizes, weights, tracking, line-height, and explicit line-length guidance.
|
|
29
|
+
- **Layout:** declared spacing scales, inferred 4/5/8px bases only when scale evidence has at least 60% coverage, section spacing, max-width declarations, density language, and named composition patterns.
|
|
30
|
+
- **Shape and material:** radius values tied to radius language, pill/sharp-corner mentions, borders, dividers, shadows, blur, gradients, imagery, and surface-separation language.
|
|
31
|
+
- **Components and states:** buttons, inputs, cards, navigation, tables, CTA language, hover, focus, press/active, disabled, loading, empty, error, and semantic color states.
|
|
32
|
+
- **Motion and access:** motion terms, durations, easing, reduced-motion language, accessibility, focus, keyboard, and contrast language.
|
|
33
|
+
- **Rules and motifs:** explicit do/do-not lines and sentences that identify a signature, motif, or defining characteristic.
|
|
34
|
+
|
|
35
|
+
## Statistics and missing data
|
|
36
|
+
|
|
37
|
+
Numeric outputs use min, first quartile, median, third quartile, max, and an explicit sample count. Frequencies always store `{ count, denominator }`. Unknown values remain `null`, `false`, or empty arrays and do not enter numeric sample counts.
|
|
38
|
+
|
|
39
|
+
Hue is reported in 30-degree bins because linear averaging is invalid across the 0°/360° boundary. Color recommendations must use semantic role and brief fit, never a corpus-average color.
|
|
40
|
+
|
|
41
|
+
Co-occurrences mean two terms or policies appeared in the same analysis; they do not prove a causal design relationship. Representative slugs are the most extraction-complete records, not quality rankings. Contrasts are selected from a non-dominant inferred theme.
|
|
42
|
+
|
|
43
|
+
## Categories and archetypes
|
|
44
|
+
|
|
45
|
+
The manifest preserves the ten upstream README groupings, including the two-file Retro Web section, and marks the present-but-uncatalogued `slack` file separately instead of inventing an upstream category. The analyzer separately maps documents into six usable product archetypes plus a zero-coverage mobile/native category:
|
|
46
|
+
|
|
47
|
+
- marketing/brand;
|
|
48
|
+
- application UI;
|
|
49
|
+
- dashboards/data-dense tools;
|
|
50
|
+
- commerce/marketplaces;
|
|
51
|
+
- editorial/content;
|
|
52
|
+
- documentation/developer tools;
|
|
53
|
+
- mobile/native (**0 documents**).
|
|
54
|
+
|
|
55
|
+
This mapping is analytical judgment, recorded explicitly in `scripts/analyze-corpus.mjs`; it is not supplied by upstream. A source appears in exactly one analytical archetype so denominators remain auditable.
|
|
56
|
+
|
|
57
|
+
## Known limitations
|
|
58
|
+
|
|
59
|
+
- The corpus overrepresents technology marketing and developer products: marketing/brand has **29/74 documents**, while editorial has **5/74** and mobile/native has **0/74** (commit `664b3e…`, extraction v1).
|
|
60
|
+
- Mention detection records what an analysis discusses, including prohibitions. Policy classifiers distinguish direct “no shadows/gradients” language from subtle treatment where possible, but nuanced prose still needs human review.
|
|
61
|
+
- Font-family counts include fallbacks and substitutes; they are evidence of documented vocabulary, not the number of fonts loaded by a website.
|
|
62
|
+
- Radius vocabularies can include component exceptions. Use the component rule and local project token set before the corpus-wide distribution.
|
|
63
|
+
- The files describe selected public surfaces, often marketing pages, not every state in the underlying product.
|
|
64
|
+
- No screenshots, brand assets, paid files, private requests, fonts, website media, or Refero data are included.
|
|
65
|
+
|
|
66
|
+
## Product-owner rulings and production standards versus corpus evidence
|
|
67
|
+
|
|
68
|
+
`references/craft-rulings.md` contains Nolan's binding product defaults for emoji, icons, alignment, reuse, motion, UI punctuation, typography, contrast, consistency, and flow. `references/production-contract.md` contains the separate pass/fail implementation floor for semantics, accessibility, forms, resilience, performance, platform behavior, tokens, trust, and verification. Neither document presents its requirements as corpus frequencies. `references/provenance.md` records the current standards and implementation sources that support them.
|
|
69
|
+
|
|
70
|
+
## How to use the evidence
|
|
71
|
+
|
|
72
|
+
Select the matching archetype first. Read corpus-wide findings only as context, inspect two aligned sources and one useful contrast, then test the choice against the actual product brief and existing project. If the local product contradicts the corpus, the product wins.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Observed Patterns
|
|
2
|
+
|
|
3
|
+
## Evidence key
|
|
4
|
+
|
|
5
|
+
Unless a paragraph says otherwise, every count below comes from `data/observations.json`, source commit `664b3e78fd1a298ba11973822da988483256d4b4`, extraction version 1. Fractions are **observed documents / relevant documents**; numeric distributions state their sample count. These are observations, not defaults.
|
|
6
|
+
|
|
7
|
+
## Theme is conditional, not a premium preset
|
|
8
|
+
|
|
9
|
+
The inferred primary theme is dark in **40/74**, mixed in **19/74**, and light in **15/74** analyses. The skew reflects a corpus rich in developer tools, AI products, and cinematic brands. Commerce is much less one-sided—light **5/12**, dark **4/12**, mixed **3/12**—so “dark equals premium” is not supported as a cross-product rule.
|
|
10
|
+
|
|
11
|
+
Aligned dark references: `sanity`, `voltagent`. Useful light contrast: `airbnb`.
|
|
12
|
+
|
|
13
|
+
## Surface separation favors restraint
|
|
14
|
+
|
|
15
|
+
Shadow policy is classified as subtle in **45/74**, absent in **28/74**, and merely mentioned in **1/74** analyses. This is stronger evidence for restrained elevation than for one universal “no shadows” rule. Use borders, tonal steps, spacing, or subtle shadows according to material logic and information density.
|
|
16
|
+
|
|
17
|
+
Examples: `vercel` and `linear.app` use precise containment; `airbnb` shows where soft elevation remains appropriate for a tactile consumer marketplace.
|
|
18
|
+
|
|
19
|
+
## Gradients are disputed, not forbidden
|
|
20
|
+
|
|
21
|
+
Gradients are positively mentioned in **35/74**, directly discouraged in **23/74**, and unclassified in **16/74** analyses. A blanket gradient ban contradicts the corpus. Gradients earn their place when they carry brand, light, depth, data, or media meaning; they fail when they merely signal “modern AI.”
|
|
22
|
+
|
|
23
|
+
Aligned use: `stripe`, `framer`. Contrast: `vercel`.
|
|
24
|
+
|
|
25
|
+
## Accent count is a range, not a palette recipe
|
|
26
|
+
|
|
27
|
+
Per-document accent-role extraction has **74 samples**: Q1 **3**, median **5**, Q3 **8**. These counts include shades and semantic variants, so they do not imply five competing CTA colors. Build a semantic hierarchy—canvas, surface, text, border, action, status—then reserve the highest-chroma signal for the screen’s single job.
|
|
28
|
+
|
|
29
|
+
The hue corpus is intentionally not averaged. Role and contrast matter more than a synthetic “average blue.”
|
|
30
|
+
|
|
31
|
+
## Spacing scales converge more than compositions
|
|
32
|
+
|
|
33
|
+
A spacing base was inferable in **73/74** documents: Q1 **4px**, median **4px**, Q3 **8px**. Section-spacing extraction has **434 samples**: Q1 **24px**, median **40px**, Q3 **64px**. Treat this as evidence for a coherent scale, not permission to paste a 4px system over an existing project.
|
|
34
|
+
|
|
35
|
+
Grid language appears in **73/74** analyses, full-bleed composition in **54/74**, single-column behavior in **44/74**, sidebars in **27/74**, asymmetry in **10/74**, split layouts in **10/74**, and masonry in **1/74**. “Uses a grid” is therefore not a signature. The signature must come from content-specific composition inside the grid.
|
|
36
|
+
|
|
37
|
+
## Radius is component-specific
|
|
38
|
+
|
|
39
|
+
Extracted radius values have **764 samples**: Q1 **4px**, median **12px**, Q3 **24px**. Pill language appears somewhere in **73/74**, while sharp-corner language appears in **16/74**. Because these counts include both uses and warnings, neither pills nor square corners should become a global default.
|
|
40
|
+
|
|
41
|
+
Constrain the local vocabulary by component role: controls may be compact, media cards may follow imagery, and badges may be pill-shaped without making every container a capsule. `kraken` explicitly limits buttons to 12px; `sanity` contrasts pill CTAs with 3–6px utility surfaces; `tesla` is a sharp, reduced contrast.
|
|
42
|
+
|
|
43
|
+
## Typography separation is selective
|
|
44
|
+
|
|
45
|
+
Explicit display/body family separation appears in **11/74** analyses. Font-family vocabulary per document has **74 samples** with median **4**, but that number includes fallbacks and suggested substitutes. The useful lesson is to assign roles deliberately, not to load four fonts.
|
|
46
|
+
|
|
47
|
+
Use a second family when it creates a subject-specific register, such as editorial versus utility, human versus technical, or display versus code. Keep one family when weight, width, scale, and tracking already provide sufficient hierarchy. Compare `sanity` (display plus mono technical voice) with `mastercard` (one-font discipline). For net-new type inspiration and current Google Fonts pairings, use `craft-rulings.md`; do not convert corpus frequency into a generic font default.
|
|
48
|
+
|
|
49
|
+
## Motion is underdocumented
|
|
50
|
+
|
|
51
|
+
Motion language appears in **41/74** analyses. Only **11 extracted duration samples** exist, with Q1 **200ms**, median **200ms**, and Q3 **225ms**. Reduced-motion language appears in **0/74**. That zero is a corpus gap, not evidence that reduced-motion support is optional.
|
|
52
|
+
|
|
53
|
+
Default to no ambient motion, not no feedback. Every relevant interaction should acknowledge hover, focus, press, selection, expansion, loading, success, or error without an abrupt or generic jump. Prefer short color, border, underline, icon, opacity, or restrained shadow transitions over scale/translate hover lift, and always provide a reduced-motion path.
|
|
54
|
+
|
|
55
|
+
## Interaction coverage drops after the happy path
|
|
56
|
+
|
|
57
|
+
Mentions by state are: pressed/active **67/74**, error **62/74**, focus **61/74**, hover **57/74**, disabled **46/74**, loading **8/74**, empty **1/74**. Keyboard language appears in only **8/74** analyses.
|
|
58
|
+
|
|
59
|
+
The corpus is strongest on styling and weak on product-state completeness. Implementation must add loading, empty, keyboard, and reduced-motion behavior even when the selected reference is silent.
|
|
60
|
+
|
|
61
|
+
## Archetype differences matter
|
|
62
|
+
|
|
63
|
+
- Application UI documents mention focus in **7/7** and motion in **5/7**; use interaction precision, not a landing-page spectacle.
|
|
64
|
+
- Dashboard/data-dense documents mention focus in **5/5** and keyboard behavior in **3/5**; prioritize scan paths and operability.
|
|
65
|
+
- Documentation/developer-tool documents are dark in **11/16**, but one is light and four are mixed; dark remains a tendency, not a requirement.
|
|
66
|
+
- Editorial/content documents mention motion in only **1/5** and asymmetry in **3/5**; pacing and hierarchy matter more than animated chrome.
|
|
67
|
+
- Commerce/marketplace documents show the broadest theme split and use subtle shadow policy in **8/12**; imagery, trust, and transaction clarity determine material treatment.
|
|
68
|
+
- Marketing/brand has **29/74** documents, so its patterns must not leak unexamined into product UI.
|