vibecodeagent 0.0.0-stage → 0.1.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +46 -2
  3. package/THIRD-PARTY-NOTICES.txt +1427 -0
  4. package/dist/agen.js +138920 -0
  5. package/dist/bin.js +1245 -0
  6. package/dist/daemon.js +163701 -0
  7. package/dist/node_modules/node-ensure/index.js +10 -0
  8. package/dist/node_modules/node-ensure/package.json +31 -0
  9. package/dist/node_modules/pdf-parse/lib/pdf-parse.js +102 -0
  10. package/dist/node_modules/pdf-parse/lib/pdf.js/v1.10.100/build/pdf.js +18538 -0
  11. package/dist/node_modules/pdf-parse/lib/pdf.js/v1.10.100/build/pdf.worker.js +45507 -0
  12. package/dist/node_modules/pdf-parse/package.json +49 -0
  13. package/dist/node_modules/sql.js/dist/sql-wasm.js +186 -0
  14. package/dist/node_modules/sql.js/dist/sql-wasm.wasm +0 -0
  15. package/dist/node_modules/sql.js/package.json +58 -0
  16. package/dist/resources/skills/builtin/.gitkeep +0 -0
  17. package/dist/resources/skills/builtin/NOTICE.md +35 -0
  18. package/dist/resources/skills/builtin/README.md +74 -0
  19. package/dist/resources/skills/builtin/backend-engineering/SKILL.md +102 -0
  20. package/dist/resources/skills/builtin/backend-engineering/references/api-contracts.md +320 -0
  21. package/dist/resources/skills/builtin/backend-engineering/references/auth-and-secrets.md +268 -0
  22. package/dist/resources/skills/builtin/backend-engineering/references/concurrency-and-jobs.md +386 -0
  23. package/dist/resources/skills/builtin/backend-engineering/references/data-modelling.md +367 -0
  24. package/dist/resources/skills/builtin/backend-engineering/references/deploy-and-config.md +228 -0
  25. package/dist/resources/skills/builtin/backend-engineering/references/migrations.md +320 -0
  26. package/dist/resources/skills/builtin/backend-engineering/references/observability.md +301 -0
  27. package/dist/resources/skills/builtin/backend-engineering/references/plan-template.md +152 -0
  28. package/dist/resources/skills/builtin/backend-engineering/references/review-audit.md +213 -0
  29. package/dist/resources/skills/builtin/backend-engineering/references/security.md +251 -0
  30. package/dist/resources/skills/builtin/backend-engineering/references/stack-go.md +238 -0
  31. package/dist/resources/skills/builtin/backend-engineering/references/stack-node.md +274 -0
  32. package/dist/resources/skills/builtin/backend-engineering/references/stack-python.md +296 -0
  33. package/dist/resources/skills/builtin/backend-engineering/references/testing-and-perf.md +298 -0
  34. package/dist/resources/skills/builtin/backend-engineering/references/validation-and-errors.md +266 -0
  35. package/dist/resources/skills/builtin/dasar-vibecode/SKILL.md +312 -0
  36. package/dist/resources/skills/builtin/excel-maker/SKILL.md +71 -0
  37. package/dist/resources/skills/builtin/frontend-design/SKILL.md +131 -0
  38. package/dist/resources/skills/builtin/frontend-design/data/app-interface.csv +33 -0
  39. package/dist/resources/skills/builtin/frontend-design/data/catalog-summary.json +78 -0
  40. package/dist/resources/skills/builtin/frontend-design/data/charts.csv +26 -0
  41. package/dist/resources/skills/builtin/frontend-design/data/colors.csv +193 -0
  42. package/dist/resources/skills/builtin/frontend-design/data/data-provenance.json +1348 -0
  43. package/dist/resources/skills/builtin/frontend-design/data/google-font-licenses.json +20185 -0
  44. package/dist/resources/skills/builtin/frontend-design/data/google-fonts.csv +1935 -0
  45. package/dist/resources/skills/builtin/frontend-design/data/icons.csv +106 -0
  46. package/dist/resources/skills/builtin/frontend-design/data/landing.csv +35 -0
  47. package/dist/resources/skills/builtin/frontend-design/data/motion.csv +18 -0
  48. package/dist/resources/skills/builtin/frontend-design/data/phosphor-icons-upstream.json +32582 -0
  49. package/dist/resources/skills/builtin/frontend-design/data/products.csv +193 -0
  50. package/dist/resources/skills/builtin/frontend-design/data/react-performance.csv +45 -0
  51. package/dist/resources/skills/builtin/frontend-design/data/stacks/angular.csv +51 -0
  52. package/dist/resources/skills/builtin/frontend-design/data/stacks/astro.csv +54 -0
  53. package/dist/resources/skills/builtin/frontend-design/data/stacks/avalonia.csv +57 -0
  54. package/dist/resources/skills/builtin/frontend-design/data/stacks/flutter.csv +53 -0
  55. package/dist/resources/skills/builtin/frontend-design/data/stacks/html-tailwind.csv +60 -0
  56. package/dist/resources/skills/builtin/frontend-design/data/stacks/javafx.csv +76 -0
  57. package/dist/resources/skills/builtin/frontend-design/data/stacks/jetpack-compose.csv +53 -0
  58. package/dist/resources/skills/builtin/frontend-design/data/stacks/laravel.csv +51 -0
  59. package/dist/resources/skills/builtin/frontend-design/data/stacks/nextjs.csv +62 -0
  60. package/dist/resources/skills/builtin/frontend-design/data/stacks/nuxt-ui.csv +71 -0
  61. package/dist/resources/skills/builtin/frontend-design/data/stacks/nuxtjs.csv +68 -0
  62. package/dist/resources/skills/builtin/frontend-design/data/stacks/react-native.csv +52 -0
  63. package/dist/resources/skills/builtin/frontend-design/data/stacks/react.csv +62 -0
  64. package/dist/resources/skills/builtin/frontend-design/data/stacks/shadcn.csv +69 -0
  65. package/dist/resources/skills/builtin/frontend-design/data/stacks/svelte.csv +56 -0
  66. package/dist/resources/skills/builtin/frontend-design/data/stacks/swiftui.csv +51 -0
  67. package/dist/resources/skills/builtin/frontend-design/data/stacks/threejs.csv +54 -0
  68. package/dist/resources/skills/builtin/frontend-design/data/stacks/uno.csv +60 -0
  69. package/dist/resources/skills/builtin/frontend-design/data/stacks/uwp.csv +56 -0
  70. package/dist/resources/skills/builtin/frontend-design/data/stacks/vue.csv +50 -0
  71. package/dist/resources/skills/builtin/frontend-design/data/stacks/winui.csv +60 -0
  72. package/dist/resources/skills/builtin/frontend-design/data/stacks/wpf.csv +57 -0
  73. package/dist/resources/skills/builtin/frontend-design/data/styles.csv +89 -0
  74. package/dist/resources/skills/builtin/frontend-design/data/typography.csv +75 -0
  75. package/dist/resources/skills/builtin/frontend-design/data/ui-reasoning.csv +193 -0
  76. package/dist/resources/skills/builtin/frontend-design/data/ux-guidelines.csv +120 -0
  77. package/dist/resources/skills/builtin/frontend-design/references/animation-patterns.md +705 -0
  78. package/dist/resources/skills/builtin/frontend-design/references/app-polish.md +117 -0
  79. package/dist/resources/skills/builtin/frontend-design/references/apple-fluid.md +278 -0
  80. package/dist/resources/skills/builtin/frontend-design/references/art-direction.md +280 -0
  81. package/dist/resources/skills/builtin/frontend-design/references/case-studies.md +599 -0
  82. package/dist/resources/skills/builtin/frontend-design/references/craft.md +128 -0
  83. package/dist/resources/skills/builtin/frontend-design/references/expo.md +251 -0
  84. package/dist/resources/skills/builtin/frontend-design/references/layout-systems.md +533 -0
  85. package/dist/resources/skills/builtin/frontend-design/references/libraries.md +72 -0
  86. package/dist/resources/skills/builtin/frontend-design/references/motion.md +222 -0
  87. package/dist/resources/skills/builtin/frontend-design/references/picker.md +197 -0
  88. package/dist/resources/skills/builtin/frontend-design/references/plan-template.md +73 -0
  89. package/dist/resources/skills/builtin/frontend-design/references/prototype.md +85 -0
  90. package/dist/resources/skills/builtin/frontend-design/references/recipes-expo.md +385 -0
  91. package/dist/resources/skills/builtin/frontend-design/references/recipes-web.md +421 -0
  92. package/dist/resources/skills/builtin/frontend-design/references/review-audit.md +107 -0
  93. package/dist/resources/skills/builtin/frontend-design/references/sonner.md +143 -0
  94. package/dist/resources/skills/builtin/frontend-design/references/technical-stack.md +543 -0
  95. package/dist/resources/skills/builtin/frontend-design/references/theming.md +60 -0
  96. package/dist/resources/skills/builtin/frontend-design/references/typography.md +393 -0
  97. package/dist/resources/skills/builtin/frontend-design/references/ux-rules.md +256 -0
  98. package/dist/resources/skills/builtin/frontend-design/references/vocabulary.md +169 -0
  99. package/dist/resources/skills/builtin/frontend-design/scripts/core.py +993 -0
  100. package/dist/resources/skills/builtin/frontend-design/scripts/design_system.py +1643 -0
  101. package/dist/resources/skills/builtin/frontend-design/scripts/reasoning_contract.py +123 -0
  102. package/dist/resources/skills/builtin/frontend-design/scripts/search.py +171 -0
  103. package/dist/resources/skills/builtin/frontend-design/scripts/validate_data.py +1091 -0
  104. package/dist/resources/skills/builtin/kerja-agentik/SKILL.md +117 -0
  105. package/dist/resources/skills/builtin/pdf-maker/SKILL.md +51 -0
  106. package/dist/resources/skills/builtin/tinjau-keamanan/SKILL.md +53 -0
  107. package/dist/resources/skills/builtin/word-maker/SKILL.md +58 -0
  108. package/dist/resources/skills/builtin/write-swift/SKILL.md +388 -0
  109. package/package.json +35 -4
