create-cloudinary-react 1.0.0-beta.18 → 1.0.0-beta.20

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 (4) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +76 -31
  3. package/cli.js +14 -12
  4. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [1.0.0-beta.20](https://github.com/cloudinary-devs/create-cloudinary-react/compare/v1.0.0-beta.19...v1.0.0-beta.20) (2026-02-23)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * Merge pull request [#9](https://github.com/cloudinary-devs/create-cloudinary-react/issues/9) from jlooper-cloudinary/main ([9696686](https://github.com/cloudinary-devs/create-cloudinary-react/commit/96966864d65168b0210a8200f26c9d0d144b6fa9))
7
+
8
+ # [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)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * update readme ([b7a77ca](https://github.com/cloudinary-devs/create-cloudinary-react/commit/b7a77caaf4bf052c68bd912a0ae9c51d424d07cd))
14
+
1
15
  # [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)
2
16
 
3
17
 
package/README.md CHANGED
@@ -1,57 +1,99 @@
1
1
  # create-cloudinary-react
2
2
 
3
- > **Beta Release** - This is a beta version. We welcome feedback and bug reports!
4
-
5
- Part of the [Cloudinary Developers](https://github.com/cloudinary-devs) organization.
3
+ [![npm version](https://img.shields.io/npm/v/create-cloudinary-react.svg?style=flat-square)](https://www.npmjs.com/package/create-cloudinary-react)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)
5
+ [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
6
6
 
7
- Scaffold a Cloudinary React + Vite + TypeScript project with interactive setup.
7
+ **The fastest way to start building with Cloudinary and React.**
8
8
 
9
- ## Prerequisites
9
+ Scaffold a modern, production-ready Cloudinary application with React 19, Vite 6, and TypeScript 5. Features interactive setup, automatic environment configuration, and built-in AI coding assistance.
10
10
 
11
11
  - Node.js 18+ installed
12
12
  - A Cloudinary account (free tier available)
13
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
- ## Usage
16
+ > **Beta Release** - This is a beta version. We welcome feedback and bug reports!
17
+
18
+ Part of the [Cloudinary Developers](https://github.com/cloudinary-devs) organization.
19
+
20
+ ![Build with Cloudinary!](https://res.cloudinary.com/cloudinary-creators-community/image/upload/c_thumb,w_200,g_face/v1771434800/Tee-Mascot-Hacktoberfest-cloudicorn_x6zvtf.png)
21
+
22
+ ## 📽️ Demo
23
+
24
+ [![Watch the demo](https://res.cloudinary.com/drir0kpia/video/upload/so_1/reactstarterdemo.jpg)](https://res.cloudinary.com/drir0kpia/video/upload/v1771449633/reactstarterdemo.mp4)
25
+
26
+
27
+ ## 🎬 Features
28
+
29
+ - **🚀 Modern Stack**: React 19 + Vite 6 + TypeScript 5.7
30
+ - **📦 Cloudinary SDKs**: Pre-configured `@cloudinary/react`
31
+ - **🤖 AI-First**: Auto-generates configuration for Cursor, GitHub Copilot, and Claude
32
+ - **🛠️ Best Practices**: ESLint 9 + TypeScript-ESLint, strict type checking
33
+ - **⚡ Interactive Setup**: Validates your cloud name and configures `.env` automatically
34
+ - **🎨 Typed Components**: Includes a fully typed Upload Widget component
35
+ - **🔌 MCP Support**: Built-in Model Context Protocol configuration for advanced AI integrations
36
+
37
+ ## 🚀 Quick Start
38
+
39
+ Ensure you have Node.js 18+ installed.
17
40
 
18
41
  ```bash
19
42
  npx create-cloudinary-react
20
43
  ```
44
+ *(No installation required)*
45
+
46
+ The CLI will guide you through:
47
+ 1. **Project Name**: naming your new folder
48
+ 2. **Cloud Name**: entering your [Cloudinary cloud name](https://console.cloudinary.com/app/home/dashboard)
49
+ 3. **Upload Preset** (Optional): handling unsigned uploads
50
+ 4. **AI Assistant**: generating custom rules for your tool of choice (Cursor, VS Code, etc.)
51
+
52
+ ## 🛠️ What's Included
21
53
 
22
- The CLI will prompt you for:
23
- - Project name
24
- - **Cloudinary cloud name** (found in your [dashboard](https://console.cloudinary.com/app/home/dashboard))
25
- - Unsigned upload preset (optional - required for uploads, but transformations work without it)
26
- - AI coding assistant(s) you're using (Cursor, GitHub Copilot, Claude, etc.)
27
- - Whether to install dependencies
28
- - Whether to start dev server
54
+ Your new project comes with:
29
55
 
30
- ## Features
56
+ - **`src/`**: specialized for Cloudinary workflows
57
+ - **`src/components/UploadWidget.tsx`**: A ready-to-use, typed upload component
58
+ - **`.env`**: Pre-filled with your Cloud Name (and Upload Preset if provided)
59
+ - **`README.md`**: Custom instructions for your specific project
60
+ - **AI Configuration**:
61
+ - `.cursorrules` / `.cursor/mcp.json` (for Cursor)
62
+ - `.github/copilot-instructions.md` (for Copilot)
63
+ - `.claude` / `claude.md` (for Claude)
31
64
 
32
- - Interactive setup with validation
33
- - ✅ Pre-configured Cloudinary React SDK
34
- - ✅ TypeScript + Vite + React 19
35
- - ✅ Typed Upload Widget component
36
- - ✅ Environment variables with VITE_ prefix
37
- - ✅ Multi-tool AI assistant support (Cursor, GitHub Copilot, Claude, and more)
38
- - ✅ MCP configuration for Cloudinary integration
39
- - ✅ ESLint + TypeScript configured
65
+ ## 🤖 AI Assistant Support
40
66
 
41
- ## AI Assistant Support
67
+ We believe AI is the future of development. This starter kit doesn't just give you code; it gives your AI context.
42
68
 
43
- During setup, you'll be asked which AI coding assistant(s) you're using. The CLI will generate the appropriate configuration files:
69
+ During setup, select your AI tool to generate **Context Rules**. These rules teach your AI:
70
+ - How to construct Cloudinary transformation URLs correctly
71
+ - How to use the `@cloudinary/react` SDK components
72
+ - Common pitfalls to avoid (like mixing up import paths)
73
+ - How to handle upload widget events
44
74
 
45
- - ✅ **Cursor** → `.cursorrules` + `.cursor/mcp.json` (if selected)
46
- - ✅ **GitHub Copilot** `.github/copilot-instructions.md`
47
- - ✅ **Claude Code (VS Code extension)** → `.claude`, `claude.md` + `.cursor/mcp.json` (if selected)
48
- - ✅ **Generic AI tools** `AI_INSTRUCTIONS.md`, `PROMPT.md`
75
+ **Supported Tools:**
76
+ - ✅ **Cursor** (Rules + MCP)
77
+ - ✅ **GitHub Copilot** (Instructions)
78
+ - ✅ **Claude** (Project context + MCP)
79
+ - ✅ **Generic LLMs** (System prompts provided)
49
80
 
50
- **MCP Configuration**: The `.cursor/mcp.json` file is automatically generated if you select Cursor or Claude, as it works with both tools.
81
+ ## 📋 Prerequisites
51
82
 
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.
83
+ - **Node.js 18+**
84
+ - **Cloudinary Account**: [Sign up for free](https://cloudinary.com/users/register/free) if you haven't already.
53
85
 
54
- ## Development
86
+ ## 🤝 Contributing
87
+
88
+ Contributions are welcome! Please feel free to submit a Pull Request.
89
+
90
+ 1. Fork the repository
91
+ 2. Create your feature branch (`git checkout -b feature/amazing-feature`)
92
+ 3. Commit your changes (`git commit -m 'feat: add some amazing feature'`)
93
+ 4. Push to the branch (`git push origin feature/amazing-feature`)
94
+ 5. Open a Pull Request
95
+
96
+ ## ⚙️ Development
55
97
 
56
98
  This project uses [Conventional Commits](https://www.conventionalcommits.org/) for version management and [semantic-release](https://github.com/semantic-release/semantic-release) for automated releases.
57
99
 
@@ -79,3 +121,6 @@ Releases are triggered manually via GitHub Actions workflow. The workflow uses n
79
121
  - `perf`: Performance improvements
80
122
  - `chore`: Other changes
81
123
 
124
+ ## 📄 License
125
+
126
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
package/cli.js CHANGED
@@ -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.18",
3
+ "version": "1.0.0-beta.20",
4
4
  "description": "Scaffold a Cloudinary React + Vite + TypeScript project with interactive setup",
5
5
  "type": "module",
6
6
  "bin": {