@withmata/blueprints 0.3.1 → 0.3.2

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 (24) hide show
  1. package/.claude/skills/blueprint-catalog/SKILL.md +13 -2
  2. package/.claude/skills/scaffold-env/SKILL.md +222 -0
  3. package/.claude/skills/scaffold-tailwind/SKILL.md +177 -0
  4. package/.claude/skills/scaffold-ui/SKILL.md +206 -0
  5. package/blueprints/features/env-t3/BLUEPRINT.md +332 -0
  6. package/blueprints/features/env-t3/files/nextjs/.env.example +17 -0
  7. package/blueprints/features/env-t3/files/nextjs/.env.local +0 -0
  8. package/blueprints/features/env-t3/files/nextjs/env/client.ts +13 -0
  9. package/blueprints/features/env-t3/files/nextjs/env/server.ts +12 -0
  10. package/blueprints/features/env-t3/files/server/.env.example +14 -0
  11. package/blueprints/features/env-t3/files/server/.env.local +0 -0
  12. package/blueprints/features/env-t3/files/server/env.ts +17 -0
  13. package/blueprints/features/tailwind-v4/BLUEPRINT.md +262 -12
  14. package/blueprints/features/tailwind-v4/files/tailwind-config/package.json +20 -0
  15. package/blueprints/features/tailwind-v4/files/tailwind-config/shared-styles.css +131 -0
  16. package/blueprints/features/ui-shared-components/BLUEPRINT.md +350 -13
  17. package/blueprints/features/ui-shared-components/files/ui/components.json +21 -0
  18. package/blueprints/features/ui-shared-components/files/ui/package.json +42 -0
  19. package/blueprints/features/ui-shared-components/files/ui/styles/globals.css +2 -0
  20. package/blueprints/features/ui-shared-components/files/ui/tsconfig.json +9 -0
  21. package/blueprints/features/ui-shared-components/files/ui/utils/cn.ts +6 -0
  22. package/blueprints/features/ui-shared-components/files/ui/utils/cva.ts +4 -0
  23. package/dist/index.js +1 -1
  24. package/package.json +1 -1
@@ -6,30 +6,367 @@ Feature
6
6
 
7
7
  ## Status
8
8
 
9
- Planned.
9
+ Complete.
10
10
 
11
11
  ## Problem
12
12
 
13
- Sharing UI components across multiple apps in a Turborepo monorepo requires careful package structure, export patterns, and styling integration. Without a standard setup, teams duplicate components, diverge on patterns, and fight build tooling issues.
14
-
15
- ## Intended Scope
16
-
17
- - `packages/ui/` workspace package with shadcn/ui setup
18
- - Component export pattern via barrel `index.ts`
19
- - Consuming shared components from `apps/web/` and other apps
20
- - Integration with the shared Tailwind config from `config/tailwind-config/`
21
- - Component generation workflow (shadcn CLI adapted for monorepo)
22
- - Storybook setup (optional)
13
+ Sharing UI components across multiple apps in a monorepo requires careful package structure, export patterns, and styling integration. Without a standard setup, teams duplicate components, fight build tooling issues, and waste time wiring shadcn/ui to work in a workspace package. This blueprint creates a `packages/ui/` package with path-based exports, shadcn CLI compatibility, and proper Tailwind style integration.
23
14
 
24
15
  ## Blueprint Dependencies
25
16
 
26
17
  | Blueprint | Type | Why |
27
18
  |-----------|------|-----|
28
- | `features/tailwind-v4` | required | UI components depend on design tokens and theme setup from the Tailwind blueprint. Without it, components lack consistent styling. |
29
- | `foundation/monorepo-turbo` | recommended | Provides workspace structure, TypeScript config, and package conventions. Without it, the shared UI package is created as a local directory. |
19
+ | `features/tailwind-v4` | required | UI components depend on design tokens and theme setup. Without it, components lack consistent styling. |
20
+ | `foundation/monorepo-turbo` | recommended | Provides workspace structure, TypeScript config, and package conventions. Without it, the UI package is created as a local directory. |
30
21
 
31
22
  ### If `tailwind-v4` is not installed
32
23
 
