@struq/skill 0.4.2 → 0.5.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.
Files changed (50) hide show
  1. package/README.md +167 -59
  2. package/package.json +2 -2
  3. package/skills/struq/SKILL.md +145 -89
  4. package/skills/struq/blocks/CATALOG.md +74 -22
  5. package/skills/struq/blocks/backgrounds/background-aurora.tsx +34 -12
  6. package/skills/struq/blocks/backgrounds/background-facets.tsx +14 -6
  7. package/skills/struq/blocks/backgrounds/background-silk.tsx +40 -15
  8. package/skills/struq/blocks/catalog.json +697 -16
  9. package/skills/struq/blocks/film.json +426 -0
  10. package/skills/struq/blocks/footers/footer-contact.tsx +81 -55
  11. package/skills/struq/blocks/footers/footer-reveal.tsx +1 -1
  12. package/skills/struq/blocks/headers/header-bar.tsx +24 -13
  13. package/skills/struq/blocks/headers/menu-curtain.tsx +24 -11
  14. package/skills/struq/blocks/heroes/hero-framed.tsx +33 -20
  15. package/skills/struq/blocks/heroes/hero-index.tsx +32 -11
  16. package/skills/struq/blocks/heroes/hero-poster.tsx +68 -35
  17. package/skills/struq/blocks/heroes/hero-split.tsx +22 -9
  18. package/skills/struq/blocks/heroes/hero-still.tsx +80 -74
  19. package/skills/struq/blocks/kit/accent.ts +82 -0
  20. package/skills/struq/blocks/kit/blocks.css +78 -35
  21. package/skills/struq/blocks/kit/quiet/Close.tsx +73 -0
  22. package/skills/struq/blocks/kit/quiet/PhotoText.tsx +79 -0
  23. package/skills/struq/blocks/kit/quiet/Rows.tsx +81 -0
  24. package/skills/struq/blocks/kit/quiet/Statement.tsx +157 -0
  25. package/skills/struq/blocks/kit/quiet/index.ts +7 -0
  26. package/skills/struq/blocks/kit/quiet/sheet.ts +12 -0
  27. package/skills/struq/blocks/page-transitions/page-transition-gate.tsx +87 -36
  28. package/skills/struq/blocks/preloaders/preloader-gate.tsx +116 -46
  29. package/skills/struq/blocks/preloaders/preloader-stack.tsx +10 -7
  30. package/skills/struq/blocks/sections/contact-form.tsx +1 -1
  31. package/skills/struq/blocks/sections/cta-closing.tsx +3 -2
  32. package/skills/struq/blocks/sections/fanned-cards.tsx +14 -10
  33. package/skills/struq/blocks/sections/film-strip.tsx +18 -14
  34. package/skills/struq/blocks/sections/grid-assembly.tsx +16 -11
  35. package/skills/struq/blocks/sections/manifesto.tsx +3 -2
  36. package/skills/struq/blocks/sections/panel-accordion.tsx +3 -2
  37. package/skills/struq/blocks/sections/split-pair.tsx +4 -3
  38. package/skills/struq/blocks/showpieces/hero-opener.tsx +76 -17
  39. package/skills/struq/blocks/showpieces/wordmark-finale.tsx +3 -1
  40. package/skills/struq/blocks/transitions/zoom-through.tsx +9 -10
  41. package/skills/struq/canon/canon.json +1 -1
  42. package/skills/struq/references/craft.md +4 -0
  43. package/skills/struq/references/film.md +158 -0
  44. package/skills/struq/references/triage.md +3 -0
  45. package/skills/struq/scripts/blocks.mjs +89 -7
  46. package/skills/struq/scripts/canon.mjs +8 -1
  47. package/skills/struq/scripts/check.mjs +94 -11
  48. package/skills/struq/scripts/film-check.mjs +997 -0
  49. package/skills/struq/scripts/gate.mjs +146 -0
  50. package/skills/struq/scripts/packs.mjs +73 -12