@@ -0,0 +1,533 @@
1
+ # Layout Systems Reference
2
+
3
+ ## Table of Contents
4
+ 1. Grid Frameworks
5
+ 2. Breakpoint Strategy
6
+ 3. Compositional Techniques
7
+ 4. Responsive Patterns
8
+ 5. Scroll-Based Layouts
9
+
10
+ ---
11
+
12
+ ## 1. Grid Frameworks
13
+
14
+ ### Base Grid System
15
+
16
+ ```css
17
+ /* 12-column fluid grid */
18
+ :root {
19
+ --grid-columns: 12;
20
+ --grid-gutter: clamp(1rem, 2vw, 2rem);
21
+ --grid-margin: clamp(1rem, 5vw, 6rem);
22
+ }
23
+
24
+ .grid {
25
+ display: grid;
26
+ grid-template-columns: repeat(var(--grid-columns), 1fr);
27
+ gap: var(--grid-gutter);
28
+ padding-inline: var(--grid-margin);
29
+ max-width: 1800px;
30
+ margin-inline: auto;
31
+ }
32
+
33
+ /* Span utilities */
34
+ .col-1 { grid-column: span 1; }
35
+ .col-2 { grid-column: span 2; }
36
+ .col-3 { grid-column: span 3; }
37
+ .col-4 { grid-column: span 4; }
38
+ .col-5 { grid-column: span 5; }
39
+ .col-6 { grid-column: span 6; }
40
+ .col-7 { grid-column: span 7; }
41
+ .col-8 { grid-column: span 8; }
42
+ .col-9 { grid-column: span 9; }
43
+ .col-10 { grid-column: span 10; }
44
+ .col-11 { grid-column: span 11; }
45
+ .col-12 { grid-column: span 12; }
46
+
47
+ /* Start position */
48
+ .start-1 { grid-column-start: 1; }
49
+ .start-2 { grid-column-start: 2; }
50
+ .start-3 { grid-column-start: 3; }
51
+ .start-4 { grid-column-start: 4; }
52
+ .start-5 { grid-column-start: 5; }
53
+ .start-6 { grid-column-start: 6; }
54
+ .start-7 { grid-column-start: 7; }
55
+ ```
56
+
57
+ ### Swiss/Modular Grid
58
+
59
+ ```css
60
+ /* Swiss-style asymmetric grid */
61
+ .swiss-grid {
62
+ display: grid;
63
+ grid-template-columns:
64
+ [full-start] var(--grid-margin)
65
+ [content-start] 2fr
66
+ [sidebar-start] 1fr
67
+ [sidebar-end] var(--grid-margin)
68
+ [full-end];
69
+ gap: var(--grid-gutter);
70
+ }
71
+
72
+ /* Named grid areas for Swiss compositions */
73
+ .swiss-layout {
74
+ display: grid;
75
+ grid-template-columns: 1fr 1fr 2fr;
76
+ grid-template-rows: auto 1fr auto;
77
+ grid-template-areas:
78
+ "header header header"
79
+ "nav main main"
80
+ "footer footer footer";
81
+ min-height: 100vh;
82
+ }
83
+ ```
84
+
85
+ ### Editorial Grid
86
+
87
+ ```css
88
+ /* Magazine-style editorial grid */
89
+ .editorial-grid {
90
+ display: grid;
91
+ grid-template-columns:
92
+ [full-start] minmax(var(--grid-margin), 1fr)
93
+ [wide-start] minmax(0, 200px)
94
+ [content-start] min(65ch, 100%)
95
+ [content-end] minmax(0, 200px)
96
+ [wide-end] minmax(var(--grid-margin), 1fr)
97
+ [full-end];
98
+ }
99
+
100
+ .editorial-grid > * {
101
+ grid-column: content;
102
+ }
103
+
104
+ .editorial-grid > .wide {
105
+ grid-column: wide;
106
+ }
107
+
108
+ .editorial-grid > .full {
109
+ grid-column: full;
110
+ }
111
+ ```
112
+
113
+ ---
114
+
115
+ ## 2. Breakpoint Strategy
116
+
117
+ ### Fluid-First Approach
118
+
119
+ ```css
120
+ /* Minimal breakpoints - rely on fluid sizing */
121
+ :root {
122
+ /* Only break when necessary */
123
+ --bp-sm: 640px; /* Mobile landscape */
124
+ --bp-md: 768px; /* Tablet */
125
+ --bp-lg: 1024px; /* Desktop */
126
+ --bp-xl: 1280px; /* Large desktop */
127
+ --bp-2xl: 1536px; /* Ultra-wide */
128
+ }
129
+
130
+ /* Media query mixins (conceptual) */
131
+ @media (min-width: 768px) { /* Tablet and up */ }
132
+ @media (min-width: 1024px) { /* Desktop and up */ }
133
+ @media (min-width: 1280px) { /* Large screens */ }
134
+
135
+ /* Container queries for component-level responsiveness */
136
+ .card-container {
137
+ container-type: inline-size;
138
+ container-name: card;
139
+ }
140
+
141
+ @container card (min-width: 400px) {
142
+ .card {
143
+ flex-direction: row;
144
+ }
145
+ }
146
+ ```
147
+
148
+ ### Responsive Grid Columns
149
+
150
+ ```css
151
+ /* Responsive column spans */
152
+ .responsive-grid {
153
+ display: grid;
154
+ grid-template-columns: repeat(4, 1fr);
155
+ gap: var(--grid-gutter);
156
+ }
157
+
158
+ @media (min-width: 768px) {
159
+ .responsive-grid {
160
+ grid-template-columns: repeat(8, 1fr);
161
+ }
162
+ }
163
+
164
+ @media (min-width: 1024px) {
165
+ .responsive-grid {
166
+ grid-template-columns: repeat(12, 1fr);
167
+ }
168
+ }
169
+
170
+ /* Responsive item */
171
+ .grid-item {
172
+ grid-column: span 4; /* Full width mobile */
173
+ }
174
+
175
+ @media (min-width: 768px) {
176
+ .grid-item {
177
+ grid-column: span 4; /* Half width tablet */
178
+ }
179
+ }
180
+
181
+ @media (min-width: 1024px) {
182
+ .grid-item {
183
+ grid-column: span 3; /* Quarter width desktop */
184
+ }
185
+ }
186
+ ```
187
+
188
+ ---
189
+
190
+ ## 3. Compositional Techniques
191
+
192
+ ### Asymmetric Balance
193
+
194
+ ```css
195
+ /* Intentionally unbalanced layout */
196
+ .asymmetric-hero {
197
+ display: grid;
198
+ grid-template-columns: 2fr 3fr;
199
+ gap: var(--grid-gutter);
200
+ align-items: end;
201
+ }
202
+
203
+ .asymmetric-hero .title {
204
+ grid-column: 1;
205
+ /* Offset from grid alignment */
206
+ margin-left: -5%;
207
+ }
208
+
209
+ .asymmetric-hero .media {
210
+ grid-column: 2;
211
+ /* Extend beyond grid */
212
+ margin-right: calc(var(--grid-margin) * -1);
213
+ }
214
+ ```
215
+
216
+ ### Overlap & Layer
217
+
218
+ ```css
219
+ /* Overlapping elements */
220
+ .overlap-composition {
221
+ display: grid;
222
+ grid-template-columns: repeat(12, 1fr);
223
+ grid-template-rows: repeat(6, 1fr);
224
+ }
225
+
226
+ .overlap-composition .image {
227
+ grid-column: 1 / 8;
228
+ grid-row: 1 / 5;
229
+ z-index: 1;
230
+ }
231
+
232
+ .overlap-composition .text-block {
233
+ grid-column: 6 / 13;
234
+ grid-row: 3 / 7;
235
+ z-index: 2;
236
+ background: var(--color-surface);
237
+ padding: 2rem;
238
+ }
239
+ ```
240
+
241
+ ### Bleeding Elements
242
+
243
+ ```css
244
+ /* Elements that break container */
245
+ .bleed-container {
246
+ max-width: 1200px;
247
+ margin-inline: auto;
248
+ padding-inline: var(--grid-margin);
249
+ }
250
+
251
+ .bleed-left {
252
+ margin-left: calc(var(--grid-margin) * -1);
253
+ padding-left: var(--grid-margin);
254
+ /* Or extend to viewport edge */
255
+ margin-left: calc(-50vw + 50%);
256
+ padding-left: calc(50vw - 50%);
257
+ }
258
+
259
+ .bleed-right {
260
+ margin-right: calc(var(--grid-margin) * -1);
261
+ padding-right: var(--grid-margin);
262
+ }
263
+
264
+ .bleed-full {
265
+ width: 100vw;
266
+ margin-left: calc(-50vw + 50%);
267
+ }
268
+ ```
269
+
270
+ ### Diagonal/Angular Layouts
271
+
272
+ ```css
273
+ /* Angled section divider */
274
+ .angled-section {
275
+ position: relative;
276
+ padding: 8rem 0;
277
+ }
278
+
279
+ .angled-section::before {
280
+ content: '';
281
+ position: absolute;
282
+ top: 0;
283
+ left: 0;
284
+ right: 0;
285
+ height: 100%;
286
+ background: var(--color-accent);
287
+ clip-path: polygon(0 10%, 100% 0, 100% 90%, 0 100%);
288
+ z-index: -1;
289
+ }
290
+
291
+ /* Skewed container */
292
+ .skewed-container {
293
+ transform: skewY(-3deg);
294
+ padding: 6rem 0;
295
+ }
296
+
297
+ .skewed-container > * {
298
+ transform: skewY(3deg); /* Counter-skew content */
299
+ }
300
+ ```
301
+
302
+ ---
303
+
304
+ ## 4. Responsive Patterns
305
+
306
+ ### Mobile-First Hero
307
+
308
+ ```css
309
+ /* Hero that works mobile-first */
310
+ .hero {
311
+ min-height: 100svh;
312
+ display: flex;
313
+ flex-direction: column;
314
+ justify-content: flex-end;
315
+ padding: var(--grid-margin);
316
+ padding-bottom: 15vh;
317
+ }
318
+
319
+ .hero-title {
320
+ font-size: clamp(3rem, 10vw, 12rem);
321
+ line-height: 0.9;
322
+ margin-bottom: 1rem;
323
+ }
324
+
325
+ .hero-media {
326
+ position: absolute;
327
+ inset: 0;
328
+ z-index: -1;
329
+ }
330
+
331
+ @media (min-width: 1024px) {
332
+ .hero {
333
+ display: grid;
334
+ grid-template-columns: 1fr 1fr;
335
+ align-items: end;
336
+ gap: var(--grid-gutter);
337
+ }
338
+
339
+ .hero-title {
340
+ grid-column: 1 / -1;
341
+ }
342
+ }
343
+ ```
344
+
345
+ ### Responsive Card Grid
346
+
347
+ ```css
348
+ /* Auto-fit responsive grid */
349
+ .card-grid {
350
+ display: grid;
351
+ grid-template-columns: repeat(
352
+ auto-fit,
353
+ minmax(min(100%, 300px), 1fr)
354
+ );
355
+ gap: var(--grid-gutter);
356
+ }
357
+
358
+ /* Or with explicit breakpoints for control */
359
+ .card-grid-controlled {
360
+ display: grid;
361
+ gap: var(--grid-gutter);
362
+ grid-template-columns: 1fr; /* Mobile: 1 column */
363
+ }
364
+
365
+ @media (min-width: 640px) {
366
+ .card-grid-controlled {
367
+ grid-template-columns: repeat(2, 1fr);
368
+ }
369
+ }
370
+
371
+ @media (min-width: 1024px) {
372
+ .card-grid-controlled {
373
+ grid-template-columns: repeat(3, 1fr);
374
+ }
375
+ }
376
+
377
+ @media (min-width: 1280px) {
378
+ .card-grid-controlled {
379
+ grid-template-columns: repeat(4, 1fr);
380
+ }
381
+ }
382
+ ```
383
+
384
+ ### Responsive Typography Layout
385
+
386
+ ```css
387
+ /* Two-column text layout */
388
+ .text-columns {
389
+ columns: 1;
390
+ }
391
+
392
+ @media (min-width: 768px) {
393
+ .text-columns {
394
+ columns: 2;
395
+ column-gap: var(--grid-gutter);
396
+ }
397
+ }
398
+
399
+ /* Prevent breaks */
400
+ .text-columns h2,
401
+ .text-columns h3,
402
+ .text-columns figure {
403
+ break-inside: avoid;
404
+ }
405
+ ```
406
+
407
+ ---
408
+
409
+ ## 5. Scroll-Based Layouts
410
+
411
+ ### Horizontal Scroll Section
412
+
413
+ ```css
414
+ .horizontal-scroll {
415
+ display: flex;
416
+ overflow-x: auto;
417
+ scroll-snap-type: x mandatory;
418
+ scrollbar-width: none;
419
+ -ms-overflow-style: none;
420
+ }
421
+
422
+ .horizontal-scroll::-webkit-scrollbar {
423
+ display: none;
424
+ }
425
+
426
+ .horizontal-scroll-item {
427
+ flex: 0 0 80vw;
428
+ scroll-snap-align: center;
429
+ padding: 0 2vw;
430
+ }
431
+
432
+ @media (min-width: 1024px) {
433
+ .horizontal-scroll-item {
434
+ flex: 0 0 40vw;
435
+ }
436
+ }
437
+ ```
438
+
439
+ ### Sticky Sidebar
440
+
441
+ ```css
442
+ .sticky-layout {
443
+ display: grid;
444
+ grid-template-columns: 1fr 300px;
445
+ gap: var(--grid-gutter);
446
+ align-items: start;
447
+ }
448
+
449
+ .sticky-sidebar {
450
+ position: sticky;
451
+ top: var(--grid-margin);
452
+ }
453
+
454
+ /* Full-height sticky */
455
+ .sticky-full {
456
+ position: sticky;
457
+ top: 0;
458
+ height: 100vh;
459
+ overflow-y: auto;
460
+ }
461
+ ```
462
+
463
+ ### Scroll-Triggered Layout Changes
464
+
465
+ ```css
466
+ /* Layout shifts based on scroll position */
467
+ .scroll-layout {
468
+ --scroll-progress: 0;
469
+
470
+ display: grid;
471
+ grid-template-columns:
472
+ calc(30% + (20% * var(--scroll-progress)))
473
+ 1fr;
474
+ transition: grid-template-columns 0.1s;
475
+ }
476
+
477
+ /* JS updates --scroll-progress from 0 to 1 */
478
+ ```
479
+
480
+ ### Pinned Section with Content Scroll
481
+
482
+ ```css
483
+ /* Two-panel layout with one side pinned */
484
+ .pinned-layout {
485
+ display: grid;
486
+ grid-template-columns: 1fr 1fr;
487
+ }
488
+
489
+ .pinned-panel {
490
+ position: sticky;
491
+ top: 0;
492
+ height: 100vh;
493
+ display: flex;
494
+ align-items: center;
495
+ justify-content: center;
496
+ }
497
+
498
+ .scrolling-panel {
499
+ /* Content scrolls naturally */
500
+ }
501
+
502
+ .scrolling-panel section {
503
+ min-height: 100vh;
504
+ display: flex;
505
+ flex-direction: column;
506
+ justify-content: center;
507
+ padding: var(--grid-margin);
508
+ }
509
+ ```
510
+
511
+ ---
512
+
513
+ ## Layout Anti-Patterns
514
+
515
+ ```
516
+ AVOID THESE:
517
+ ✗ Fixed pixel widths (use max-width instead)
518
+ ✗ Magic numbers without explanation
519
+ ✗ Breaking grid without clear purpose
520
+ ✗ Horizontal scroll without indication
521
+ ✗ Content touching viewport edges on mobile
522
+ ✗ Equal margins everywhere (creates boredom)
523
+ ✗ Centered everything (lacks visual tension)
524
+
525
+ PREFER THESE:
526
+ ✓ Fluid units (%, vw, clamp())
527
+ ✓ CSS custom properties for spacing
528
+ ✓ Intentional grid breaks with rationale
529
+ ✓ Touch-friendly scroll indicators
530
+ ✓ Consistent edge margins with breathing room
531
+ ✓ Varied spacing for rhythm
532
+ ✓ Asymmetric compositions for interest
533
+ ```
@@ -0,0 +1,72 @@
1
+
2
+ # Picking The Right Library
3
+
4
+ A lookup reference. When the task needs a library ("I need toasts", "what should I use for drag and drop?"), match the task to the curated list below and recommend the library. These are deliberate, taste-driven picks — don't substitute alternatives outside this list unless the user asks for one or the task genuinely isn't covered.
5
+
6
+ ## How to use this
7
+
8
+ 1. **Identify the task**, not the library the user named. "I need to show a dropdown" is a UI-primitives task (base-ui), even if they asked about something else.
9
+ 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.
10
+ 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.
11
+ 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.
12
+
13
+ ## The list
14
+
15
+ ### UI components & primitives
16
+
17
+ | Task | Library |
18
+ | --- | --- |
19
+ | Unstyled, accessible UI components (dialogs, popovers, menus, selects…) | [base-ui](https://base-ui.com) |
20
+ | Command menus (⌘K palettes) | [cmdk](https://cmdk.paco.me) |
21
+ | Toasts / notifications | [Sonner](https://sonner.emilkowal.ski) — usage guide in [sonner.md](sonner.md) |
22
+ | One-time password / verification code inputs | [input-otp](https://input-otp.rodz.dev) |
23
+ | Customizable GUIs / control panels | [Leva](https://github.com/pmndrs/leva) — [dialkit](https://joshpuckett.me/dialkit) is an alternative |
24
+
25
+ ### Motion & visuals
26
+
27
+ | Task | Library |
28
+ | --- | --- |
29
+ | General-purpose animation (springs, layout animations, enter/exit) | [motion](https://motion.dev) (Framer Motion) |
30
+ | Animating numbers (counters, prices, stats) | [NumberFlow](https://number-flow.barvian.me) |
31
+ | Animated text components | [torph](https://torph.lochie.me/) |
32
+ | 3D globes | [Cobe](https://cobe.vercel.app) |
33
+ | Dynamic OG images (HTML/CSS → SVG/PNG) | [Satori](https://github.com/vercel/satori) |
34
+ | Syntax highlighting | [shiki](https://shiki.style) |
35
+
36
+ Reach for motion when you need springs, layout animations, exit animations, or gesture-driven values. A simple hover or fade doesn't need it — plain CSS transitions are the right tool there.
37
+
38
+ ### Charts
39
+
40
+ | Task | Library |
41
+ | --- | --- |
42
+ | Real-time / streaming charts | [Liveline](https://github.com/benjitaylor/liveline) |
43
+ | General charts (static or interactive dashboards) | [recharts](https://recharts.org) |
44
+
45
+ The split: if data points arrive live and the chart scrolls with time, use Liveline. Everything else is recharts.
46
+
47
+ ### Interaction & performance
48
+
49
+ | Task | Library |
50
+ | --- | --- |
51
+ | Drag and drop | [dnd kit](https://dndkit.com) |
52
+ | Virtualization (long lists, large tables) | [Virtuoso](https://virtuoso.dev) |
53
+
54
+ ### State & styling
55
+
56
+ | Task | Library |
57
+ | --- | --- |
58
+ | State management | [zustand](https://zustand.docs.pmnd.rs) |
59
+ | Constructing `className` strings conditionally | [clsx](https://github.com/lukeed/clsx) |
60
+ | Type-safe, variant-driven styling for Tailwind | [cva](https://cva.style) |
61
+ | Theme switching / dark mode (no flash on load) | [next-themes](https://github.com/pacocoursey/next-themes) |
62
+
63
+ The styling split: clsx for ad-hoc conditional classes; cva when a component has real variants (size, intent, state) that deserve a typed API. They compose — cva uses clsx-style inputs internally.
64
+
65
+ ## Common mismatches to catch
66
+
67
+ - **Toasts built by hand or with a modal library** → Sonner exists for exactly this.
68
+ - **A `<div>`-based dropdown/dialog with manual focus handling** → base-ui, which handles accessibility, focus trapping, and dismissal.
69
+ - **Animating a number by re-rendering text** → NumberFlow handles digit transitions properly.
70
+ - **Rendering a 1,000+ row list directly** → Virtuoso before reaching for pagination hacks.
71
+ - **A `useState`-per-component web of props for shared state** → zustand.
72
+ - **Template-literal className ternaries three conditions deep** → clsx (or cva if it's variant-shaped).