loopwind 0.9.1 → 0.9.3

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 (110) hide show
  1. package/FONTS.md +13 -13
  2. package/HELPERS_DEMO.md +2 -2
  3. package/PROJECT_STRUCTURE.md +38 -38
  4. package/PUBLISHING.md +13 -13
  5. package/README.md +71 -71
  6. package/REGISTRY_SETUP.md +18 -18
  7. package/SHADCN_INTEGRATION.md +7 -7
  8. package/TAILWIND.md +4 -4
  9. package/TEMPLATE_SOURCES.md +30 -30
  10. package/dist/lib/renderer.js +15 -15
  11. package/dist/lib/renderer.js.map +1 -1
  12. package/dist/lib/tailwind-detector.js +1 -1
  13. package/dist/lib/tailwind-detector.js.map +1 -1
  14. package/dist/lib/tailwind.d.ts +1 -1
  15. package/dist/lib/tailwind.d.ts.map +1 -1
  16. package/dist/lib/tailwind.js +19 -19
  17. package/dist/lib/tailwind.js.map +1 -1
  18. package/dist/lib/template-validator.js +1 -1
  19. package/dist/lib/template-validator.js.map +1 -1
  20. package/examples/nextjs-api/README.md +6 -6
  21. package/examples/nextjs-api/pages/api/intro-video.ts +1 -1
  22. package/examples/nextjs-api/pages/api/og-image.ts +2 -2
  23. package/package.json +2 -3
  24. package/test-templates/TESTS.md +1 -1
  25. package/test-templates/test-sdk.mjs +2 -2
  26. package/website/README.md +2 -2
  27. package/website/astro.config.mjs +1 -1
  28. package/website/package-lock.json +186 -2480
  29. package/website/package.json +1 -1
  30. package/website/public/robots.txt +1 -1
  31. package/_dsgn/templates/banner-hero/banner-hero.tsx +0 -57
  32. package/_dsgn/templates/banner-hero/meta.json +0 -14
  33. package/_dsgn/templates/composite-card/meta.json +0 -16
  34. package/_dsgn/templates/composite-card/template.tsx +0 -44
  35. package/_dsgn/templates/image/meta.json +0 -13
  36. package/_dsgn/templates/image/template.tsx +0 -28
  37. package/_dsgn/templates/kitchen-sink/meta.json +0 -13
  38. package/_dsgn/templates/kitchen-sink/template.tsx +0 -72
  39. package/_dsgn/templates/qr-card/meta.json +0 -14
  40. package/_dsgn/templates/qr-card/template.tsx +0 -39
  41. package/_dsgn/templates/test-parent/child/meta.json +0 -11
  42. package/_dsgn/templates/test-parent/child/template.tsx +0 -27
  43. package/_dsgn/templates/test-parent/meta.json +0 -12
  44. package/_dsgn/templates/test-parent/template.tsx +0 -30
  45. package/_dsgn/templates/test-sibling/meta.json +0 -11
  46. package/_dsgn/templates/test-sibling/template.tsx +0 -20
  47. package/_dsgn/templates/video/.tmp/template-1763421345296.mjs +0 -43
  48. package/_dsgn/templates/video/.tmp/template-1763421362228.mjs +0 -43
  49. package/_dsgn/templates/video/.tmp/template-1763421377706.mjs +0 -43
  50. package/_dsgn/templates/video/meta.json +0 -17
  51. package/_dsgn/templates/video/template.tsx +0 -48
  52. package/test-templates/_dsgn/templates/absolute-spin/meta.json +0 -7
  53. package/test-templates/_dsgn/templates/absolute-spin/template.tsx +0 -16
  54. package/test-templates/_dsgn/templates/animated-intro/.tmp/template-1763468771640.mjs +0 -7
  55. package/test-templates/_dsgn/templates/animated-intro/meta.json +0 -10
  56. package/test-templates/_dsgn/templates/animated-intro/template.tsx +0 -23
  57. package/test-templates/_dsgn/templates/centered-spin/.tmp/template-1763468525386.mjs +0 -7
  58. package/test-templates/_dsgn/templates/centered-spin/meta.json +0 -7
  59. package/test-templates/_dsgn/templates/centered-spin/template.tsx +0 -11
  60. package/test-templates/_dsgn/templates/composite/.tmp/template-1763468815645.mjs +0 -7
  61. package/test-templates/_dsgn/templates/composite/meta.json +0 -9
  62. package/test-templates/_dsgn/templates/composite/template.tsx +0 -23
  63. package/test-templates/_dsgn/templates/easing-test/.tmp/template-1763468824501.mjs +0 -7
  64. package/test-templates/_dsgn/templates/easing-test/meta.json +0 -7
  65. package/test-templates/_dsgn/templates/easing-test/template.tsx +0 -47
  66. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466364336.mjs +0 -10
  67. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466584319.mjs +0 -10
  68. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466667797.mjs +0 -10
  69. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466746504.mjs +0 -10
  70. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466930225.mjs +0 -10
  71. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467004552.mjs +0 -10
  72. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467060334.mjs +0 -10
  73. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467124493.mjs +0 -10
  74. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467174690.mjs +0 -10
  75. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467359134.mjs +0 -10
  76. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467451928.mjs +0 -10
  77. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467758275.mjs +0 -10
  78. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467985201.mjs +0 -10
  79. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468020563.mjs +0 -10
  80. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468090428.mjs +0 -10
  81. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468211036.mjs +0 -10
  82. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468394057.mjs +0 -10
  83. package/test-templates/_dsgn/templates/minimal-spin/meta.json +0 -7
  84. package/test-templates/_dsgn/templates/minimal-spin/template.tsx +0 -13
  85. package/test-templates/_dsgn/templates/no-origin-spin/meta.json +0 -7
  86. package/test-templates/_dsgn/templates/no-origin-spin/template.tsx +0 -10
  87. package/test-templates/_dsgn/templates/opacity-test/meta.json +0 -7
  88. package/test-templates/_dsgn/templates/opacity-test/template.tsx +0 -9
  89. package/test-templates/_dsgn/templates/qr-code/.tmp/template-1763468758954.mjs +0 -17
  90. package/test-templates/_dsgn/templates/qr-code/.tmp/template-1763468815672.mjs +0 -17
  91. package/test-templates/_dsgn/templates/qr-code/meta.json +0 -9
  92. package/test-templates/_dsgn/templates/qr-code/template.tsx +0 -20
  93. package/test-templates/_dsgn/templates/rotation-abs-test/meta.json +0 -7
  94. package/test-templates/_dsgn/templates/rotation-abs-test/template.tsx +0 -15
  95. package/test-templates/_dsgn/templates/rotation-corner/meta.json +0 -7
  96. package/test-templates/_dsgn/templates/rotation-corner/template.tsx +0 -12
  97. package/test-templates/_dsgn/templates/rotation-test/meta.json +0 -7
  98. package/test-templates/_dsgn/templates/rotation-test/template.tsx +0 -12
  99. package/test-templates/_dsgn/templates/shake-test/meta.json +0 -7
  100. package/test-templates/_dsgn/templates/shake-test/template.tsx +0 -12
  101. package/test-templates/_dsgn/templates/static-image/.tmp/template-1763468746271.mjs +0 -7
  102. package/test-templates/_dsgn/templates/static-image/meta.json +0 -9
  103. package/test-templates/_dsgn/templates/static-image/template.tsx +0 -19
  104. package/test-templates/_dsgn/templates/translate-test/meta.json +0 -7
  105. package/test-templates/_dsgn/templates/translate-test/template.tsx +0 -9
  106. package/test-templates/_dsgn/templates/video-loops/.tmp/template-1763468793192.mjs +0 -15
  107. package/test-templates/_dsgn/templates/video-loops/meta.json +0 -9
  108. package/test-templates/_dsgn/templates/video-loops/template.tsx +0 -39
  109. package/test-templates/_dsgn/templates/wrapped-spin/meta.json +0 -7
  110. package/test-templates/_dsgn/templates/wrapped-spin/template.tsx +0 -17
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # dsgn
1
+ # loopwind
2
2
 