package/README.md CHANGED
@@ -1,100 +1,193 @@
1
- # Struq
2
-
3
- **Award-tier web design for your coding agent.**
4
-
5
- Struq is a design skill for Claude Code, Codex, Cursor and OpenCode. Give it a brief and it builds a studio-grade site from Struq's catalogue of admitted blocks: preloaders, page transitions, headers, heroes, WebGL backgrounds, showpieces, sections and footers, each judged against an award-tier reference and shipped as real files with three variants. Your agent picks the direction and the order, writes the copy and joins the blocks; the blocks carry the motion.
6
-
7
- The icon set the skill uses by default, Struq Icons, is browsable at [struq.nl/iconen](https://struq.nl/iconen).
1
+ <h1 align="center">
2
+ <a href="https://struq.nl/skill">
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/banner-dark.svg">
5
+ <img alt="Struq skill: studio-grade sites from the AI you already use." src="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/banner-light.svg" width="100%">
6
+ </picture>
7
+ </a>
8
+ </h1>
9
+
10
+ <p align="center">
11
+ Struq is a free, open-source design skill for Claude Code, Cursor, Codex and other AI coding tools: your AI settles the direction, type, colour and motion before it builds, so your site looks studio-made, not AI-made.
12
+ </p>
13
+
14
+ <p align="center">
15
+ <a href="https://struq.nl/skill">Website</a>
16
+ &nbsp;&middot;&nbsp;
17
+ <a href="https://www.npmjs.com/package/@struq/skill">npm</a>
18
+ &nbsp;&middot;&nbsp;
19
+ <a href="skills/struq/blocks/CATALOG.md">The blocks</a>
20
+ &nbsp;&middot;&nbsp;
21
+ <a href="https://struq.nl/iconen">Struq Icons</a>
22
+ &nbsp;&middot;&nbsp;
23
+ <a href="CHANGELOG.md">Changelog</a>
24
+ </p>
25
+
26
+ <br>
8
27
 
9
28
  ```bash
10
29
  npx @struq/skill@latest
11
30
  ```
12
31
 
13
- It finds the AI tools on your machine and installs the skill into each of them. Then, in your agent:
32
+ It finds the AI tools on your machine and installs the skill into each of them. Then give your agent a brief:
14
33
 
15
34
  ```text
16
35
  /struq a portfolio for an architecture studio in Rotterdam, dark, calm, lots of photography
17
36
  ```
18
37
 
19
- | Agent | How to invoke |
38
+ It plans the site, stops once to show you the plan, and builds only after you say yes.
39
+
40
+ | Agent | How to call it |
20
41
  |---|---|
21
- | Claude Code (installed with `npx @struq/skill` or `npx skills`) | `/struq <brief>` |
22
- | Claude Code (installed as a plugin) | `/struq:struq <brief>` |
42
+ | Claude Code | `/struq <brief>`, or `/struq:struq <brief>` when installed as a plugin |
23
43
  | Codex | `$struq <brief>` |
24
- | Cursor | invoke the struq skill by name: "use the struq skill to build ..." |
25
- | OpenCode | invoke the struq skill by name: "use the struq skill to build ..." |
44
+ | Cursor, OpenCode | name it: "use the struq skill to build ..." |
45
+
46
+ <br>
47
+
48
+ ## <picture><source media="(prefers-color-scheme: dark)" srcset="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/h/agents-dark.svg"><img src="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/h/agents-light.svg" width="26" height="26" alt=""></picture> Same brief, two agents
49
+
50
+ Three briefs, each built twice by the same model with the same materials: once as a plain coding agent, once with `/struq`. Look at the left column first.
51
+
52
+ **Dev-tool landing page**
53
+
54
+ | Plain agent | With the Struq skill |
55
+ |---|---|
56
+ | ![Tidewater, built by a plain agent](https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/docs/compare/saas-plain.webp) | ![Tidewater, built with the Struq skill](https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/docs/compare/saas-struq.webp) |
57
+
58
+ <details>
59
+ <summary><b>Seen the left one before?</b></summary>
60
+ <br>
26
61
 
27
- ## Same brief, with and without Struq
62
+ You have. It is the dark developer-tool template, item for item: the green glow, the pill above the headline, the install line in a terminal box. The Struq build went light and built the page around the trace waterfall itself, assembling as you scroll.
28
63
 
29
- Three briefs, each built twice by the same model with the same materials: once as a plain coding agent, once with `/struq`.
64
+ </details>
30
65
 
31
- **Dev-tool landing page.** Without: the dark developer-tool template, item for item. With: a light page built around a trace waterfall that assembles as you scroll.
66
+ **Ceramicist portfolio, no logo, no photos**
32
67
 
33
- | Without | With Struq |
68
+ | Plain agent | With the Struq skill |
34
69
  |---|---|
35
- | ![Tidewater without Struq](docs/compare/saas-plain.webp) | ![Tidewater with Struq](docs/compare/saas-struq.webp) |
70
+ | ![Ana Ferreira, built by a plain agent](https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/docs/compare/ceramics-plain.webp) | ![Ana Ferreira, built with the Struq skill](https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/docs/compare/ceramics-struq.webp) |
36
71
 
37
- **Ceramicist portfolio.** Without: a tidy template with a stat strip, a chef quote and a bio the brief never supplied. With: a single-line profile drawing of each piece stands in for the missing photos and becomes the site's motif.
72
+ <details>
73
+ <summary><b>Where did "12 restaurants" come from?</b></summary>
74
+ <br>
38
75
 
39
- | Without | With Struq |
76
+ Nowhere. The brief gave no figures, no quote and no bio, and the plain agent wrote all of them: a stat strip, a chef's quote, a life story. The Struq skill never invents a testimonial or a number. With no photos to work from, it drew a single-line profile of each piece instead, and that line became the motif of the whole site.
77
+
78
+ </details>
79
+
80
+ **E-bike launch, existing brand, wants 3D**
81
+
82
+ | Plain agent | With the Struq skill |
40
83
  |---|---|
41
- | ![Ana Ferreira without Struq](docs/compare/ceramics-plain.webp) | ![Ana Ferreira with Struq](docs/compare/ceramics-struq.webp) |
84
+ | ![Vela Mono, built by a plain agent](https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/docs/compare/ebike-plain.webp) | ![Vela Mono, built with the Struq skill](https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/docs/compare/ebike-struq.webp) |
85
+
86
+ <details>
87
+ <summary><b>Both built a pinned 3D bike. So what is the difference?</b></summary>
88
+ <br>
89
+
90
+ The closest pair of the three. The plain build filled the page with a spec sheet the brand never published. The Struq build took the lime belt as its one motif and left the unknown specs out, openly, rather than guessing them.
91
+
92
+ </details>
93
+
94
+ Where the Struq skill still loses: craft. The plain builds aim lower and break less; some Struq builds had reveal states that captured empty. That is what gets fixed next.
95
+
96
+ <br>
97
+
98
+ ## <picture><source media="(prefers-color-scheme: dark)" srcset="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/h/layers-dark.svg"><img src="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/h/layers-light.svg" width="26" height="26" alt=""></picture> The blocks carry the motion
99
+
100
+ Your agent picks the direction, sets the order and writes the copy. The motion comes from Struq's own catalogue: 44 admitted blocks, each a real React file with three variants, working in light and dark.
101
+
102
+ <picture>
103
+ <source media="(prefers-color-scheme: dark)" srcset="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/blocks-dark.webp">
104
+ <img alt="Six Struq blocks playing at once: a preloader, a hero, a page transition, a manifesto scrub, an image growing to full bleed and a WebGL background." src="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/blocks-light.webp" width="100%">
105
+ </picture>
42
106
 
43
- **E-bike launch.** The closest pair: both built a pinned 3D bike. Without: a spec sheet the brand never published. With: the lime belt as the one motif, and unknown specs openly held back.
107
+ <details>
108
+ <summary><b>All 44, by kind</b></summary>
109
+ <br>
44
110
 
45
- | Without | With Struq |
111
+ | Kind | Blocks |
46
112
  |---|---|
47
- | ![Vela Mono without Struq](docs/compare/ebike-plain.webp) | ![Vela Mono with Struq](docs/compare/ebike-struq.webp) |
113
+ | Preloaders | 4 |
114
+ | Page transitions | 3 |
115
+ | Headers | 2 |
116
+ | Heroes | 5 |
117
+ | WebGL backgrounds | 3 |
118
+ | Showpieces | 9 |
119
+ | Scene transition | 1 |
120
+ | Sections | 15 |
121
+ | Footers | 2 |
48
122
 
49
- Where Struq lost points: craft. The plain builds are less ambitious and break less; the Struq builds had reveal states that rendered empty in some captures. That is the next thing being fixed.
123
+ Each one with its files, packages, props and variants: [the catalogue](skills/struq/blocks/CATALOG.md). Every GSAP plugin they use is free on npm.
50
124
 
51
- ## What you get
125
+ </details>
126
+
127
+ <br>
128
+
129
+ ## <picture><source media="(prefers-color-scheme: dark)" srcset="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/h/brush-dark.svg"><img src="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/h/brush-light.svg" width="26" height="26" alt=""></picture> What is in the skill
130
+
131
+ <picture>
132
+ <source media="(prefers-color-scheme: dark)" srcset="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/kit-dark.svg">
133
+ <img alt="Six parts: blocks, direction, photos, craft, a check, and the Struq MCP." src="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/kit-light.svg" width="100%">
134
+ </picture>
135
+
136
+ <details>
137
+ <summary><b>The parts, in detail</b></summary>
138
+ <br>
52
139
 
53
140
  | Part | What it is |
54
141
  |---|---|
55
- | Blocks | 44 admitted blocks in `skills/struq/blocks/` ([catalogue](skills/struq/blocks/CATALOG.md)): 4 preloaders, 3 page transitions, 2 headers, 5 heroes, 3 WebGL backgrounds, 9 showpieces, a scene transition, 15 sections and 2 footers, with the kit they stand on. A copy of Struq's own set, refreshed at every release. |
142
+ | Blocks | The 44 admitted blocks in `skills/struq/blocks/`, with the kit they stand on. A copy of Struq's own set, refreshed at every release. |
56
143
  | Direction | Struq's palettes and type pairings, written as the one token block the blocks read (surface ladder, contrast scenes, the accent's ink) with each face loaded at its real weights. Offline, no account. |