33
24
  The scaffold command should ask: "UI components need the Tailwind design system. Install tailwind-v4 first? (Y/n)"
34
25
 
35
26
  If declined, scaffold with basic Tailwind defaults and warn about missing design tokens.
27
+
28
+ ---
29
+
30
+ ## Architecture
31
+
32
+ ### Core Pattern
33
+
34
+ The UI package is a workspace package (`packages/ui/`) that exports components, utilities, styles, and icons via **path-based exports** in `package.json`. Consuming apps import directly from specific paths (`@scope/ui/components/ui/button`) rather than through barrel re-exports. This enables better tree-shaking and clearer dependency graphs.
35
+
36
+ Components use shadcn/ui conventions: Radix UI primitives for accessibility, `class-variance-authority` for variant management, and the `cn()` utility for class merging.
37
+
38
+ ### Key Decisions
39
+
40
+ - **Path-based exports** (required) — Instead of `import { Button } from "@scope/ui"`, use `import { Button } from "@scope/ui/components/ui/button"`. This avoids barrel export issues, enables per-component tree-shaking, and makes dependencies explicit. Package.json uses wildcard exports (`"./components/*": "./components/*.tsx"`).
41
+
42
+ - **Subpath imports with `#` prefix** (required) — Internal imports within the UI package use Node.js subpath imports (`#components/ui/button`). This provides clean paths without TypeScript path aliases and works natively with Node.js module resolution.
43
+
44
+ - **shadcn CLI compatibility** (required) — The `components.json` file configures shadcn to generate components in the correct locations within the UI package. Run `pnpm dlx shadcn@latest add <component>` from `packages/ui/` to add new components.
45
+
46
+ - **No build step** (required) — The UI package exports TypeScript source directly (`.tsx` files). Consuming Next.js apps transpile via their own bundler. This eliminates a build step and enables hot module replacement for components during development.
47
+
48
+ - **`cn()` utility** (required) — Combines `clsx` for conditional classes and `tailwind-merge` for deduplication. Every component should use `cn()` for className composition. Located at `utils/cn.ts`.
49
+
50
+ - **CVA for variants** (recommended) — `class-variance-authority` for defining component variants (size, color, style). Re-exported from `utils/cva.ts` for consistency.
51
+
52
+ - **Separate `icons/` directory** (recommended) — SVG icons and brand logos in their own directory with path-based exports (`@scope/ui/icons/Logo`). Keeps component imports clean.
53
+
54
+ - **Styles exported as CSS** (required) — The UI package exports its `styles/globals.css` which imports the tailwind-config. Consuming apps import this via `@import "{{SCOPE}}/ui/styles"` in their own `globals.css`.
55
+
56
+ ---
57
+
58
+ ## Hard Requirements vs Recommended Defaults
59
+
60
+ **Hard requirements:**
61
+ - Path-based exports (no barrel re-exports for components)
62
+ - shadcn/ui CLI compatibility (`components.json`)
63
+ - `cn()` utility using clsx + tailwind-merge
64
+ - TypeScript source exports (no build step)
65
+ - Styles import chain through tailwind-config
66
+
67
+ **Recommended defaults — ask during scaffolding:**
68
+
69
+ | Choice | Recommended | Alternatives |
70
+ |---|---|---|
71
+ | shadcn style | `"new-york"` | `"default"` or any shadcn style |
72
+ | Icon library | `"lucide"` | `"phosphor"`, `"radix"`, or custom |
73
+ | Include CVA utility | Yes | No |
74
+
75
+ ---
76
+
77
+ ## Dependencies
78
+
79
+ ### npm packages
80
+
81
+ **packages/ui:**
82
+ | Package | Version | Purpose |
83
+ |---|---|---|
84
+ | `{{SCOPE}}/tailwind-config` | `workspace:*` | Shared design tokens |
85
+ | `@radix-ui/react-slot` | ^1.2 | Polymorphic component support (asChild pattern) |
86
+ | `class-variance-authority` | ^0.7 | Component variant management |
87
+ | `clsx` | ^2.1 | Conditional className utility |
88
+ | `tailwind-merge` | ^3 | Smart Tailwind class deduplication |
89
+ | `tw-animate-css` | ^1 | Animation classes |
90
+ | `react` | ^19 | React |
91
+ | `react-dom` | ^19 | React DOM |
92
+ | `shadcn` | ^3 | Component generation CLI |
93
+
94
+ **packages/ui (dev):**
95
+ | Package | Version | Purpose |
96
+ |---|---|---|
97
+ | `{{SCOPE}}/typescript-config` | `workspace:*` | Shared TypeScript config |
98
+ | `@tailwindcss/postcss` | ^4 | PostCSS plugin |
99
+ | `tailwindcss` | ^4 | Tailwind CSS |
100
+ | `typescript` | ^5.9 | TypeScript compiler |
101
+ | `@types/react` | ^19 | React type definitions |
102
+ | `@types/react-dom` | ^19 | React DOM type definitions |
103
+
104
+ ---
105
+
106
+ ## Monorepo Wiring
107
+
108
+ ### UI Package (`packages/ui/`)
109
+
110
+ **`package.json` exports:**
111
+ ```json
112
+ {
113
+ "exports": {
114
+ "./components/*": "./components/*.tsx",
115
+ "./components/ui/*": "./components/ui/*.tsx",
116
+ "./utils/*": "./utils/*.ts",
117
+ "./styles": "./styles/globals.css",
118
+ "./icons/*": "./icons/*.tsx",
119
+ "./icons/logos/*": "./icons/logos/*.tsx"
120
+ },
121
+ "imports": {
122
+ "#components/*": "./components/*.tsx",
123
+ "#components/ui/*": "./components/ui/*.tsx",
124
+ "#utils/*": "./utils/*.ts",
125
+ "#hooks/*": "./hooks/*.ts",
126
+ "#types/*": "./types/*.ts"
127
+ }
128
+ }
129
+ ```
130
+
131
+ **File structure:**
132
+ ```
133
+ packages/ui/
134
+ ├── components/
135
+ │ └── ui/ # shadcn-generated components go here
136
+ ├── icons/
137
+ │ └── logos/ # Brand logos (SVG as React components)
138
+ ├── styles/
139
+ │ └── globals.css # Imports tailwind-config
140
+ ├── utils/
141
+ │ ├── cn.ts # Class merging utility
142
+ │ └── cva.ts # CVA re-export
143
+ ├── components.json # shadcn CLI config
144
+ ├── package.json # Exports, imports, deps
145
+ └── tsconfig.json # Extends shared react-library config
146
+ ```
147
+
148
+ ### Consuming App (`apps/web/`)
149
+
150
+ **`app/globals.css` (updated):**
151
+ ```css
152
+ @import "tailwindcss";
153
+ @import "{{SCOPE}}/tailwind-config";
154
+ @import "{{SCOPE}}/ui/styles";
155
+ @plugin "@tailwindcss/typography";
156
+
157
+ @source "../../../packages/ui";
158
+ ```
159
+
160
+ The `@source` directive tells Tailwind to scan the UI package for classes. The relative path must point from the consuming app to `packages/ui/`.
161
+
162
+ **Usage in components:**
163
+ ```typescript
164
+ import { Button } from "{{SCOPE}}/ui/components/ui/button";
165
+ import { cn } from "{{SCOPE}}/ui/utils/cn";
166
+ import { Logo } from "{{SCOPE}}/ui/icons/logos/Logo";
167
+ ```
168
+
169
+ ---
170
+
171
+ ## Single-Repo Adaptation
172
+
173
+ For standalone applications without a monorepo, UI components live alongside the app code.
174
+
175
+ ### Path Mapping
176
+
177
+ | Aspect | Monorepo | Single-Repo |
178
+ |--------|----------|-------------|
179
+ | UI code location | `packages/ui/` (workspace package) | `src/ui/` or `src/components/` |
180
+ | Import pattern | `import { x } from "@scope/ui/components/ui/button"` | `import { x } from "@/ui/components/ui/button"` |
181
+ | Package dependencies | `workspace:*` protocol | Direct — packages at root `package.json` |
182
+ | TypeScript config | Extends `@scope/typescript-config/react-library.json` | Inherits from root `tsconfig.json` |
183
+ | Styles import | `@import "{{SCOPE}}/ui/styles"` in consuming app | Not needed (same bundle) |
184
+ | `@source` directive | Required (cross-package scanning) | Not needed (same project) |
185
+ | shadcn CLI | Run from `packages/ui/` | Run from project root |
186
+
187
+ ### What Stays the Same
188
+
189
+ - Path-based exports pattern (via `package.json` exports or TypeScript paths)
190
+ - `cn()` utility and CVA pattern
191
+ - `components.json` for shadcn CLI
192
+ - Component file organization (`components/ui/`, `icons/`, `utils/`)
193
+
194
+ ---
195
+
196
+ ## File Manifest
197
+
198
+ | File | Purpose | Monorepo Target | Single-Repo Target |
199
+ |---|---|---|---|
200
+ | `files/ui/styles/globals.css` | UI package styles (imports tailwind-config) | `packages/ui/styles/globals.css` | `src/ui/styles/globals.css` |
201
+ | `files/ui/utils/cn.ts` | Class merging utility (clsx + tailwind-merge) | `packages/ui/utils/cn.ts` | `src/ui/utils/cn.ts` |
202
+ | `files/ui/utils/cva.ts` | CVA re-export for component variants | `packages/ui/utils/cva.ts` | `src/ui/utils/cva.ts` |
203
+ | `files/ui/components.json` | shadcn CLI configuration | `packages/ui/components.json` | `components.json` (project root) |
204
+ | `files/ui/package.json` | Package config with exports, imports, deps | `packages/ui/package.json` | N/A (use root `package.json`) |
205
+ | `files/ui/tsconfig.json` | TypeScript config extending shared base | `packages/ui/tsconfig.json` | N/A (use root `tsconfig.json`) |
206
+
207
+ ---
208
+
209
+ ## Integration Steps
210
+
211
+ ### Phase 1: Package Setup
212
+
213
+ 1. Create `packages/ui/` directory
214
+ 2. Copy `package.json` — replace `{{SCOPE}}`
215
+ 3. Copy `tsconfig.json` — replace `{{SCOPE}}`
216
+ 4. Copy `components.json`
217
+
218
+ ### Phase 2: Utilities and Styles
219
+
220
+ 5. Create `utils/` directory
221
+ 6. Copy `cn.ts`
222
+ 7. Copy `cva.ts`
223
+ 8. Create `styles/` directory
224
+ 9. Copy `globals.css` — replace `{{SCOPE}}`
225
+
226
+ ### Phase 3: Directory Structure
227
+
228
+ 10. Create `components/ui/` directory (empty — shadcn will populate it)
229
+ 11. Create `icons/` directory (empty — user adds brand assets)
230
+ 12. Create `icons/logos/` directory
231
+
232
+ ### Phase 4: Consuming App Integration
233
+
234
+ 13. Update `apps/web/app/globals.css`:
235
+ - Add `@import "{{SCOPE}}/ui/styles";` after the tailwind-config import
236
+ - Add `@plugin "@tailwindcss/typography";`
237
+ - Add `@source "../../../packages/ui";` (compute relative path based on app location)
238
+ 14. Verify `pnpm-workspace.yaml` includes `packages/*`
239
+
240
+ ### Phase 5: Dependency Installation
241
+
242
+ 15. Run `pnpm install` to wire workspace dependencies
243
+ 16. Verify no peer dependency warnings
244
+
245
+ ### Phase 6: Verification
246
+
247
+ 17. Run `pnpm dev` — no CSS/import errors
248
+ 18. Try adding a shadcn component: `cd packages/ui && pnpm dlx shadcn@latest add button`
249
+ 19. Import and use the button in `apps/web/` — verify it renders with correct styles
250
+
251
+ ---
252
+
253
+ ## Adding Components
254
+
255
+ After initial scaffolding, add shadcn/ui components:
256
+
257
+ ```bash
258
+ # From packages/ui/
259
+ pnpm dlx shadcn@latest add button
260
+ pnpm dlx shadcn@latest add card
261
+ pnpm dlx shadcn@latest add input
262
+ ```
263
+
264
+ Components are generated in `components/ui/` and immediately available to consuming apps via path-based exports.
265
+
266
+ ### Custom Components
267
+
268
+ For non-shadcn components, create files in `components/`:
269
+
270
+ ```typescript
271
+ // packages/ui/components/feature-card.tsx
272
+ import { cn } from "#utils/cn";
273
+
274
+ interface FeatureCardProps {
275
+ title: string;
276
+ className?: string;
277
+ children: React.ReactNode;
278
+ }
279
+
280
+ export function FeatureCard({ title, className, children }: FeatureCardProps) {
281
+ return (
282
+ <div className={cn("rounded-lg border p-6", className)}>
283
+ <h3 className="text-lg font-semibold">{title}</h3>
284
+ {children}
285
+ </div>
286
+ );
287
+ }
288
+ ```
289
+
290
+ Import in consuming apps: `import { FeatureCard } from "@scope/ui/components/feature-card";`
291
+
292
+ ---
293
+
294
+ ## Maintenance Hooks
295
+
296
+ ### Component & Style Hooks
297
+
298
+ | When you... | Then do... | Why |
299
+ |---|---|---|
300
+ | Add a shadcn component | Run `pnpm dlx shadcn@latest add <name>` from `packages/ui/` | Generates in the correct location with proper aliases |
301
+ | Add a new app that uses UI | Add `@import "{{SCOPE}}/ui/styles"` and `@source` directive to the app's `globals.css` | New apps don't automatically see UI package classes |
302
+ | Add a new export directory | Add it to both `exports` and `imports` in `packages/ui/package.json` | Missing exports = import errors in consuming apps |
303
+ | Modify component variants | Update CVA definitions and ensure `cn()` is used for className composition | Inconsistent class merging = broken styles |
304
+ | Add an icon | Place in `icons/` or `icons/logos/` — export is automatic via wildcard | Follows the path-based export convention |
305
+
306
+ ### Condensed Rules for project rules file
307
+
308
+ ```markdown
309
+ ### ui-shared-components maintenance
310
+ - Add shadcn components via `pnpm dlx shadcn@latest add <name>` from packages/ui/
311
+ - Use cn() for all className composition — never concatenate class strings manually
312
+ - Internal imports use #prefix (#components/ui/button); cross-package imports use @scope/ui/components/ui/button
313
+ - After adding a new export directory: add to both exports and imports in packages/ui/package.json
314
+ - After adding a new consuming app: add @import and @source directive to the app's globals.css
315
+ ```
316
+
317
+ ---
318
+
319
+ ## What's Configurable
320
+
321
+ - shadcn style (`new-york`, `default`, or custom)
322
+ - Icon library (`lucide`, `phosphor`, `radix`)
323
+ - Which consuming apps get the globals.css update
324
+ - Additional export directories
325
+
326
+ ## What's Opinionated
327
+
328
+ - **Path-based exports** — no barrel re-exports for components
329
+ - **No build step** — exports TypeScript source, consuming apps transpile
330
+ - **shadcn/ui conventions** — `components.json`, `cn()`, CVA variants
331
+ - **`#` subpath imports** — internal package imports use Node.js subpath imports
332
+ - **Flat component structure** — `components/ui/` for shadcn, `components/` for custom, `icons/` for assets
333
+
334
+ ## Project Context Output
335
+
336
+ Appends to `.project-context.md` under `## Installed Blueprints`:
337
+
338
+ ```yaml
339
+ ### ui-shared-components
340
+ blueprint: ui-shared-components
341
+ choices:
342
+ shadcn_style: new-york
343
+ icon_library: lucide
344
+ include_cva: true
345
+ files_created:
346
+ - packages/ui/package.json
347
+ - packages/ui/tsconfig.json
348
+ - packages/ui/components.json
349
+ - packages/ui/styles/globals.css
350
+ - packages/ui/utils/cn.ts
351
+ - packages/ui/utils/cva.ts
352
+ globals_css_updated:
353
+ - apps/web/app/globals.css
354
+ packages_added:
355
+ - "@radix-ui/react-slot"
356
+ - class-variance-authority
357
+ - clsx
358
+ - tailwind-merge
359
+ - tw-animate-css
360
+ - shadcn
361
+ ```
362
+
363
+ ---
364
+
365
+ ## References
366
+
367
+ - **shadcn/ui Docs:** https://ui.shadcn.com/docs
368
+ - **shadcn/ui Monorepo Guide:** https://ui.shadcn.com/docs/monorepo
369
+ - **Tailwind CSS v4:** https://tailwindcss.com/docs
370
+ - **Class Variance Authority:** https://cva.style/docs
371
+ - **Node.js Subpath Imports:** https://nodejs.org/api/packages.html#subpath-imports
372
+ - **Radix UI Primitives:** https://www.radix-ui.com/primitives
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "style": "new-york",
4
+ "rsc": true,
5
+ "tsx": true,
6
+ "tailwind": {
7
+ "config": "",
8
+ "css": "styles/globals.css",
9
+ "baseColor": "neutral",
10
+ "cssVariables": true,
11
+ "prefix": ""
12
+ },
13
+ "iconLibrary": "lucide",
14
+ "aliases": {
15
+ "components": "#components",
16
+ "utils": "#utils",
17
+ "ui": "#components/ui",
18
+ "lib": "#utils",
19
+ "hooks": "#hooks"
20
+ }
21
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "{{SCOPE}}/ui",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "ui:add": "pnpm dlx shadcn@latest add"
7
+ },
8
+ "imports": {
9
+ "#components/*": "./components/*.tsx",
10
+ "#components/ui/*": "./components/ui/*.tsx",
11
+ "#utils/*": "./utils/*.ts",
12
+ "#hooks/*": "./hooks/*.ts",
13
+ "#types/*": "./types/*.ts"
14
+ },
15
+ "exports": {
16
+ "./components/*": "./components/*.tsx",
17
+ "./components/ui/*": "./components/ui/*.tsx",
18
+ "./utils/*": "./utils/*.ts",
19
+ "./styles": "./styles/globals.css",
20
+ "./icons/*": "./icons/*.tsx",
21
+ "./icons/logos/*": "./icons/logos/*.tsx"
22
+ },
23
+ "dependencies": {
24
+ "{{SCOPE}}/tailwind-config": "workspace:*",
25
+ "@radix-ui/react-slot": "^1.2",
26
+ "class-variance-authority": "^0.7",
27
+ "clsx": "^2.1",
28
+ "react": "^19",
29
+ "react-dom": "^19",
30
+ "shadcn": "^3",
31
+ "tailwind-merge": "^3",
32
+ "tw-animate-css": "^1"
33
+ },
34
+ "devDependencies": {
35
+ "{{SCOPE}}/typescript-config": "workspace:*",
36
+ "@tailwindcss/postcss": "^4",
37
+ "@types/react": "^19",
38
+ "@types/react-dom": "^19",
39
+ "tailwindcss": "^4",
40
+ "typescript": "^5.9"
41
+ }
42
+ }
@@ -0,0 +1,2 @@
1
+ @import "tailwindcss";
2
+ @import "{{SCOPE}}/tailwind-config";
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "{{SCOPE}}/typescript-config/react-library.json",
3
+ "compilerOptions": {
4
+ "outDir": "dist",
5
+ "rootDir": "."
6
+ },
7
+ "include": ["."],
8
+ "exclude": ["node_modules", "dist"]
9
+ }
@@ -0,0 +1,6 @@
1
+ import { type ClassValue, clsx } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs));
6
+ }
@@ -0,0 +1,4 @@
1
+ import { cva } from "class-variance-authority";
2
+
3
+ export { cva };
4
+ export type { VariantProps } from "class-variance-authority";
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ import pc3 from "picocolors";
6
6
 
7
7
  // src/constants.ts
8
8
  var API_URL = process.env["WITHMATA_API_URL"] || "https://blueprints.withmata.dev";
9
- var VERSION = "0.3.1";
9
+ var VERSION = "0.3.2";
10
10
 
11
11
  // src/steps/auth.ts
12
12
  import { log } from "@clack/prompts";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@withmata/blueprints",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "Set up AI-powered project blueprints for Claude Code, OpenCode, and Cursor",
5
5
  "type": "module",
6
6
  "bin": {