3
3
  > The Shadcn for design and marketing. A template-based CLI tool for generating images and videos using React + Tailwind CSS + Satori.
4
4
 
@@ -13,7 +13,7 @@
13
13
  - ✅ **Smart Validation**: Automatic prop and template validation with helpful error messages
14
14
  - 🚀 **Framework-agnostic**: Works with Node, Bun, Deno, Laravel, Python, and more
15
15
  - 🤖 **Agent-friendly**: Machine-readable metadata for LLMs
16
- - 📦 **Easy installation**: `npx dsgn add template-name`
16
+ - 📦 **Easy installation**: `npx loopwind add template-name`
17
17
  - 🌐 **Pure JavaScript/WASM**: No native dependencies, works everywhere
18
18
 
19
19
  ## Quick Start
@@ -21,13 +21,13 @@
21
21
  ### Installation
22
22
 
23
23
  ```bash
24
- npm install -g dsgn
24
+ npm install -g loopwind
25
25
  ```
26
26
 
27
27
  Or use with npx:
28
28
 
29
29
  ```bash
30
- npx dsgn --help
30
+ npx loopwind --help
31
31
  ```
32
32
 
33
33
  ### Install a Template
@@ -37,21 +37,21 @@ Templates can be installed from multiple sources:
37
37
  #### 1. Official Registry (Coming Soon)
38
38
 