57
144
  | Photos | Art-directed CC0 packs from the Struq beeldbank, picked by the brief and filtered to what fits the client. |
58
- | Craft | The rules that make the blocks feel high end, for the code between them: clips from numbers, whole pixels, decode before show, scroll-tied and reversing, a gate with a 3 s fallback, type on the measured calm side of a photo. |
145
+ | Craft | The rules for the code between the blocks: clips from numbers, whole pixels, decode before show, scroll-tied and reversing, a gate with a 3 s fallback, type on the measured calm side of a photo. |
59
146
  | Check | `check.mjs`: the tell list (eyebrows, pills, gradients, glow, mono, Inter, default purple, numbered steps, icon grids, dashes) and what a page owes its blocks. |
60
147
  | MCP | With the Struq MCP connected, the same four jobs come from `struq_richting`, `struq_blokken`, `struq_blok` and `struq_controle`. Without it the skill works from its own copy. |
61
148
 
62
- Stack: Next.js App Router and Tailwind v4 (Vite by hand, see `references/stack-targets.md`). Every GSAP plugin used is free on npm. Icons: [Struq Icons](https://struq.nl/iconen) (`@struq/icons`, MIT) by default.
149
+ Stack: Next.js App Router and Tailwind v4 (Vite by hand, see `references/stack-targets.md`).
150
+
151
+ </details>
152
+
153
+ <br>
63
154
 
64
- ## Commands
155
+ ## <picture><source media="(prefers-color-scheme: dark)" srcset="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/h/compass-dark.svg"><img src="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/h/compass-light.svg" width="26" height="26" alt=""></picture> How a build runs
156
+
157
+ - **Direction.** The site is planned as one film: a motion language (weight, cut or curtain), one idea, one motif, and a storyboard of scenes with the handovers between them. Then a palette, a type pairing and a photo pack from Struq's canon. All of it in one `STRUQ.md`, and no block goes in until that plan passes its own check.
158
+ - **One stop.** It shows you that plan and asks once: approve it, and send a logo, photos or real numbers if you have them. It does not ask again.
159
+ - **Blocks.** It installs each block with everything it imports, writes the tokens and fonts, and composes the page with your real copy.
160
+ - **Check.** `check.mjs` runs until the page passes. With a browser tool it also looks at the page at phone and desktop width and fixes what it sees.
65
161
 
66
162
  | Command | What it does |
67
163
  |---|---|
68
- | `/struq <brief>` | Plans the site into one `STRUQ.md`, stops once for your approval, builds it, then runs its own check and, with a browser tool, screenshots it and fixes what it sees |
164
+ | `/struq <brief>` | Plans, stops once for your approval, builds, checks and fixes |
69
165
  | `/struq redesign <path>` | Keeps your brand, copy and components; swaps in blocks where the page is weakest |
70
- | `/struq audit <path-or-url>` | Changes nothing. Returns every tell with its fix and the three highest-payoff changes |
71
- | `/struq direct <brief>` | Directed mode for one continuous 3D experience across chapters |
72
-
73
- In Codex, use `$struq` instead of `/struq`; as a Claude Code plugin the command is `/struq:struq`.
166
+ | `/struq audit <path-or-url>` | Changes nothing. Returns every tell with its fix and the three changes that pay off most |
167
+ | `/struq direct <brief>` | Directed mode, for one continuous 3D experience across chapters |
74
168
 
75
- ## How a build runs
169
+ In Codex the command is `$struq`; as a Claude Code plugin it is `/struq:struq`.
76
170
 
77
- 1. **Direction.** A palette, a type pairing and a photo pack from Struq's canon, and the order of the site from the catalogue: arrival, header, hero, manifesto, about, approach, work, closing call to action, footer. All in one `STRUQ.md`. It never invents testimonials or stats.
78
- 2. **One stop.** It shows the plan and asks once: approve, and send a logo, photos or real numbers if you have them.
79
- 3. **Blocks.** It installs each block with everything it imports, writes the tokens and fonts, and composes the page with your real copy.
80
- 4. **Check.** `check.mjs` runs until it passes; with a browser tool it also looks at the page at phone and desktop width and fixes what it sees.
171
+ <br>
81
172
 
82
- ## Install options
173
+ ## <picture><source media="(prefers-color-scheme: dark)" srcset="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/h/download-dark.svg"><img src="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/h/download-light.svg" width="26" height="26" alt=""></picture> Install
83
174
 
84
175
  ```bash
85
- # every AI tool on this machine: Claude Code, Cursor, Codex, OpenCode, Gemini CLI, Copilot, Windsurf
86
176
  npx @struq/skill@latest
87
-
88
- # one tool only, or into the current project instead of your home folder
89
- npx @struq/skill@latest --claude
90
- npx @struq/skill@latest --project
91
177
  ```
92
178
 
93
- Run it again to update, and `npx @struq/skill@latest remove` to take it out.
179
+ That covers Claude Code, Cursor, Codex, OpenCode, Gemini CLI, Copilot and Windsurf. Run it again to update; `npx @struq/skill@latest remove` takes it out. Node 18 or newer.
94
180
 
95
- With the open skills CLI, which knows 70+ agents:
181
+ <details>
182
+ <summary><b>One tool only, per project, or another installer</b></summary>
183
+ <br>
96
184
 
97
185
  ```bash
186
+ # one tool only, or into the current project instead of your home folder
187
+ npx @struq/skill@latest --claude
188
+ npx @struq/skill@latest --project
189
+
190
+ # with the open skills CLI, which knows 70+ agents
98
191
  npx skills add struqnl/struq-design -g
99
192
  ```
100
193
 
@@ -105,26 +198,41 @@ As a Claude Code plugin (the command is then `/struq:struq`):
105
198
  /plugin install struq@struq
106
199
  ```
107
200
 
108
- Node 18+ is required. The screenshot step uses whatever browser tool your agent has (Playwright or similar).
201
+ The screenshot step uses whatever browser tool your agent has (Playwright or similar).
109
202
 
110
- ## Struq Icons
203
+ </details>
111
204
 
112
- Struq builds use [Struq Icons](https://struq.nl/iconen) by default: 182 two-tone icons, most with their own hover motion, MIT.
205
+ <br>
206
+
207
+ ## <picture><source media="(prefers-color-scheme: dark)" srcset="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/h/palette-dark.svg"><img src="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/h/palette-light.svg" width="26" height="26" alt=""></picture> The icons it reaches for
208
+
209
+ Struq builds use [Struq Icons](https://struq.nl/iconen) by default: 182 icons in two tones, and each of the 118 full icons makes one small move under the cursor that says what it does. Every icon on this page is one of them.
210
+
211
+ <a href="https://struq.nl/iconen">
212
+ <picture>
213
+ <source media="(prefers-color-scheme: dark)" srcset="https://cdn.jsdelivr.net/npm/@struq/icons@1/readme/motion-dark.svg">
214
+ <img alt="Eight Struq icons playing their hover motion: lock, delete, settings, mail, history, sound, hint, bug." src="https://cdn.jsdelivr.net/npm/@struq/icons@1/readme/motion-light.svg" width="100%">
215
+ </picture>
216
+ </a>
113
217
 
114
218
  ```bash
115
219
  npm install @struq/icons
116
220
  ```
117
221
 
118
- ## What it fetches and sends
222
+ <br>
223
+
224
+ ## <picture><source media="(prefers-color-scheme: dark)" srcset="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/h/shield-dark.svg"><img src="https://cdn.jsdelivr.net/gh/struqnl/struq-design@main/assets/readme/h/shield-light.svg" width="26" height="26" alt=""></picture> What it fetches and sends
225
+
226
+ The Struq skill is instructions, the block files and five small Node scripts (`blocks.mjs`, `canon.mjs`, `images.mjs`, `check.mjs`, `log.mjs`) that your agent runs in your project. They read and write files there, including a build log, `STRUQ-LOG.md`.
119
227
 
120
- Struq is instructions, the block files and five small Node scripts (`blocks.mjs`, `canon.mjs`, `images.mjs`, `check.mjs`, `log.mjs`) that your agent runs in your project. They read and write files in your project, including a build log (`STRUQ-LOG.md`).
228
+ - **Blocks and canon** ship inside the skill. Nothing is fetched to install a block or write the tokens.
229
+ - **Fonts** load from Google Fonts (or Fontshare, for a face that lives there) in the visitor's browser, as on any site with web fonts.
230
+ - **Photos**, for every slot your own photos do not fill: `images.mjs` reads the public pack list at `https://struq.nl/api/media/packs` and downloads the chosen images from `https://struq.nl/media/packs/`. Offline it writes plates graded to your palette instead.
231
+ - **The MCP**, if you connect it: your agent calls Struq's tools with your brief. Nothing else leaves your machine.
232
+ - **The installer** downloads the package from npm, looks for your AI tools' folders in your home folder and copies the skill into them. It sends nothing.
121
233
 
122
- - **Blocks and canon.** Shipped inside the skill. Nothing is fetched to install a block or write the tokens.
123
- - **Fonts.** The site links Google Fonts (or Fontshare for a face that lives there) from the visitor's browser, as any site with web fonts does.
124
- - **Photos, for every slot your own photos do not fill.** `images.mjs` reads the public pack list at `https://struq.nl/api/media/packs` and downloads the chosen images from `https://struq.nl/media/packs/` into your project. Offline it writes plates graded to your palette instead.
125
- - **The MCP, if you connect it.** Your agent calls Struq's tools with your brief; nothing else leaves your machine.
126
- - **The installer.** `npx @struq/skill@latest` downloads the package from npm, looks for the AI tools' folders in your home folder and copies the skill into them. It sends nothing.
234
+ <br>
127
235
 
128
236
  ## License
129
237
 
130
- MIT
238
+ MIT. Made by [Struq](https://struq.nl).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@struq/skill",
3
- "version": "0.4.2",
3
+ "version": "0.5.0",
4
4
  "description": "Install the free Struq skill into Claude Code, Cursor, Codex and other AI coding tools: websites at the level of a design studio, built by your own AI.",
5
5
  "license": "MIT",
6
6
  "author": "Struq (https://struq.nl)",
@@ -35,7 +35,7 @@
35
35
  "node": ">=18"
36
36
  },
37
37
  "scripts": {
38
- "test": "node --test test/install.test.mjs test/check.test.mjs test/packs.test.mjs test/tokens.test.mjs test/blocks.test.mjs test/plugin.test.mjs",
38
+ "test": "node --test test/install.test.mjs test/check.test.mjs test/packs.test.mjs test/tokens.test.mjs test/blocks.test.mjs test/gate.test.mjs test/arc.test.mjs test/plugin.test.mjs",
39
39
  "release:blocks": "node scripts/release-blocks.mjs",
40
40
  "release:plugin": "node scripts/build-plugin.mjs"
41
41
  },