create-cloudinary-react 1.0.0-beta.17 → 1.0.0-beta.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ # [1.0.0-beta.19](https://github.com/cloudinary-devs/create-cloudinary-react/compare/v1.0.0-beta.18...v1.0.0-beta.19) (2026-02-18)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * update readme ([b7a77ca](https://github.com/cloudinary-devs/create-cloudinary-react/commit/b7a77caaf4bf052c68bd912a0ae9c51d424d07cd))
7
+
8
+ # [1.0.0-beta.18](https://github.com/cloudinary-devs/create-cloudinary-react/compare/v1.0.0-beta.17...v1.0.0-beta.18) (2026-02-18)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * update registration link ([2a69d7a](https://github.com/cloudinary-devs/create-cloudinary-react/commit/2a69d7ada9de1cb2751bbd4c1d344422b4c2dd5e))
14
+ * update video player example ([9db39ee](https://github.com/cloudinary-devs/create-cloudinary-react/commit/9db39ee8fc149c748ea422544a79b45a60365f47))
15
+
1
16
  # [1.0.0-beta.17](https://github.com/cloudinary-devs/create-cloudinary-react/compare/v1.0.0-beta.16...v1.0.0-beta.17) (2026-02-12)
2
17
 
3
18
 
package/README.md CHANGED
@@ -10,7 +10,7 @@ Scaffold a Cloudinary React + Vite + TypeScript project with interactive setup.
10
10
 
11
11
  - Node.js 18+ installed
12
12
  - A Cloudinary account (free tier available)
13
- - [Sign up for free](https://cloudinary.com/users/register/free)
13
+ - [Sign up for free](https://cld.media/reactregister)
14
14
  - Your cloud name is in your [dashboard](https://console.cloudinary.com/app/home/dashboard)
15
15
 
16
16
  ## Usage
@@ -44,10 +44,10 @@ During setup, you'll be asked which AI coding assistant(s) you're using. The CLI
44
44
 
45
45
  - ✅ **Cursor** → `.cursorrules` + `.cursor/mcp.json` (if selected)
46
46
  - ✅ **GitHub Copilot** → `.github/copilot-instructions.md`
47
- - ✅ **Claude Code (VS Code extension)** → `.claude`, `claude.md` + `.cursor/mcp.json` (if selected)
47
+ - ✅ **Claude Code** → `CLAUDE.md` + `.mcp.json` (if selected)
48
48
  - ✅ **Generic AI tools** → `AI_INSTRUCTIONS.md`, `PROMPT.md`
49
49
 
50
- **MCP Configuration**: The `.cursor/mcp.json` file is automatically generated if you select Cursor or Claude, as it works with both tools.
50
+ **MCP Configuration**: Cursor and Claude Code use different config paths. If you select **Cursor**, the CLI writes `.cursor/mcp.json`. If you select **Claude**, it writes `.mcp.json` in the project root. Each tool only reads its own path, so both files are generated when you select both.
51
51
 
52
52
  These rules help AI assistants understand Cloudinary React SDK patterns, common errors, and best practices. The generated app also includes an "AI Prompts" section with ready-to-use suggestions for your AI assistant.
53
53
 
package/cli.js CHANGED
@@ -70,7 +70,7 @@ async function main() {
70
70
  } else {
71
71
 
72
72
  console.log(chalk.cyan.bold('\n🚀 Cloudinary React + Vite\n'));
73
- console.log(chalk.gray('💡 Need a Cloudinary account? Sign up for free: https://cloudinary.com/users/register/free\n'));
73
+ console.log(chalk.gray('💡 Need a Cloudinary account? Sign up for free: https://cld.media/reactregister\n'));
74
74
 
75
75
  const questions = [
76
76
  {
@@ -101,7 +101,7 @@ async function main() {
101
101
  if (!input.trim()) {
102
102
  return chalk.yellow(
103
103
  'Cloud name is required.\n' +
104
- ' → Sign up: https://cloudinary.com/users/register/free\n' +
104
+ ' → Sign up: https://cld.media/reactregister\n' +
105
105
  ' → Find your cloud name: https://console.cloudinary.com/app/home/dashboard'
106
106
  );
107
107
  }
@@ -141,7 +141,7 @@ async function main() {
141
141
  choices: [
142
142
  { name: 'Cursor', value: 'cursor' },
143
143
  { name: 'GitHub Copilot', value: 'copilot' },
144
- { name: 'Claude Code (VS Code extension)', value: 'claude' },
144
+ { name: 'Claude Code', value: 'claude' },
145
145
  { name: 'Other / Generic AI tools', value: 'generic' },
146
146
  ],
147
147
  default: ['cursor'],
@@ -262,18 +262,21 @@ async function main() {
262
262
  writeFileSync(join(projectPath, 'PROMPT.md'), aiRulesContent);
263
263
  }
264
264
 
265
- // Generate MCP configuration if using Cursor or Claude (MCP works with both)
266
- if (aiTools.includes('cursor') || aiTools.includes('claude')) {
267
- const mcpTemplatePath = join(TEMPLATES_DIR, '.cursor/mcp.json.template');
268
- if (existsSync(mcpTemplatePath)) {
265
+ // Generate MCP configuration: Cursor uses .cursor/mcp.json, Claude Code uses .mcp.json in project root
266
+ const mcpTemplatePath = join(TEMPLATES_DIR, '.cursor/mcp.json.template');
267
+ if (existsSync(mcpTemplatePath)) {
268
+ const mcpContent = replaceTemplate(
269
+ readFileSync(mcpTemplatePath, 'utf-8'),
270
+ templateVars
271
+ );
272
+ if (aiTools.includes('cursor')) {
269
273
  const cursorDir = join(projectPath, '.cursor');
270
274
  mkdirSync(cursorDir, { recursive: true });
271
- const mcpContent = replaceTemplate(
272
- readFileSync(mcpTemplatePath, 'utf-8'),
273
- templateVars
274
- );
275
275
  writeFileSync(join(cursorDir, 'mcp.json'), mcpContent);
276
276
  }
277
+ if (aiTools.includes('claude')) {
278
+ writeFileSync(join(projectPath, '.mcp.json'), mcpContent);
279
+ }
277
280
  }
278
281
  }
279
282
 
@@ -291,9 +294,8 @@ async function main() {
291
294
  if (aiTools.includes('copilot')) console.log(chalk.gray(' • GitHub Copilot: .github/copilot-instructions.md'));
292
295
  if (aiTools.includes('claude')) console.log(chalk.gray(' • Claude: CLAUDE.md'));
293
296
  if (aiTools.includes('generic')) console.log(chalk.gray(' • Generic: AI_INSTRUCTIONS.md, PROMPT.md'));
294
- if (aiTools.includes('cursor') || aiTools.includes('claude')) {
295
- console.log(chalk.gray(' • MCP (Cursor/Claude): .cursor/mcp.json'));
296
- }
297
+ if (aiTools.includes('cursor')) console.log(chalk.gray(' • MCP (Cursor): .cursor/mcp.json'));
298
+ if (aiTools.includes('claude')) console.log(chalk.gray(' • MCP (Claude Code): .mcp.json'));
297
299
  console.log('');
298
300
  }
299
301
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-cloudinary-react",
3
- "version": "1.0.0-beta.17",
3
+ "version": "1.0.0-beta.19",
4
4
  "description": "Scaffold a Cloudinary React + Vite + TypeScript project with interactive setup",
5
5
  "type": "module",
6
6
  "bin": {
@@ -420,7 +420,8 @@ Use when the user asks for a **video player** (styled UI, controls, playlists).
420
420
  **Rule: imperative element only.** Do **not** pass a React-managed `<video ref={...} />` to the player — the library mutates the DOM and React will throw removeChild errors. Create the video element with `document.createElement('video')`, append it to a container ref, and pass that element to `videoPlayer(el, ...)`.
421
421
 
422
422
  - **Package**: `cloudinary-video-player`. Install with `npm install cloudinary-video-player` (no version).
423
- - **Import**: `import { videoPlayer } from 'cloudinary-video-player'` (named) and `import 'cloudinary-video-player/cld-video-player.min.css'` (no `dist/` in path).
423
+ - **Import**: `import { videoPlayer } from 'cloudinary-video-player'` (named) and `import 'cloudinary-video-player/cld-video-player.min.css'` (no `dist/` in path). The package only exposes paths under `lib/` via `exports`; use `cld-video-player.min.css` (no `dist/`), which resolves to `lib/cld-video-player.min.css`.
424
+ - ❌ **WRONG**: `import 'cloudinary-video-player/dist/cld-video-player.min.css'` — package `exports` do not expose `dist/`; the valid path is `cloudinary-video-player/cld-video-player.min.css`.
424
425
  - **player.source()** takes an **object**: `player.source({ publicId: 'samples/elephants' })`. Not a string.
425
426
  - **Cleanup**: Call `player.dispose()`, then **only if** `el.parentNode` exists call `el.parentNode.removeChild(el)` (avoids NotFoundError).
426
427
  - **If init fails** (CSP, extensions, timing): render **AdvancedVideo** with the same publicId. Do not relax CSP in index.html or ask the user to disable extensions.
@@ -11,7 +11,7 @@ npm run dev
11
11
  ## Cloudinary Setup
12
12
 
13
13
  This project uses Cloudinary for image management. If you don't have a Cloudinary account yet:
14
- - [Sign up for free](https://cloudinary.com/users/register/free)
14
+ - [Sign up for free](https://cld.media/reactregister)
15
15
  - Find your cloud name in your [dashboard](https://console.cloudinary.com/app/home/dashboard)
16
16
 
17
17
  ## Environment Variables