39
39
  ```bash
40
- dsgn add banner-hero
41
- dsgn add og-image --registry https://custom-registry.com/r
40
+ loopwind add banner-hero
41
+ loopwind add og-image --registry https://custom-registry.com/r
42
42
  ```
43
43
 
44
44
  #### 2. GitHub Repositories
45
45
 
46
46
  ```bash
47
47
  # From a GitHub repo (looks for template.json in repo root)
48
- dsgn add github:username/repo
48
+ loopwind add github:username/repo
49
49
 
50
50
  # From a specific path in the repo
51
- dsgn add github:username/repo/templates/banner-hero
51
+ loopwind add github:username/repo/templates/banner-hero
52
52
 
53
53
  # From an organization
54
- dsgn add github:myorg/design-templates/social-media/og-image
54
+ loopwind add github:myorg/design-templates/social-media/og-image
55
55
  ```
56
56
 
57
57
  **How it works:**
@@ -64,8 +64,8 @@ dsgn add github:myorg/design-templates/social-media/og-image
64
64
 
65
65
  ```bash
66
66
  # Install from any publicly accessible URL
67
- dsgn add https://example.com/templates/my-template.json
68
- dsgn add https://cdn.example.com/templates/awesome-banner.json
67
+ loopwind add https://example.com/templates/my-template.json
68
+ loopwind add https://cdn.example.com/templates/awesome-banner.json
69
69
  ```
70
70
 
71
71
  **Requirements:**
@@ -76,11 +76,11 @@ dsgn add https://cdn.example.com/templates/awesome-banner.json
76
76
 
77
77
  ```bash
78
78
  # Relative path
79
- dsgn add ./my-templates/banner-hero
80
- dsgn add ../shared-templates/product-card
79
+ loopwind add ./my-templates/banner-hero
80
+ loopwind add ../shared-templates/product-card
81
81
 
82
82
  # Absolute path
83
- dsgn add /Users/you/templates/social-card
83
+ loopwind add /Users/you/templates/social-card
84
84
  ```
85
85
 
86
86
  **Use cases:**
@@ -89,7 +89,7 @@ dsgn add /Users/you/templates/social-card
89
89
  - Shared team templates (monorepo)
90
90
  - Before publishing to registry
91
91
 
92
- Templates are installed to: `_dsgn/templates/<template>/` (customizable in `dsgn.json`)
92
+ Templates are installed to: `_loopwind/templates/<template>/` (customizable in `loopwind.json`)
93
93
 
94
94
  **Benefits:**
95
95
  - Templates are local to your project (like npm packages)
@@ -103,17 +103,17 @@ See `REGISTRY_SETUP.md` to create your own registry.
103
103
  ### Render an Image
104
104
 
105
105
  ```bash
106
- dsgn render banner-hero \
107
- --props '{"title":"Hello World","subtitle":"Welcome to dsgn"}'
106
+ loopwind render banner-hero \
107
+ --props '{"title":"Hello World","subtitle":"Welcome to loopwind"}'
108
108
  ```
109
109
 
110
- By default, images are saved to `dsgn/outputs/` in your current project.
110
+ By default, images are saved to `_loopwind/outputs/` in your current project.
111
111
 
112
112
  You can specify a custom output path:
113
113
 
114
114
  ```bash
115
- dsgn render banner-hero \
116
- --props '{"title":"Hello World","subtitle":"Welcome to dsgn"}' \
115
+ loopwind render banner-hero \
116
+ --props '{"title":"Hello World","subtitle":"Welcome to loopwind"}' \
117
117
  --out custom/path/banner.png
118
118
  ```
119
119
 
@@ -123,26 +123,26 @@ Or use a props file:
123
123
  # props.json
124
124
  {
125
125
  "title": "Hello World",
126
- "subtitle": "Welcome to dsgn"
126
+ "subtitle": "Welcome to loopwind"
127
127
  }
128
128
 
129
- dsgn render banner-hero --props props.json --out banner.png
129
+ loopwind render banner-hero --props props.json --out banner.png
130
130
  ```
131
131
 
132
132
  **Output formats:**
133
133
 
134
134
  ```bash
135
135
  # PNG (default) - best for photos and complex gradients
136
- dsgn render banner-hero --props props.json --format png -o banner.png
136
+ loopwind render banner-hero --props props.json --format png -o banner.png
137
137
 
138
138
  # SVG - scalable vector, smaller file size, perfect for template composition
139
- dsgn render banner-hero --props props.json --format svg -o banner.svg
139
+ loopwind render banner-hero --props props.json --format svg -o banner.svg
140
140
 
141
141
  # WebP - modern format, smaller than PNG with similar quality
142
- dsgn render banner-hero --props props.json --format webp -o banner.webp
142
+ loopwind render banner-hero --props props.json --format webp -o banner.webp
143
143
 
144
144
  # JPEG - smallest file size, good for photos
