@its-thepoe/design-motion-principles 1.0.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.
@@ -0,0 +1,82 @@
1
+ # Performance
2
+
3
+ ---
4
+
5
+ ## will-change Explained (Jakub)
6
+
7
+ A hint to the browser: "I'm about to animate these properties, please prepare."
8
+
9
+ ```css
10
+ /* Good - specific properties that will animate */
11
+ .animated-button {
12
+ will-change: transform, opacity;
13
+ }
14
+
15
+ /* Bad - too broad, wastes resources */
16
+ * { will-change: auto; }
17
+ .element { will-change: all; }
18
+ ```
19
+
20
+ **Properties that benefit from will-change**:
21
+ - transform
22
+ - opacity
23
+ - filter (blur, brightness)
24
+ - clip-path
25
+ - mask
26
+
27
+ **Why it matters**: Without the hint, the browser promotes elements to GPU layers only when animation starts, causing first-frame stutter. With `will-change`, it pre-promotes during idle time.
28
+
29
+ **When NOT to use**:
30
+ - On elements that won't animate
31
+ - On too many elements (each GPU layer uses memory)
32
+ - As a "fix" for janky animations (find the real cause)
33
+
34
+ ---
35
+
36
+ ## Gradient Animation Performance (Jakub)
37
+
38
+ **Cheap to animate (GPU-accelerated)**:
39
+ - background-position
40
+ - background-size
41
+ - opacity
42
+
43
+ **Expensive to animate**:
44
+ - Color stops
45
+ - Adding/removing gradient layers
46
+ - Switching gradient types
47
+
48
+ **Tip**: Animate a pseudo-element overlay or use CSS variables that transition indirectly.
49
+
50
+ ---
51
+
52
+ ## Animation Performance Budget
53
+
54
+ As a rough guide:
55
+ - **0-3 elements** with `will-change`: Fine
56
+ - **4-10 elements**: Careful, test on low-end devices
57
+ - **10+ elements**: Reconsider approach, use virtualization or stagger
58
+
59
+ ---
60
+
61
+ ## Properties to Avoid Animating
62
+
63
+ These trigger layout recalculation (expensive):
64
+ - `width`, `height`
65
+ - `top`, `left`, `right`, `bottom`
66
+ - `margin`, `padding`
67
+ - `font-size`
68
+
69
+ **Always prefer**:
70
+ - `transform: translate()` instead of `top`/`left`
71
+ - `transform: scale()` instead of `width`/`height`
72
+ - `opacity` for visibility changes
73
+
74
+ ---
75
+
76
+ ## Performance Checklist
77
+
78
+ - [ ] `will-change` used sparingly and specifically
79
+ - [ ] Animations use transform/opacity (not layout properties)
80
+ - [ ] Tested on low-end devices
81
+ - [ ] No continuous animations without purpose
82
+ - [ ] GPU layer count is reasonable (< 10 animated elements)
@@ -0,0 +1,108 @@
1
+ # Philosophy & Approach
2
+
3
+ Understanding the "why" behind these designers' techniques is as important as the techniques themselves. Their approaches differ significantly, and knowing when to apply each mindset is crucial.
4
+
5
+ ---
6
+
7
+ ## Emil's Approach: Purposeful Restraint
8
+
9
+ Emil Kowalski's defining contribution is knowing **when NOT to animate**.
10
+
11
+ > "The goal is not to animate for animation's sake, it's to build great user interfaces."
12
+
13
+ **Core Philosophy**: Animation decisions should be driven by **interaction frequency**. The more often users perform an action, the less animation it should have—or none at all.
14
+
15
+ **The Frequency Framework**:
16
+ - **Rare interactions** (monthly): Delightful, expressive animations welcome
17
+ - **Occasional interactions** (daily): Subtle, fast animations
18
+ - **Frequent interactions** (100s/day): Minimal or no animation
19
+ - **Keyboard-initiated actions**: Never animate
20
+
21
+ **Emil's Speed Rule**: For high-frequency UI, animations should stay under 300ms (180ms feels ideal). When in doubt, go faster. *Note: This is Emil's guideline for productivity tools—Jakub and Jhey may use longer durations for polish or experimentation.*
22
+
23
+ **When to apply Emil's mindset**:
24
+ - High-frequency productivity tools (like Raycast, Linear)
25
+ - Keyboard-heavy workflows
26
+ - When users have clear goals and don't expect delight
27
+ - When questioning whether to animate at all
28
+ - When existing animations feel slow or tiresome
29
+
30
+ ---
31
+
32
+ ## Jakub's Approach: Subtle Production Polish
33
+
34
+ Jakub's work embodies **refinement for production use**. His animations are:
35
+
36
+ - **Barely noticeable** — If users consciously notice the animation, it's probably too much
37
+ - **Production-ready** — Designed for real client work, not demos
38
+ - **Contextually appropriate** — Adapts to light mode, varied backgrounds, real content
39
+ - **Subtle over flashy** — The goal is to make interfaces feel smooth and responsive, not impressive
40
+
41
+ **Core Philosophy**: Animation should **enhance the experience invisibly**. Users should feel that an interface is polished and responsive without being able to point to specific animations. The best compliment is "this feels really nice" not "cool animation!"
42
+
43
+ **When to apply Jakub's mindset**:
44
+ - Production applications and client work
45
+ - Professional/enterprise interfaces
46
+ - When users will interact repeatedly (animations must not get tiresome)
47
+ - When accessibility and performance are critical
48
+
49
+ ---
50
+
51
+ ## Jhey's Approach: Learn Through Playful Creation
52
+
53
+ Jhey's work embodies **experimental joy**. His philosophy:
54
+
55
+ > "I went from 'I want to learn X, so how do I fit it into Y' to 'I want to make Y, can I learn X to do it?'"
56
+
57
+ **The motivation should be making something cool—learning is a happy side effect.**
58
+
59
+ **Core Beliefs**:
60
+ - **No idea is a bad idea** — Document every spark, however weird (toadstools, Peter Griffin blinds, bread array slice/splice cartoon)
61
+ - **Don't ask "Why?" or "Is this practical?"** — Make what brings you joy first
62
+ - **"Useless" demos teach real skills** — CSS art teaches clip-path mastery, border-radius tricks, stacking contexts
63
+ - **Lateral learning** — Building diverse demos trains you to switch contexts and rise to challenges
64
+ - **You'll never have time to make everything** — And that's okay. The act of documenting ideas matters.
65
+
66
+ **Core Philosophy**: Playfulness in code supercharges learning. The fact you're learning new skills is a bonus, not the goal. Work on ideas that spark joy for you.
67
+
68
+ **When to apply Jhey's mindset**:
69
+ - Learning new techniques
70
+ - Personal projects and experiments
71
+ - When you're stuck in a creative rut
72
+ - Building your portfolio or demos
73
+ - Exploring what's possible with new CSS features
74
+
75
+ ---
76
+
77
+ ## The Golden Rule of Animation
78
+
79
+ > "The best animation is that which goes unnoticed."
80
+
81
+ *(Note: Jhey references this as a saying that has always stuck with him, not as his original quote. The principle itself is widely shared in motion design.)*
82
+
83
+ This captures the essence of production-quality motion design. Effective motion:
84
+ - Enhances the experience without demanding attention
85
+ - Feels natural and expected
86
+ - Serves a functional purpose (orientation, feedback, continuity)
87
+ - Doesn't fatigue users on repeated interactions
88
+
89
+ **The test**: If you remove the animation, do users feel something is missing? Good. If users comment "nice animation!" every time they see it? Probably too prominent.
90
+
91
+ ---
92
+
93
+ ## Synthesizing All Three Approaches
94
+
95
+ | Question | Emil | Jakub | Jhey |
96
+ |----------|------|-------|------|
97
+ | **Primary concern** | "Should this animate at all?" | "Is this subtle enough?" | "What could this become?" |
98
+ | **Success metric** | Frictionless workflow | Invisible polish | Joy and learning |
99
+ | **Duration preference** | Under 300ms (180ms ideal) | "Whatever feels right" (often 200-400ms) | Varies widely by effect |
100
+ | **Signature technique** | Frequency-based decisions | Blur + opacity + translateY | CSS custom properties |
101
+ | **Ideal context** | High-frequency tools | Production polish | Learning & exploration |
102
+
103
+ **Decision Framework**:
104
+ 1. **First, apply Emil's lens**: Should this animate at all? Check frequency and purpose.
105
+ 2. **If yes, apply Jakub's lens**: How do we make this subtle and production-ready?
106
+ 3. **For learning/exploration, apply Jhey's lens**: What techniques can we discover through play?
107
+
108
+ The three approaches aren't competing—they're complementary filters for different stages and contexts of motion design work.