@ericrisco/rsc 1.0.34 → 1.1.1
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/manifest.json +4 -2
- package/package.json +1 -1
- package/scripts/doctor.js +10 -0
- package/scripts/lib/design-identity.js +117 -0
- package/scripts/lib/starting-point.js +314 -0
- package/skills/animate/SKILL.md +623 -0
- package/skills/design/SKILL.md +4 -1
- package/skills/design/references/brand-grounding.md +1 -1
- package/skills/design/references/design-systems.md +8 -0
- package/skills/design/references/inspiration-sources.md +96 -0
- package/skills/design/references/research-method.md +7 -0
- package/skills/design/references/starting-point.md +75 -0
- package/skills/design-dna/SKILL.md +23 -0
- package/skills/design-eng/SKILL.md +16 -654
- package/skills/design-loop/SKILL.md +16 -2
- package/skills/pick-ui-library/SKILL.md +1 -0
- package/skills/pick-ui-library/references/component-galleries.md +59 -0
- package/skills/review-animations/SKILL.md +51 -0
|
@@ -34,7 +34,15 @@ website", "good SaaS design"), push once for the specific page or file: a critic
|
|
|
34
34
|
reference invents the comparison and approves everything on round one.
|
|
35
35
|
|
|
36
36
|
On *skip*, propose three candidate bars, one line each on why, and wait. No answer → take the
|
|
37
|
-
hardest one and say so.
|
|
37
|
+
hardest one and say so. **Where they come from:** `../design/references/starting-point.md` — run its
|
|
38
|
+
step 0 first, because a bar the project already owns outranks anything you would pick from outside,
|
|
39
|
+
and proposing from memory is how this promise used to resolve to the AI-template median.
|
|
40
|
+
|
|
41
|
+
**Where to go looking.** For a whole page to beat, and for the flows and single patterns behind it:
|
|
42
|
+
`../design/references/inspiration-sources.md`. For a component idea rather than a whole reference:
|
|
43
|
+
`../pick-ui-library/references/component-galleries.md`. Browse for the technique, never to clone a
|
|
44
|
+
competitor's exact grid — and come back with **a specific page you can open**, because a gallery
|
|
45
|
+
is not a bar.
|
|
38
46
|
|
|
39
47
|
## Phase 2 — Preflight
|
|
40
48
|
|
|
@@ -46,6 +54,11 @@ A check, not a question. Run it before any work and report in one block.
|
|
|
46
54
|
render for a doc.
|
|
47
55
|
- **Name the generation tools the goal needs** (image, video, voice) and confirm they are connected.
|
|
48
56
|
- **Confirm the input files exist**: design system, brand doc, script.
|
|
57
|
+
- **Read the harness identity if it exists** — `02-DOCS/wiki/brand/`, reached from the root
|
|
58
|
+
`CLAUDE.md` `## Brand & voice` section, the same place `design`, `marketing` and
|
|
59
|
+
`presentations` read. A bar from outside cannot silently overrule the identity this project
|
|
60
|
+
already committed to: if the reference contradicts it, say which rule conflicts and let the
|
|
61
|
+
user decide which one wins. If no identity exists yet, say so — this run is what creates it.
|
|
49
62
|
|
|
50
63
|
Then print what is working, what is missing, and **which critic goes blind** if something is
|
|
51
64
|
missing. Never carry on quietly with a critic that cannot see — a verdict from a judge who cannot
|
|
@@ -64,7 +77,8 @@ Mechanisms, not adjectives. "Feels premium" is useless. These are useful:
|
|
|
64
77
|
- whitespace above the fold is at least 40% of the frame
|
|
65
78
|
|
|
66
79
|
Every line must be something a critic can check by looking. Show `bar.md` to the user before
|
|
67
|
-
continuing
|
|
80
|
+
continuing — and where a mechanism contradicts the harness identity, mark the conflict rather
|
|
81
|
+
than resolving it silently in favour of the reference.
|
|
68
82
|
|
|
69
83
|
## Phase 4 — Loop
|
|
70
84
|
|
|
@@ -27,6 +27,7 @@ A lookup skill. When invoked with a task ("I need toasts", "what should I use fo
|
|
|
27
27
|
2. **Check what's already installed.** Look at `package.json` first. If the project already uses a listed library, use it. If it uses a competitor (e.g. react-window instead of Virtuoso), flag the recommendation but don't churn the dependency without being asked.
|
|
28
28
|
3. **Recommend one library**, state what it's for in one sentence, and install/wire it up if that's part of the request. Don't present a menu of options when the list has a clear answer.
|
|
29
29
|
4. If the task isn't covered by the list, say so explicitly and recommend from your own knowledge — but be clear you've left the curated list.
|
|
30
|
+
5. **Need an idea rather than a library?** Go and look: `references/component-galleries.md` names where to browse for component ideas (Aceternity for marketing effects, 21st.dev for breadth, React Bits for tunable animation) and what each is good for. Take the technique, build it in the project's own tokens.
|
|
30
31
|
|
|
31
32
|
## The list
|
|
32
33
|
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Reference — where to go looking for component ideas
|
|
2
|
+
|
|
3
|
+
> Last verified: **2026-08-24** — all three returned HTTP 200 on that date.
|
|
4
|
+
|
|
5
|
+
**Go and look.** When you need a component idea and your own prior is the median of every AI template
|
|
6
|
+
ever scraped, these are the places to browse instead of inventing from memory. Open them, see what
|
|
7
|
+
exists, come back with something specific.
|
|
8
|
+
|
|
9
|
+
## Where to go, and for what
|
|
10
|
+
|
|
11
|
+
### [Aceternity UI](https://ui.aceternity.com/components) — effects for a surface that must stop the scroll
|
|
12
|
+
|
|
13
|
+
Go here for **motion and atmosphere on a marketing surface**, not for primitives. What's there:
|
|
14
|
+
|
|
15
|
+
- **Backgrounds:** Aurora, Beams, Vortex, Sparkles, gradient fields
|
|
16
|
+
- **Cards:** 3D tilt, hover reveal, card stack, spotlight
|
|
17
|
+
- **Text:** typewriter, flip, encrypted/scramble, generate-in, canvas text
|
|
18
|
+
- **Scroll:** sticky scroll, container scroll, hero parallax
|
|
19
|
+
- **Navigation:** floating navbar, floating dock, sidebar, notch, tabs
|
|
20
|
+
- **Buttons:** magnetic, moving border, hover gradient
|
|
21
|
+
- **Data as spectacle:** globe, timeline, world map, before/after compare
|
|
22
|
+
- **Whole sections:** hero, pricing, testimonials, CTA, feature blocks
|
|
23
|
+
|
|
24
|
+
Best used when you can name the feeling you want and need to see how someone already built it.
|
|
25
|
+
|
|
26
|
+
### [21st.dev](https://21st.dev/community/components) — breadth, ranked by what people actually use
|
|
27
|
+
|
|
28
|
+
A community registry rather than a curated library, so it's the widest net of the three. Marketing
|
|
29
|
+
blocks *and* real UI — buttons, cards, forms, modals, inputs, tables — plus Shaders and ASCII art.
|
|
30
|
+
Sortable by popular and newest, with view counts.
|
|
31
|
+
|
|
32
|
+
Go here when you don't know what you're looking for yet and want to see the range. Read the code of
|
|
33
|
+
anything you like: community means unvetted, and popularity is not review.
|
|
34
|
+
|
|
35
|
+
### [React Bits](https://reactbits.dev/get-started/index) — animated interactions, deeply customizable
|
|
36
|
+
|
|
37
|
+
~46k stars. Animations, 3D, CSS effects, built to be tuned rather than dropped in.
|
|
38
|
+
|
|
39
|
+
Go here when Aceternity's version of an effect is close but you need to control it.
|
|
40
|
+
|
|
41
|
+
## Two things to carry with you
|
|
42
|
+
|
|
43
|
+
**Ideas travel; code stays there.** Take the technique, the ratio, the interaction — then build it in
|
|
44
|
+
the project's own tokens. Never vendor a gallery's source into this catalog: rsc ships publicly (P9),
|
|
45
|
+
and React Bits' licence (MIT + Commons Clause) forbids redistributing its components outright. In the
|
|
46
|
+
user's own project, installing any of the three is fine.
|
|
47
|
+
|
|
48
|
+
**Identity outranks the gallery.** Check `02-DOCS/wiki/brand/` for what this project refuses before
|
|
49
|
+
pulling an idea. A lot of what these galleries do best — aurora and gradient-mesh backgrounds,
|
|
50
|
+
glassmorphism, neon, blobs, decorative 3D — is also on the AI-tell list in
|
|
51
|
+
`../../design/references/ai-tells.md`, and some brand studies veto it by name. And run the frequency gate
|
|
52
|
+
from `../../animate/SKILL.md`: a spotlight card earns its place on a hero someone sees once, and never on
|
|
53
|
+
a table they open forty times a day.
|
|
54
|
+
|
|
55
|
+
## Not a substitute for the primitives
|
|
56
|
+
|
|
57
|
+
A dialog still comes from `base-ui`, a toast from Sonner, a command palette from cmdk. Focus trapping,
|
|
58
|
+
dismissal and accessibility are solved; an animated card does not replace a solved primitive. Use
|
|
59
|
+
`SKILL.md`'s list for the task, and this file for the look.
|
|
@@ -135,3 +135,54 @@ Adapted for the rsc catalog from **[emilkowalski/skills](https://github.com/emil
|
|
|
135
135
|
[Sonner](https://sonner.emilkowal.ski), [Vaul](https://vaul.emilkowal.ski) and
|
|
136
136
|
[animations.dev](https://animations.dev). The craft bar here is his; the routing, gates and evals
|
|
137
137
|
that make it an rsc skill are not. Nothing in this body is a substitute for his course.
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
# Craft reference, inherited from the umbrella
|
|
141
|
+
|
|
142
|
+
*Moved here from `design-eng` (spec: `design-area-cleanup`), which routes and no longer teaches.
|
|
143
|
+
This is the same material by the same author; where it overlaps a rule stated above, the above is
|
|
144
|
+
the summary and this is the reasoning.*
|
|
145
|
+
|
|
146
|
+
## Review Format (Required)
|
|
147
|
+
|
|
148
|
+
When reviewing UI code, you MUST use a markdown table with Before/After columns. Do NOT use a list with "Before:" and "After:" on separate lines. Always output an actual markdown table like this:
|
|
149
|
+
|
|
150
|
+
| Before | After | Why |
|
|
151
|
+
| --- | --- | --- |
|
|
152
|
+
| `transition: all 300ms` | `transition: transform 200ms ease-out` | Specify exact properties; avoid `all` |
|
|
153
|
+
| `transform: scale(0)` | `transform: scale(0.95); opacity: 0` | Nothing in the real world appears from nothing |
|
|
154
|
+
| `ease-in` on dropdown | `ease-out` with custom curve | `ease-in` feels sluggish; `ease-out` gives instant feedback |
|
|
155
|
+
| No `:active` state on button | `transform: scale(0.97)` on `:active` | Buttons must feel responsive to press |
|
|
156
|
+
| `transform-origin: center` on popover | `transform-origin: var(--transform-origin)` | Popovers should scale from their trigger (not modals — modals stay centered) |
|
|
157
|
+
|
|
158
|
+
Wrong format (never do this):
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
Before: transition: all 300ms
|
|
162
|
+
After: transition: transform 200ms ease-out
|
|
163
|
+
────────────────────────────
|
|
164
|
+
Before: scale(0)
|
|
165
|
+
After: scale(0.95)
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Correct format: A single markdown table with | Before | After | Why | columns, one row per issue found. The "Why" column briefly explains the reasoning.
|
|
169
|
+
|
|
170
|
+
## Review Checklist
|
|
171
|
+
|
|
172
|
+
When reviewing UI code, check for:
|
|
173
|
+
|
|
174
|
+
| Issue | Fix |
|
|
175
|
+
| ------------------------------------------ | ---------------------------------------------------------------- |
|
|
176
|
+
| `transition: all` | Specify exact properties: `transition: transform 200ms ease-out` |
|
|
177
|
+
| `scale(0)` entry animation | Start from `scale(0.95)` with `opacity: 0` |
|
|
178
|
+
| `ease-in` on UI element | Switch to `ease-out` or custom curve |
|
|
179
|
+
| `transform-origin: center` on popover | Set to trigger location or use Base UI's `var(--transform-origin)` (modals are exempt — keep centered) |
|
|
180
|
+
| Animation on keyboard action | Remove animation entirely |
|
|
181
|
+
| Duration > 300ms on UI element | Reduce to 150-250ms |
|
|
182
|
+
| Hover animation without media query | Add `@media (hover: hover) and (pointer: fine)` |
|
|
183
|
+
| Keyframes on rapidly-triggered element | Use CSS transitions for interruptibility |
|
|
184
|
+
| Framer Motion `x`/`y` props under load | Use `transform: "translateX()"` for hardware acceleration |
|
|
185
|
+
| Same enter/exit transition speed | Make exit faster than enter (e.g., enter 2s, exit 200ms) |
|
|
186
|
+
| Elements all appear at once | Add stagger delay (30-80ms between items) |
|
|
187
|
+
|
|
188
|
+
---
|