145
- dsgn render banner-hero --props props.json --format jpg -o banner.jpg
145
+ loopwind render banner-hero --props props.json --format jpg -o banner.jpg
146
146
  ```
147
147
 
148
148
  **SVG benefits with template composition:**
@@ -154,30 +154,30 @@ dsgn render banner-hero --props props.json --format jpg -o banner.jpg
154
154
  ### List Installed Templates
155
155
 
156
156
  ```bash
157
- dsgn list
157
+ loopwind list
158
158
  ```
159
159
 
160
160
  ### Validate Templates
161
161
 
162
162
  ```bash
163
- dsgn validate
164
- dsgn validate banner-hero
163
+ loopwind validate
164
+ loopwind validate banner-hero
165
165
  ```
166
166
 
167
167
  ## SDK for Programmatic Use
168
168
 
169
- Use **dsgn** programmatically in your Next.js API routes, serverless functions, or Node.js applications!
169
+ Use **loopwind** programmatically in your Next.js API routes, serverless functions, or Node.js applications!
170
170
 
171
171
  ### Installation
172
172
 
173
173
  ```bash
174
- npm install dsgn
174
+ npm install loopwind
175
175
  ```
176
176
 
177
177
  ### Quick Example
178
178
 
179
179
  ```typescript
180
- import { defineTemplate, renderImage } from 'dsgn/sdk';
180
+ import { defineTemplate, renderImage } from 'loopwind/sdk';
181
181
 
182
182
  // Define template programmatically
183
183
  const ogTemplate = defineTemplate({
@@ -194,7 +194,7 @@ const ogTemplate = defineTemplate({
194
194
  // Render to buffer
195
195
  const png = await renderImage(ogTemplate, {
196
196
  title: 'Hello World',
197
- description: 'Generated with dsgn SDK',
197
+ description: 'Generated with loopwind SDK',
198
198
  });
199
199
 
200
200
  // Use in Next.js API route
@@ -208,7 +208,7 @@ export default async function handler(req, res) {
208
208
  ### Video Rendering
209
209
 
210
210
  ```typescript
211
- import { defineTemplate, renderVideo } from 'dsgn/sdk';
211
+ import { defineTemplate, renderVideo } from 'loopwind/sdk';
212
212
 
213
213
  const introTemplate = defineTemplate({
214
214
  name: 'intro-video',
@@ -253,7 +253,7 @@ See the full example in [`examples/nextjs-api/`](examples/nextjs-api/)
253
253
 
254
254
  ```typescript
255
255
  // pages/api/og-image.ts
256
- import { defineTemplate, renderImage } from 'dsgn/sdk';
256
+ import { defineTemplate, renderImage } from 'loopwind/sdk';
257
257
 
258
258
  const template = defineTemplate({
259
259
  name: 'og-image',
@@ -280,7 +280,7 @@ https://yoursite.com/api/og-image?title=Hello+World
280
280
 
281
281
  ## shadcn/ui Design System
282
282
 
283
- dsgn uses **shadcn/ui's design system** by default! All templates have access to semantic color tokens:
283
+ loopwind uses **shadcn/ui's design system** by default! All templates have access to semantic color tokens:
284
284
 
285
285
  ```tsx
286
286
  // Use shadcn colors in templates
@@ -293,21 +293,21 @@ dsgn uses **shadcn/ui's design system** by default! All templates have access to
293
293
  **Supported shadcn classes:**
294
294
  - `text-primary`, `bg-secondary`, `text-muted-foreground`, `bg-card`, `border`, `bg-destructive`
295
295
  - **Opacity modifiers**: `bg-primary/50`, `text-muted-foreground/75`, `border/30`
296
- - **Dark mode ready**: Override colors in `dsgn.json`
296
+ - **Dark mode ready**: Override colors in `loopwind.json`
297
297
 
298
298
  See `SHADCN_INTEGRATION.md` for complete documentation.
299
299
 
300
- ## Configuration (dsgn.json)
300
+ ## Configuration (loopwind.json)
301
301
 
302
- Templates automatically use your project's design tokens defined in `dsgn.json`. This allows generated images to match your brand colors and design system.
302
+ Templates automatically use your project's design tokens defined in `loopwind.json`. This allows generated images to match your brand colors and design system.
303
303
 
304
304
  ### Initialize Config
305
305
 
306
306
  ```bash
307
- dsgn init
307
+ loopwind init
308
308
  ```
309
309
 
310
- This creates a `dsgn.json` file in your project:
310
+ This creates a `loopwind.json` file in your project:
311
311
 
312
312
  ```json
313
313
  {
@@ -389,7 +389,7 @@ Combine with custom styles:
389
389
 
390
390
  ### Automatic Tailwind Config Support
391
391
 
392
- **dsgn automatically detects and uses your `tailwind.config.js`!**
392
+ **loopwind automatically detects and uses your `tailwind.config.js`!**
393
393
 
394
394
  If you have a Tailwind project:
395
395
 
@@ -423,7 +423,7 @@ Your templates can use these values:
423
423
 
424
424
  **Config priority:**
425
425
  1. `tailwind.config.js` (if exists)
426
- 2. `dsgn.json` (fallback)
426
+ 2. `loopwind.json` (fallback)
427
427
  3. Default Tailwind values
428
428
 
429
429
  **Supported classes:**
@@ -435,7 +435,7 @@ Your templates can use these values:
435
435
  - shadcn/ui colors: `bg-card`, `text-foreground`, `text-muted-foreground`
436
436
  - Opacity modifiers: `bg-primary/50`, `text-muted-foreground/75`
437
437
 
438
- **Note:** Tailwind v4 uses CSS variables instead of JS config. We're working on CSS parsing support. For now, use `dsgn.json` or `tailwind.config.js` (v3 format).
438
+ **Note:** Tailwind v4 uses CSS variables instead of JS config. We're working on CSS parsing support. For now, use `loopwind.json` or `tailwind.config.js` (v3 format).
439
439
 
440
440
  ## Fonts
441
441
 
@@ -494,7 +494,7 @@ Templates have access to built-in helper functions:
494
494
  - **`image(propKey)`** - Embed images as data URIs
495
495
  - **`video(propKey)`** - Embed video frames (for video templates)
496
496
  - **`template(name, props)`** - Embed other templates
497
- - **`config`** - Access dsgn.json configuration
497
+ - **`config`** - Access loopwind.json configuration
498
498
 
499
499
  ### QR Code Helper
500
500
 
@@ -517,9 +517,9 @@ export default function Template({ title, url, qr, tw }) {
517
517
 
518
518
  **Usage:**
519
519
  ```bash
520
- dsgn render qr-card '{
520
+ loopwind render qr-card '{
521
521
  "title": "Visit Our Website",
522
- "url": "https://dsgncli.com"
522
+ "url": "https://loopwind.dev"
523
523
  }'
524
524
  ```
525
525
 
@@ -573,7 +573,7 @@ export default function Banner({ background, tw, image }) {
573
573
 
574
574
  **Usage:**
575
575
  ```bash
576
- dsgn render banner '{
576
+ loopwind render banner '{
577
577
  "background": "./my-background.jpg"
578
578
  }'
579
579
  ```
@@ -630,7 +630,7 @@ export default function VideoOverlay({ background, title, tw, video, frame, prog
630
630
 
631
631
  **Usage:**
632
632
  ```bash
633
- dsgn render video-overlay props.json --out output.mp4
633
+ loopwind render video-overlay props.json --out output.mp4
634
634
  ```
635
635
 
636
636
  **How it works:**
@@ -669,7 +669,7 @@ export default function Template({ title, bannerTitle, bannerSubtitle, template,
669
669
 
670
670
  **Usage:**
671
671
  ```bash
672
- dsgn render composite-card '{
672
+ loopwind render composite-card '{
673
673
  "title": "Product Launch",
674
674
  "bannerTitle": "New Release",
675
675
  "bannerSubtitle": "Coming Soon"
@@ -777,22 +777,22 @@ export default function Template({ title, subtitle, frame, progress, tw, qr, tem
777
777
 
778
778
  ## Commands
779
779
 
780
- ### `dsgn init`
780
+ ### `loopwind init`
781
781
 
782
- Initialize a `dsgn.json` config file with default design tokens.
782
+ Initialize a `loopwind.json` config file with default design tokens.
783
783
 
784
- ### `dsgn add <template>`
784
+ ### `loopwind add <template>`
785
785
 
786
786
  Install a template from the registry.
787
787
 
788
788
  Options:
789
789
  - `-r, --registry <url>` - Custom registry URL
790
790
 
791
- ### `dsgn list`
791
+ ### `loopwind list`
792
792
 
793
793
  List all installed templates with metadata.
794
794
 
795
- ### `dsgn render <template>`
795
+ ### `loopwind render <template>`
796
796
 
797
797
  Render a template to an image.
798
798
 
@@ -802,25 +802,25 @@ Options:
802
802
  - `--format <format>` - Output format: png, svg, webp (default: png)
803
803
  - `--video` - Render as video (coming soon)
804
804
 
805
- ### `dsgn validate [template]`
805
+ ### `loopwind validate [template]`
806
806
 
807
807
  Validate template metadata. If no template is specified, validates all installed templates.
808
808
 
809
809
  ## Validation & Error Messages
810
810
 
811
- dsgn automatically validates templates and props before rendering, providing helpful error messages.
811
+ loopwind automatically validates templates and props before rendering, providing helpful error messages.
812
812
 
813
813
  ### Automatic Validation
814
814
 
815
815
  ```bash
816
816
  # Missing required props
817
- $ dsgn render banner-hero --props '{}'
817
+ $ loopwind render banner-hero --props '{}'
818
818
  ✖ Template validation failed
819
819
  ✗ props: Missing required prop: "title"
820
820
  → Add "title" to your props: --props '{"title":"value"}'
821
821
 
822
822
  # Wrong prop type
823
- $ dsgn render banner-hero --props '{"title":123}'
823
+ $ loopwind render banner-hero --props '{"title":123}'
824
824
  ✖ Template validation failed
825
825
  ✗ props: Prop "title" should be a string, got number
826
826
  → Change "title" to a string: "title": "value"
@@ -828,10 +828,10 @@ $ dsgn render banner-hero --props '{"title":123}'
828
828
 
829
829
  ### Enhanced Satori Error Messages
830
830
 
831
- When rendering fails, dsgn provides clear suggestions:
831
+ When rendering fails, loopwind provides clear suggestions:
832
832
 
833
833
  ```bash
834
- $ dsgn render my-template --props props.json
834
+ $ loopwind render my-template --props props.json
835
835
  ✖ Failed to render template
836
836
 
837
837
  Error: Satori requires explicit display: flex for containers with multiple children
@@ -846,12 +846,12 @@ See `VALIDATION.md` for complete validation documentation and troubleshooting.
846
846
 
847
847
  ## Creating Custom Templates
848
848
 
849
- Templates are stored in your project's `dsgn/templates/` directory. You can create custom templates:
849
+ Templates are stored in your project's `_loopwind/templates/` directory. You can create custom templates:
850
850
 
851
851
  1. Create a folder:
852
852
 
853
853
  ```bash
854
- mkdir -p dsgn/templates/my-template
854
+ mkdir -p _loopwind/templates/my-template
855
855
  ```
856
856
 
857
857
  2. Create `meta.json`:
@@ -893,8 +893,8 @@ export default function MyTemplate({ title }) {
893
893
  4. Validate and render:
894
894
 
895
895
  ```bash
896
- dsgn validate my-template
897
- dsgn render my-template --props '{"title":"Hello"}' --out test.png
896
+ loopwind validate my-template
897
+ loopwind render my-template --props '{"title":"Hello"}' --out test.png
898
898
  ```
899
899
 
900
900
  ## Use Cases
@@ -911,7 +911,7 @@ Video templates use `type: "video"` and support `frame` and `progress` props for
911
911
 
912
912
  ### ⚡ No Dependencies Required
913
913
 
914
- **dsgn uses pure JavaScript/WASM for video encoding** - works everywhere!
914
+ **loopwind uses pure JavaScript/WASM for video encoding** - works everywhere!
915
915
 
916
916
  ✅ Works on **Vercel Edge Functions**
917
917
  ✅ Works on **Netlify Functions**
@@ -956,13 +956,13 @@ export default function Template({ title, frame, progress, tw, qr, template }) {
956
956
 
957
957
  ```bash
958
958
  # Render to MP4
959
- dsgn render my-video '{"title":"Animated Title"}' -o output.mp4
959
+ loopwind render my-video '{"title":"Animated Title"}' -o output.mp4
960
960
 
961
961
  # With custom quality settings
962
- dsgn render my-video props.json --crf 18 # Higher quality (lower CRF = better quality)
962
+ loopwind render my-video props.json --crf 18 # Higher quality (lower CRF = better quality)
963
963
 
964
964
  # Export frames only (for manual encoding)
965
- dsgn render my-video props.json --frames-only -o frames/
965
+ loopwind render my-video props.json --frames-only -o frames/
966
966
  ```
967
967
 
968
968
  **How it works:**
@@ -1006,13 +1006,13 @@ See `website/README.md` for more details.
1006
1006
  Templates are fetched from a registry (similar to shadcn/ui). The default registry is:
1007
1007
 
1008
1008
  ```
1009
- https://dsgncli.com/r
1009
+ https://loopwind.dev/r
1010
1010
  ```
1011
1011
 
1012
1012
  You can host your own registry and use it with:
1013
1013
 
1014
1014
  ```bash
1015
- dsgn add my-template --registry https://my-registry.com
1015
+ loopwind add my-template --registry https://my-registry.com
1016
1016
  ```
1017
1017
 
1018
1018
  ## License
package/REGISTRY_SETUP.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- The registry is a simple HTTP endpoint that serves template JSON files. Users run `dsgn add template-name` and it fetches from `https://dsgncli.com/r/template-name`.
5
+ The registry is a simple HTTP endpoint that serves template JSON files. Users run `loopwind add template-name` and it fetches from `https://loopwind.dev/r/template-name`.
6
6
 
7
7
  ## Quick Solutions
8
8
 
@@ -13,7 +13,7 @@ Host static JSON files on any static hosting:
13
13
  **1. Create template JSON files:**
14
14
 
15
15
  ```
16
- dsgncli.com/
16
+ loopwind.dev/
17
17
  └── r/
18
18
  ├── banner-hero.json
19
19
  ├── product-card.json
@@ -119,7 +119,7 @@ Until you set up a real registry, use GitHub:
119
119
  **1. Create a templates repo:**
120
120
 
121
121
  ```
122
- github.com/yourusername/dsgn-templates/
122
+ github.com/yourusername/loopwind-templates/
123
123
  ├── banner-hero/
124
124
  │ ├── template.json
125
125
  │ ├── banner-hero.tsx
@@ -132,20 +132,20 @@ github.com/yourusername/dsgn-templates/
132
132
  **2. Users install with:**
133
133
 
134
134
  ```bash
135
- dsgn add github:yourusername/dsgn-templates/banner-hero
135
+ loopwind add github:yourusername/loopwind-templates/banner-hero
136
136
  ```
137
137
 
138
138
  **3. Update CLI default:**
139
139
 
140
140
  ```typescript
141
141
  // src/lib/constants.ts
142
- export const DEFAULT_REGISTRY = 'github:yourusername/dsgn-templates';
142
+ export const DEFAULT_REGISTRY = 'github:yourusername/loopwind-templates';
143
143
  ```
144
144
 
145
145
  Then users can:
146
146
 
147
147
  ```bash
148
- dsgn add banner-hero # Uses GitHub as registry
148
+ loopwind add banner-hero # Uses GitHub as registry
149
149
  ```
150
150
 
151
151
  ## Creating Template JSON Files
@@ -209,7 +209,7 @@ registry/
209
209
  └── social-og.json
210
210
  ```
211
211
 
212
- Upload these to `dsgncli.com/r/`
212
+ Upload these to `loopwind.dev/r/`
213
213
 
214
214
  ## Example Hosting Setups
215
215
 
@@ -218,8 +218,8 @@ Upload these to `dsgncli.com/r/`
218
218
  **1. Create Next.js project:**
219
219
 
220
220
  ```bash
221
- npx create-next-app@latest dsgn-registry
222
- cd dsgn-registry
221
+ npx create-next-app@latest loopwind-registry
222
+ cd loopwind-registry
223
223
  ```
224
224
 
225
225
  **2. Create API route:**
@@ -250,7 +250,7 @@ vercel
250
250
 
251
251
  **4. Configure domain:**
252
252
 
253
- Set `dsgncli.com` to point to your Vercel project.
253
+ Set `loopwind.dev` to point to your Vercel project.
254
254
 
255
255
  ### Cloudflare Workers
256
256
 
@@ -333,7 +333,7 @@ app.get('/r/:name', async (req, res) => {
333
333
  });
334
334
 
335
335
  // Users can install specific versions
336
- // dsgn add banner-hero@1.2.0
336
+ // loopwind add banner-hero@1.2.0
337
337
  ```
338
338
 
339
339
  ## Testing Your Registry
@@ -342,7 +342,7 @@ Once deployed, test it:
342
342
 
343
343
  ```bash
344
344
  # Test the endpoint
345
- curl https://dsgncli.com/r/banner-hero
345
+ curl https://loopwind.dev/r/banner-hero
346
346
 
347
347
  # Should return JSON like:
348
348
  {
@@ -352,7 +352,7 @@ curl https://dsgncli.com/r/banner-hero
352
352
  }
353
353
 
354
354
  # Test with CLI
355
- dsgn add banner-hero
355
+ loopwind add banner-hero
356
356
  ```
357
357
 
358
358
  ## Until Registry is Ready
@@ -360,7 +360,7 @@ dsgn add banner-hero
360
360
  **Option 1:** Tell users to use GitHub:
361
361
 
362
362
  ```bash
363
- dsgn add github:yourusername/dsgn-templates/banner-hero
363
+ loopwind add github:yourusername/loopwind-templates/banner-hero
364
364
  ```
365
365
 
366
366
  **Option 2:** Update README with temporary instructions:
@@ -371,7 +371,7 @@ dsgn add github:yourusername/dsgn-templates/banner-hero
371
371
  Templates are currently hosted on GitHub. Install with:
372
372
 
373
373
  \`\`\`bash
374
- dsgn add github:dsgncli/templates/banner-hero
374
+ loopwind add github:loopwindcli/templates/banner-hero
375
375
  \`\`\`
376
376
 
377
377
  Official registry coming soon!
@@ -386,7 +386,7 @@ Include templates directly in the npm package:
386
386
  **1. Create templates folder:**
387
387
 
388
388
  ```
389
- dsgn/
389
+ loopwind/
390
390
  ├── dist/
391
391
  └── bundled-templates/
392
392
  ├── banner-hero.json
@@ -414,8 +414,8 @@ export async function fetchTemplate(name: string) {
414
414
  **3. Users get core templates immediately:**
415
415
 
416
416
  ```bash
417
- npm install -g dsgn
418
- dsgn add banner-hero # Works offline!
417
+ npm install -g loopwind
418
+ loopwind add banner-hero # Works offline!
419
419
  ```
420
420
 
421
421
  ## Recommended Approach
@@ -1,6 +1,6 @@
1
1
  # shadcn/ui Design System Integration
2
2
 
3
- dsgn uses **shadcn/ui's design system** by default, providing beautiful and consistent colors, typography, and components.
3
+ loopwind uses **shadcn/ui's design system** by default, providing beautiful and consistent colors, typography, and components.
4
4
 
5
5
  ## Default Color Palette
6
6
 
@@ -139,7 +139,7 @@ export default function ShadcnCard({ title, description, status, tw }) {
139
139
  {/* Subtle border */}
140
140
  <div style={tw('border-t/50 mt-6 pt-6')}>
141
141
  <p style={tw('text-muted-foreground/75 text-sm')}>
142
- Powered by dsgn + shadcn
142
+ Powered by loopwind + shadcn
143
143
  </p>
144
144
  </div>
145
145
  </div>
@@ -150,7 +150,7 @@ export default function ShadcnCard({ title, description, status, tw }) {
150
150
 
151
151
  ## Customizing Colors
152
152
 
153
- Users can override the default shadcn colors in their `dsgn.json`:
153
+ Users can override the default shadcn colors in their `loopwind.json`:
154
154
 
155
155
  ```json
156
156
  {
@@ -164,11 +164,11 @@ Users can override the default shadcn colors in their `dsgn.json`:
164
164
  }
165
165
  ```
166
166
 
167
- Or use their existing `tailwind.config.js` colors - dsgn automatically detects and uses them!
167
+ Or use their existing `tailwind.config.js` colors - loopwind automatically detects and uses them!
168
168
 
169
169
  ## shadcn Themes
170
170
 
171
- dsgn uses the **Zinc theme** by default. Users can easily switch to other shadcn themes:
171
+ loopwind uses the **Zinc theme** by default. Users can easily switch to other shadcn themes:
172
172
 
173
173
  ### Slate Theme
174
174
  ```json
@@ -263,7 +263,7 @@ Much cleaner and themeable!
263
263
  | **Foreground variants** | ✅ | `text-muted-foreground` |
264
264
  | **Opacity modifiers** | ✅ | `bg-primary/50`, `text-muted/75` |
265
265
  | **Border colors** | ✅ | `border`, `border-destructive/50` |
266
- | **Dark mode** | ✅ | Override in dsgn.json |
266
+ | **Dark mode** | ✅ | Override in loopwind.json |
267
267
  | **Custom themes** | ✅ | Full shadcn palette customizable |
268
268
 
269
- **dsgn templates automatically work with shadcn's design system!** 🎨
269
+ **loopwind templates automatically work with shadcn's design system!** 🎨
package/TAILWIND.md CHANGED
@@ -108,20 +108,20 @@ tw('opacity-90') // opacity: 0.9
108
108
  ### Colors
109
109
 
110
110
  - **Static Colors**: `text-white`, `text-black`, `bg-white`, `bg-black`
111
- - **Config Colors**: `bg-primary`, `text-primary`, `bg-secondary`, etc. (from dsgn.json)
111
+ - **Config Colors**: `bg-primary`, `text-primary`, `bg-secondary`, etc. (from loopwind.json)
112
112
 
113
113
  Examples:
114
114
  ```tsx
115
115
  // Using static colors
116
116
  tw('bg-black text-white')
117
117
 
118
- // Using config colors (from dsgn.json)
118
+ // Using config colors (from loopwind.json)
119
119
  tw('bg-primary text-secondary')
120
120
  ```
121
121
 
122
122
  ## Config Color Integration
123
123
 
124
- The `tw()` function automatically uses colors from your `dsgn.json`:
124
+ The `tw()` function automatically uses colors from your `loopwind.json`:
125
125
 
126
126
  ```json
127
127
  {
@@ -215,7 +215,7 @@ const TAILWIND_MAP = {
215
215
 
216
216
  1. **Familiar Syntax**: Use the Tailwind classes you already know
217
217
  2. **Cleaner Code**: Less verbose than inline styles
218
- 3. **Config Integration**: Automatic color mapping from dsgn.json
218
+ 3. **Config Integration**: Automatic color mapping from loopwind.json
219
219
  4. **Type Safe**: TypeScript support with CSSProperties
220
220
  5. **Extensible**: Easy to add more utilities
221
221