@siteboon/claude-code-ui 1.8.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 (106) hide show
  1. package/.env.example +12 -0
  2. package/.nvmrc +1 -0
  3. package/LICENSE +675 -0
  4. package/README.md +275 -0
  5. package/index.html +48 -0
  6. package/package.json +84 -0
  7. package/postcss.config.js +6 -0
  8. package/public/convert-icons.md +53 -0
  9. package/public/favicon.png +0 -0
  10. package/public/favicon.svg +9 -0
  11. package/public/generate-icons.js +49 -0
  12. package/public/icons/claude-ai-icon.svg +1 -0
  13. package/public/icons/cursor.svg +1 -0
  14. package/public/icons/generate-icons.md +19 -0
  15. package/public/icons/icon-128x128.png +0 -0
  16. package/public/icons/icon-128x128.svg +12 -0
  17. package/public/icons/icon-144x144.png +0 -0
  18. package/public/icons/icon-144x144.svg +12 -0
  19. package/public/icons/icon-152x152.png +0 -0
  20. package/public/icons/icon-152x152.svg +12 -0
  21. package/public/icons/icon-192x192.png +0 -0
  22. package/public/icons/icon-192x192.svg +12 -0
  23. package/public/icons/icon-384x384.png +0 -0
  24. package/public/icons/icon-384x384.svg +12 -0
  25. package/public/icons/icon-512x512.png +0 -0
  26. package/public/icons/icon-512x512.svg +12 -0
  27. package/public/icons/icon-72x72.png +0 -0
  28. package/public/icons/icon-72x72.svg +12 -0
  29. package/public/icons/icon-96x96.png +0 -0
  30. package/public/icons/icon-96x96.svg +12 -0
  31. package/public/icons/icon-template.svg +12 -0
  32. package/public/logo.svg +9 -0
  33. package/public/manifest.json +61 -0
  34. package/public/screenshots/cli-selection.png +0 -0
  35. package/public/screenshots/desktop-main.png +0 -0
  36. package/public/screenshots/mobile-chat.png +0 -0
  37. package/public/screenshots/tools-modal.png +0 -0
  38. package/public/sw.js +49 -0
  39. package/server/claude-cli.js +391 -0
  40. package/server/cursor-cli.js +250 -0
  41. package/server/database/db.js +86 -0
  42. package/server/database/init.sql +16 -0
  43. package/server/index.js +1167 -0
  44. package/server/middleware/auth.js +80 -0
  45. package/server/projects.js +1063 -0
  46. package/server/routes/auth.js +135 -0
  47. package/server/routes/cursor.js +794 -0
  48. package/server/routes/git.js +823 -0
  49. package/server/routes/mcp-utils.js +48 -0
  50. package/server/routes/mcp.js +552 -0
  51. package/server/routes/taskmaster.js +1971 -0
  52. package/server/utils/mcp-detector.js +198 -0
  53. package/server/utils/taskmaster-websocket.js +129 -0
  54. package/src/App.jsx +751 -0
  55. package/src/components/ChatInterface.jsx +3485 -0
  56. package/src/components/ClaudeLogo.jsx +11 -0
  57. package/src/components/ClaudeStatus.jsx +107 -0
  58. package/src/components/CodeEditor.jsx +422 -0
  59. package/src/components/CreateTaskModal.jsx +88 -0
  60. package/src/components/CursorLogo.jsx +9 -0
  61. package/src/components/DarkModeToggle.jsx +35 -0
  62. package/src/components/DiffViewer.jsx +41 -0
  63. package/src/components/ErrorBoundary.jsx +73 -0
  64. package/src/components/FileTree.jsx +480 -0
  65. package/src/components/GitPanel.jsx +1283 -0
  66. package/src/components/ImageViewer.jsx +54 -0
  67. package/src/components/LoginForm.jsx +110 -0
  68. package/src/components/MainContent.jsx +577 -0
  69. package/src/components/MicButton.jsx +272 -0
  70. package/src/components/MobileNav.jsx +88 -0
  71. package/src/components/NextTaskBanner.jsx +695 -0
  72. package/src/components/PRDEditor.jsx +871 -0
  73. package/src/components/ProtectedRoute.jsx +44 -0
  74. package/src/components/QuickSettingsPanel.jsx +262 -0
  75. package/src/components/Settings.jsx +2023 -0
  76. package/src/components/SetupForm.jsx +135 -0
  77. package/src/components/Shell.jsx +663 -0
  78. package/src/components/Sidebar.jsx +1665 -0
  79. package/src/components/StandaloneShell.jsx +106 -0
  80. package/src/components/TaskCard.jsx +210 -0
  81. package/src/components/TaskDetail.jsx +406 -0
  82. package/src/components/TaskIndicator.jsx +108 -0
  83. package/src/components/TaskList.jsx +1054 -0
  84. package/src/components/TaskMasterSetupWizard.jsx +603 -0
  85. package/src/components/TaskMasterStatus.jsx +86 -0
  86. package/src/components/TodoList.jsx +91 -0
  87. package/src/components/Tooltip.jsx +91 -0
  88. package/src/components/ui/badge.jsx +31 -0
  89. package/src/components/ui/button.jsx +46 -0
  90. package/src/components/ui/input.jsx +19 -0
  91. package/src/components/ui/scroll-area.jsx +23 -0
  92. package/src/contexts/AuthContext.jsx +158 -0
  93. package/src/contexts/TaskMasterContext.jsx +324 -0
  94. package/src/contexts/TasksSettingsContext.jsx +95 -0
  95. package/src/contexts/ThemeContext.jsx +94 -0
  96. package/src/contexts/WebSocketContext.jsx +29 -0
  97. package/src/hooks/useAudioRecorder.js +109 -0
  98. package/src/hooks/useVersionCheck.js +39 -0
  99. package/src/index.css +822 -0
  100. package/src/lib/utils.js +6 -0
  101. package/src/main.jsx +10 -0
  102. package/src/utils/api.js +141 -0
  103. package/src/utils/websocket.js +109 -0
  104. package/src/utils/whisper.js +37 -0
  105. package/tailwind.config.js +63 -0
  106. package/vite.config.js +29 -0
package/README.md ADDED
@@ -0,0 +1,275 @@
1
+ <div align="center">
2
+ <img src="public/logo.svg" alt="Claude Code UI" width="64" height="64">
3
+ <h1>Claude Code UI</h1>
4
+ </div>
5
+
6
+
7
+ A desktop and mobile UI for [Claude Code](https://docs.anthropic.com/en/docs/claude-code), and [Cursor CLI](https://docs.cursor.com/en/cli/overview). You can use it locally or remotely to view your active projects and sessions in Claude Code or Cursor and make changes to them from everywhere (mobile or desktop). This gives you a proper interface that works everywhere. Supports models including **Claude Sonnet 4**, **Opus 4.1**, and **GPT-5**
8
+
9
+ ## Screenshots
10
+
11
+ <div align="center">
12
+
13
+ <table>
14
+ <tr>
15
+ <td align="center">
16
+ <h3>Desktop View</h3>
17
+ <img src="public/screenshots/desktop-main.png" alt="Desktop Interface" width="400">
18
+ <br>
19
+ <em>Main interface showing project overview and chat</em>
20
+ </td>
21
+ <td align="center">
22
+ <h3>Mobile Experience</h3>
23
+ <img src="public/screenshots/mobile-chat.png" alt="Mobile Interface" width="250">
24
+ <br>
25
+ <em>Responsive mobile design with touch navigation</em>
26
+ </td>
27
+ </tr>
28
+ <tr>
29
+ <td align="center" colspan="2">
30
+ <h3>CLI Selection</h3>
31
+ <img src="public/screenshots/cli-selection.png" alt="CLI Selection" width="400">
32
+ <br>
33
+ <em>Select between Claude Code and Cursor CLI</em>
34
+ </td>
35
+ </tr>
36
+ </table>
37
+
38
+
39
+
40
+ </div>
41
+
42
+ ## Features
43
+
44
+ - **Responsive Design** - Works seamlessly across desktop, tablet, and mobile so you can also use Claude Code from mobile
45
+ - **Interactive Chat Interface** - Built-in chat interface for seamless communication with Claude Code or Cursor
46
+ - **Integrated Shell Terminal** - Direct access to Claude Code or Cursor CLI through built-in shell functionality
47
+ - **File Explorer** - Interactive file tree with syntax highlighting and live editing
48
+ - **Git Explorer** - View, stage and commit your changes. You can also switch branches
49
+ - **Session Management** - Resume conversations, manage multiple sessions, and track history
50
+ - **TaskMaster AI Integration** *(Optional)* - Advanced project management with AI-powered task planning, PRD parsing, and workflow automation
51
+ - **Model Compatibility** - Works with Claude Sonnet 4, Opus 4.1, and GPT-5
52
+
53
+
54
+ ## Quick Start
55
+
56
+ ### Prerequisites
57
+
58
+ - [Node.js](https://nodejs.org/) v20 or higher
59
+ - [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code) installed and configured, and/or
60
+ - [Cursor CLI](https://docs.cursor.com/en/cli/overview) installed and configured
61
+
62
+ ### Installation
63
+
64
+ 1. **Clone the repository:**
65
+ ```bash
66
+ git clone https://github.com/siteboon/claudecodeui.git
67
+ cd claudecodeui
68
+ ```
69
+
70
+ 2. **Install dependencies:**
71
+ ```bash
72
+ npm install
73
+ ```
74
+
75
+ 3. **Configure environment:**
76
+ ```bash
77
+ cp .env.example .env
78
+ # Edit .env with your preferred settings
79
+ ```
80
+
81
+ 4. **Start the application:**
82
+ ```bash
83
+ # Development mode (with hot reload)
84
+ npm run dev
85
+
86
+ ```
87
+ The application will start at the port you specified in your .env
88
+
89
+ 5. **Open your browser:**
90
+ - Development: `http://localhost:3001`
91
+
92
+ ## Security & Tools Configuration
93
+
94
+ **🔒 Important Notice**: All Claude Code tools are **disabled by default**. This prevents potentially harmful operations from running automatically.
95
+
96
+ ### Enabling Tools
97
+
98
+ To use Claude Code's full functionality, you'll need to manually enable tools:
99
+
100
+ 1. **Open Tools Settings** - Click the gear icon in the sidebar
101
+ 3. **Enable Selectively** - Turn on only the tools you need
102
+ 4. **Apply Settings** - Your preferences are saved locally
103
+
104
+ <div align="center">
105
+
106
+ ![Tools Settings Modal](public/screenshots/tools-modal.png)
107
+ *Tools Settings interface - enable only what you need*
108
+
109
+ </div>
110
+
111
+ **Recommended approach**: Start with basic tools enabled and add more as needed. You can always adjust these settings later.
112
+
113
+ ## TaskMaster AI Integration *(Optional)*
114
+
115
+ Claude Code UI supports **[TaskMaster AI](https://github.com/eyaltoledano/claude-task-master)** (aka claude-task-master) integration for advanced project management and AI-powered task planning.
116
+
117
+ It provides
118
+ - AI-powered task generation from PRDs (Product Requirements Documents)
119
+ - Smart task breakdown and dependency management
120
+ - Visual task boards and progress tracking
121
+
122
+ **Setup & Documentation**: Visit the [TaskMaster AI GitHub repository](https://github.com/eyaltoledano/claude-task-master) for installation instructions, configuration guides, and usage examples.
123
+ After installing it you should be able to enable it from the Settings
124
+
125
+
126
+ ## Usage Guide
127
+
128
+ ### Core Features
129
+
130
+ #### Project Management
131
+ The UI automatically discovers Claude Code projects from `~/.claude/projects/` and provides:
132
+ - **Visual Project Browser** - All available projects with metadata and session counts
133
+ - **Project Actions** - Rename, delete, and organize projects
134
+ - **Smart Navigation** - Quick access to recent projects and sessions
135
+ - **MCP support** - Add your own MCP servers through the UI
136
+
137
+ #### Chat Interface
138
+ - **Use responsive chat or Claude Code/Cursor CLI** - You can either use the adapted chat interface or use the shell button to connect to your selected CLI.
139
+ - **Real-time Communication** - Stream responses from Claude with WebSocket connection
140
+ - **Session Management** - Resume previous conversations or start fresh sessions
141
+ - **Message History** - Complete conversation history with timestamps and metadata
142
+ - **Multi-format Support** - Text, code blocks, and file references
143
+
144
+ #### File Explorer & Editor
145
+ - **Interactive File Tree** - Browse project structure with expand/collapse navigation
146
+ - **Live File Editing** - Read, modify, and save files directly in the interface
147
+ - **Syntax Highlighting** - Support for multiple programming languages
148
+ - **File Operations** - Create, rename, delete files and directories
149
+
150
+ #### Git Explorer
151
+
152
+
153
+ #### TaskMaster AI Integration *(Optional)*
154
+ - **Visual Task Board** - Kanban-style interface for managing development tasks
155
+ - **PRD Parser** - Create Product Requirements Documents and parse them into structured tasks
156
+ - **Progress Tracking** - Real-time status updates and completion tracking
157
+
158
+ #### Session Management
159
+ - **Session Persistence** - All conversations automatically saved
160
+ - **Session Organization** - Group sessions by project and timestamp
161
+ - **Session Actions** - Rename, delete, and export conversation history
162
+ - **Cross-device Sync** - Access sessions from any device
163
+
164
+ ### Mobile App
165
+ - **Responsive Design** - Optimized for all screen sizes
166
+ - **Touch-friendly Interface** - Swipe gestures and touch navigation
167
+ - **Mobile Navigation** - Bottom tab bar for easy thumb navigation
168
+ - **Adaptive Layout** - Collapsible sidebar and smart content prioritization
169
+ - **Add shortcut to Home Screen** - Add a shortcut to your home screen and the app will behave like a PWA
170
+
171
+ ## Architecture
172
+
173
+ ### System Overview
174
+
175
+ ```
176
+ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
177
+ │ Frontend │ │ Backend │ │ Claude CLI │
178
+ │ (React/Vite) │◄──►│ (Express/WS) │◄──►│ Integration │
179
+ └─────────────────┘ └─────────────────┘ └─────────────────┘
180
+ ```
181
+
182
+ ### Backend (Node.js + Express)
183
+ - **Express Server** - RESTful API with static file serving
184
+ - **WebSocket Server** - Communication for chats and project refresh
185
+ - **CLI Integration (Claude Code / Cursor)** - Process spawning and management
186
+ - **Session Management** - JSONL parsing and conversation persistence
187
+ - **File System API** - Exposing file browser for projects
188
+
189
+ ### Frontend (React + Vite)
190
+ - **React 18** - Modern component architecture with hooks
191
+ - **CodeMirror** - Advanced code editor with syntax highlighting
192
+
193
+
194
+
195
+
196
+
197
+ ### Contributing
198
+
199
+ We welcome contributions! Please follow these guidelines:
200
+
201
+ #### Getting Started
202
+ 1. **Fork** the repository
203
+ 2. **Clone** your fork: `git clone <your-fork-url>`
204
+ 3. **Install** dependencies: `npm install`
205
+ 4. **Create** a feature branch: `git checkout -b feature/amazing-feature`
206
+
207
+ #### Development Process
208
+ 1. **Make your changes** following the existing code style
209
+ 2. **Test thoroughly** - ensure all features work correctly
210
+ 3. **Run quality checks**: `npm run lint && npm run format`
211
+ 4. **Commit** with descriptive messages following [Conventional Commits](https://conventionalcommits.org/)
212
+ 5. **Push** to your branch: `git push origin feature/amazing-feature`
213
+ 6. **Submit** a Pull Request with:
214
+ - Clear description of changes
215
+ - Screenshots for UI changes
216
+ - Test results if applicable
217
+
218
+ #### What to Contribute
219
+ - **Bug fixes** - Help us improve stability
220
+ - **New features** - Enhance functionality (discuss in issues first)
221
+ - **Documentation** - Improve guides and API docs
222
+ - **UI/UX improvements** - Better user experience
223
+ - **Performance optimizations** - Make it faster
224
+
225
+ ## Troubleshooting
226
+
227
+ ### Common Issues & Solutions
228
+
229
+ #### "No Claude projects found"
230
+ **Problem**: The UI shows no projects or empty project list
231
+ **Solutions**:
232
+ - Ensure [Claude CLI](https://docs.anthropic.com/en/docs/claude-code) is properly installed
233
+ - Run `claude` command in at least one project directory to initialize
234
+ - Verify `~/.claude/projects/` directory exists and has proper permissions
235
+ d
236
+
237
+ #### File Explorer Issues
238
+ **Problem**: Files not loading, permission errors, empty directories
239
+ **Solutions**:
240
+ - Check project directory permissions (`ls -la` in terminal)
241
+ - Verify the project path exists and is accessible
242
+ - Review server console logs for detailed error messages
243
+ - Ensure you're not trying to access system directories outside project scope
244
+
245
+
246
+ ## License
247
+
248
+ GNU General Public License v3.0 - see [LICENSE](LICENSE) file for details.
249
+
250
+ This project is open source and free to use, modify, and distribute under the GPL v3 license.
251
+
252
+ ## Acknowledgments
253
+
254
+ ### Built With
255
+ - **[Claude Code](https://docs.anthropic.com/en/docs/claude-code)** - Anthropic's official CLI
256
+ - **[React](https://react.dev/)** - User interface library
257
+ - **[Vite](https://vitejs.dev/)** - Fast build tool and dev server
258
+ - **[Tailwind CSS](https://tailwindcss.com/)** - Utility-first CSS framework
259
+ - **[CodeMirror](https://codemirror.net/)** - Advanced code editor
260
+ - **[TaskMaster AI](https://github.com/eyaltoledano/claude-task-master)** *(Optional)* - AI-powered project management and task planning
261
+
262
+ ## Support & Community
263
+
264
+ ### Stay Updated
265
+ - **Star** this repository to show support
266
+ - **Watch** for updates and new releases
267
+ - **Follow** the project for announcements
268
+
269
+ ### Sponsors
270
+ - [Siteboon - AI powered website builder](https://siteboon.ai)
271
+ ---
272
+
273
+ <div align="center">
274
+ <strong>Made with care for the Claude Code community.</strong>
275
+ </div>
package/index.html ADDED
@@ -0,0 +1,48 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
+ <link rel="icon" type="image/png" href="/favicon.png" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, viewport-fit=cover" />
8
+ <title>Claude Code UI</title>
9
+
10
+ <!-- PWA Manifest -->
11
+ <link rel="manifest" href="/manifest.json" />
12
+
13
+ <!-- iOS Safari PWA Meta Tags -->
14
+ <meta name="apple-mobile-web-app-capable" content="yes" />
15
+ <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
16
+ <meta name="apple-mobile-web-app-title" content="Claude UI" />
17
+
18
+ <!-- iOS Safari Icons -->
19
+ <link rel="apple-touch-icon" sizes="152x152" href="/icons/icon-152x152.png" />
20
+ <link rel="apple-touch-icon" sizes="180x180" href="/icons/icon-192x192.png" />
21
+
22
+ <!-- Theme Color -->
23
+ <meta name="theme-color" content="#ffffff" />
24
+ <meta name="msapplication-TileColor" content="#ffffff" />
25
+
26
+ <!-- Prevent zoom on iOS -->
27
+ <meta name="format-detection" content="telephone=no" />
28
+ </head>
29
+ <body>
30
+ <div id="root"></div>
31
+ <script type="module" src="/src/main.jsx"></script>
32
+
33
+ <!-- Service Worker Registration -->
34
+ <script>
35
+ if ('serviceWorker' in navigator) {
36
+ window.addEventListener('load', () => {
37
+ navigator.serviceWorker.register('/sw.js')
38
+ .then(registration => {
39
+ console.log('SW registered: ', registration);
40
+ })
41
+ .catch(registrationError => {
42
+ console.log('SW registration failed: ', registrationError);
43
+ });
44
+ });
45
+ }
46
+ </script>
47
+ </body>
48
+ </html>
package/package.json ADDED
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "@siteboon/claude-code-ui",
3
+ "version": "1.8.2",
4
+ "description": "A web-based UI for Claude Code CLI",
5
+ "type": "module",
6
+ "main": "server/index.js",
7
+ "homepage": "https://claudecodeui.siteboon.ai",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/siteboon/claudecodeui.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/siteboon/claudecodeui/issues"
14
+ },
15
+ "scripts": {
16
+ "dev": "concurrently --kill-others \"npm run server\" \"npm run client\"",
17
+ "server": "node server/index.js",
18
+ "client": "vite --host",
19
+ "build": "vite build",
20
+ "preview": "vite preview",
21
+ "start": "npm run build && npm run server",
22
+ "release": "release-it"
23
+ },
24
+ "keywords": [
25
+ "claude coode",
26
+ "ai",
27
+ "anthropic",
28
+ "ui",
29
+ "mobile"
30
+ ],
31
+ "author": "Claude Code UI Contributors",
32
+ "license": "MIT",
33
+ "dependencies": {
34
+ "@codemirror/lang-css": "^6.3.1",
35
+ "@codemirror/lang-html": "^6.4.9",
36
+ "@codemirror/lang-javascript": "^6.2.4",
37
+ "@codemirror/lang-json": "^6.0.1",
38
+ "@codemirror/lang-markdown": "^6.3.3",
39
+ "@codemirror/lang-python": "^6.2.1",
40
+ "@codemirror/theme-one-dark": "^6.1.2",
41
+ "@tailwindcss/typography": "^0.5.16",
42
+ "@uiw/react-codemirror": "^4.23.13",
43
+ "@xterm/addon-clipboard": "^0.1.0",
44
+ "@xterm/addon-webgl": "^0.18.0",
45
+ "bcrypt": "^6.0.0",
46
+ "better-sqlite3": "^12.2.0",
47
+ "chokidar": "^4.0.3",
48
+ "class-variance-authority": "^0.7.1",
49
+ "clsx": "^2.1.1",
50
+ "cors": "^2.8.5",
51
+ "cross-spawn": "^7.0.3",
52
+ "express": "^4.18.2",
53
+ "jsonwebtoken": "^9.0.2",
54
+ "lucide-react": "^0.515.0",
55
+ "mime-types": "^3.0.1",
56
+ "multer": "^2.0.1",
57
+ "node-fetch": "^2.7.0",
58
+ "node-pty": "^1.1.0-beta34",
59
+ "react": "^18.2.0",
60
+ "react-dom": "^18.2.0",
61
+ "react-dropzone": "^14.2.3",
62
+ "react-markdown": "^10.1.0",
63
+ "react-router-dom": "^6.8.1",
64
+ "sqlite": "^5.1.1",
65
+ "sqlite3": "^5.1.7",
66
+ "tailwind-merge": "^3.3.1",
67
+ "ws": "^8.14.2",
68
+ "xterm": "^5.3.0",
69
+ "xterm-addon-fit": "^0.8.0"
70
+ },
71
+ "devDependencies": {
72
+ "@types/react": "^18.2.43",
73
+ "@types/react-dom": "^18.2.17",
74
+ "@vitejs/plugin-react": "^4.6.0",
75
+ "autoprefixer": "^10.4.16",
76
+ "concurrently": "^8.2.2",
77
+ "node-gyp": "^10.0.0",
78
+ "postcss": "^8.4.32",
79
+ "release-it": "^19.0.5",
80
+ "sharp": "^0.34.2",
81
+ "tailwindcss": "^3.4.0",
82
+ "vite": "^7.0.4"
83
+ }
84
+ }
@@ -0,0 +1,6 @@
1
+ export default {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {},
5
+ },
6
+ }
@@ -0,0 +1,53 @@
1
+ # Convert SVG Icons to PNG
2
+
3
+ I've created SVG versions of the app icons that match the MessageSquare design from the sidebar. To convert them to PNG format, you can use one of these methods:
4
+
5
+ ## Method 1: Online Converter (Easiest)
6
+ 1. Go to https://cloudconvert.com/svg-to-png
7
+ 2. Upload each SVG file from the `/icons/` directory
8
+ 3. Download the PNG versions
9
+ 4. Replace the existing PNG files
10
+
11
+ ## Method 2: Using Node.js (if you have it)
12
+ ```bash
13
+ npm install sharp
14
+ node -e "
15
+ const sharp = require('sharp');
16
+ const fs = require('fs');
17
+ const sizes = [72, 96, 128, 144, 152, 192, 384, 512];
18
+ sizes.forEach(size => {
19
+ const svgPath = \`./icons/icon-\${size}x\${size}.svg\`;
20
+ const pngPath = \`./icons/icon-\${size}x\${size}.png\`;
21
+ if (fs.existsSync(svgPath)) {
22
+ sharp(svgPath).png().toFile(pngPath);
23
+ console.log(\`Converted \${svgPath} to \${pngPath}\`);
24
+ }
25
+ });
26
+ "
27
+ ```
28
+
29
+ ## Method 3: Using ImageMagick (if installed)
30
+ ```bash
31
+ cd public/icons
32
+ for size in 72 96 128 144 152 192 384 512; do
33
+ convert "icon-${size}x${size}.svg" "icon-${size}x${size}.png"
34
+ done
35
+ ```
36
+
37
+ ## Method 4: Using Inkscape (if installed)
38
+ ```bash
39
+ cd public/icons
40
+ for size in 72 96 128 144 152 192 384 512; do
41
+ inkscape --export-type=png "icon-${size}x${size}.svg"
42
+ done
43
+ ```
44
+
45
+ ## Icon Design
46
+ The new icons feature:
47
+ - Clean MessageSquare (chat bubble) design matching the sidebar
48
+ - Primary color background with rounded corners
49
+ - White stroke icon that's clearly visible
50
+ - Consistent sizing and proportions across all sizes
51
+ - Proper PWA-compliant format
52
+
53
+ Once converted, the PNG files will replace the existing ones and provide a consistent icon experience across all platforms.
Binary file
@@ -0,0 +1,9 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64">
2
+ <!-- Background fills entire canvas -->
3
+ <rect x="0" y="0" width="64" height="64" fill="hsl(240 5.9% 10%)"/>
4
+
5
+ <!-- MessageSquare icon - exact same as sidebar -->
6
+ <g transform="translate(32, 32) scale(1.333) translate(-12, -12)" stroke="white" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round">
7
+ <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
8
+ </g>
9
+ </svg>
@@ -0,0 +1,49 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ // Icon sizes needed
5
+ const sizes = [72, 96, 128, 144, 152, 192, 384, 512];
6
+
7
+ // SVG template function
8
+ function createIconSVG(size) {
9
+ const cornerRadius = Math.round(size * 0.25); // 25% corner radius
10
+ const strokeWidth = Math.max(2, Math.round(size * 0.06)); // Scale stroke width
11
+
12
+ // MessageSquare path scaled to size
13
+ const padding = Math.round(size * 0.25);
14
+ const iconSize = size - (padding * 2);
15
+ const startX = padding;
16
+ const startY = Math.round(padding * 0.7);
17
+ const endX = startX + iconSize;
18
+ const endY = startY + Math.round(iconSize * 0.6);
19
+ const tailX = startX;
20
+ const tailY = endY + Math.round(iconSize * 0.3);
21
+
22
+ return `<svg width="${size}" height="${size}" viewBox="0 0 ${size} ${size}" fill="none" xmlns="http://www.w3.org/2000/svg">
23
+ <!-- Background with rounded corners -->
24
+ <rect width="${size}" height="${size}" rx="${cornerRadius}" fill="hsl(262.1 83.3% 57.8%)"/>
25
+
26
+ <!-- MessageSquare icon -->
27
+ <path d="M${startX} ${startY}C${startX} ${startY - 10} ${startX + 10} ${startY - 20} ${startX + 20} ${startY - 20}H${endX - 20}C${endX - 10} ${startY - 20} ${endX} ${startY - 10} ${endX} ${startY}V${endY - 20}C${endX} ${endY - 10} ${endX - 10} ${endY} ${endX - 20} ${endY}H${startX + Math.round(iconSize * 0.4)}L${tailX} ${tailY}V${startY}Z"
28
+ stroke="white"
29
+ stroke-width="${strokeWidth}"
30
+ stroke-linecap="round"
31
+ stroke-linejoin="round"
32
+ fill="none"/>
33
+ </svg>`;
34
+ }
35
+
36
+ // Generate SVG files for each size
37
+ sizes.forEach(size => {
38
+ const svgContent = createIconSVG(size);
39
+ const filename = `icon-${size}x${size}.svg`;
40
+ const filepath = path.join(__dirname, 'icons', filename);
41
+
42
+ fs.writeFileSync(filepath, svgContent);
43
+ console.log(`Created ${filename}`);
44
+ });
45
+
46
+ console.log('\nSVG icons created! To convert to PNG, you can use:');
47
+ console.log('1. Online converter like cloudconvert.com');
48
+ console.log('2. If you have ImageMagick: convert icon.svg icon.png');
49
+ console.log('3. If you have Inkscape: inkscape --export-type=png icon.svg');
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 512 509.64"><path fill="#D77655" d="M115.612 0h280.775C459.974 0 512 52.026 512 115.612v278.415c0 63.587-52.026 115.612-115.613 115.612H115.612C52.026 509.639 0 457.614 0 394.027V115.612C0 52.026 52.026 0 115.612 0z"/><path fill="#FCF2EE" fill-rule="nonzero" d="M142.27 316.619l73.655-41.326 1.238-3.589-1.238-1.996-3.589-.001-12.31-.759-42.084-1.138-36.498-1.516-35.361-1.896-8.897-1.895-8.34-10.995.859-5.484 7.482-5.03 10.717.935 23.683 1.617 35.537 2.452 25.782 1.517 38.193 3.968h6.064l.86-2.451-2.073-1.517-1.618-1.517-36.776-24.922-39.81-26.338-20.852-15.166-11.273-7.683-5.687-7.204-2.451-15.721 10.237-11.273 13.75.935 3.513.936 13.928 10.716 29.749 23.027 38.848 28.612 5.687 4.727 2.275-1.617.278-1.138-2.553-4.271-21.13-38.193-22.546-38.848-10.035-16.101-2.654-9.655c-.935-3.968-1.617-7.304-1.617-11.374l11.652-15.823 6.445-2.073 15.545 2.073 6.547 5.687 9.655 22.092 15.646 34.78 24.265 47.291 7.103 14.028 3.791 12.992 1.416 3.968 2.449-.001v-2.275l1.997-26.641 3.69-32.707 3.589-42.084 1.239-11.854 5.863-14.206 11.652-7.683 9.099 4.348 7.482 10.716-1.036 6.926-4.449 28.915-8.72 45.294-5.687 30.331h3.313l3.792-3.791 15.342-20.372 25.782-32.227 11.374-12.789 13.27-14.129 8.517-6.724 16.1-.001 11.854 17.617-5.307 18.199-16.581 21.029-13.75 17.819-19.716 26.54-12.309 21.231 1.138 1.694 2.932-.278 44.536-9.479 24.062-4.347 28.714-4.928 12.992 6.066 1.416 6.167-5.106 12.613-30.71 7.583-36.018 7.204-53.636 12.689-.657.48.758.935 24.164 2.275 10.337.556h25.301l47.114 3.514 12.309 8.139 7.381 9.959-1.238 7.583-18.957 9.655-25.579-6.066-59.702-14.205-20.474-5.106-2.83-.001v1.694l17.061 16.682 31.266 28.233 39.152 36.397 1.997 8.999-5.03 7.102-5.307-.758-34.401-25.883-13.27-11.651-30.053-25.302-1.996-.001v2.654l6.926 10.136 36.574 54.975 1.895 16.859-2.653 5.485-9.479 3.311-10.414-1.895-21.408-30.054-22.092-33.844-17.819-30.331-2.173 1.238-10.515 113.261-4.929 5.788-11.374 4.348-9.478-7.204-5.03-11.652 5.03-23.027 6.066-30.052 4.928-23.886 4.449-29.674 2.654-9.858-.177-.657-2.173.278-22.37 30.71-34.021 45.977-26.919 28.815-6.445 2.553-11.173-5.789 1.037-10.337 6.243-9.2 37.257-47.392 22.47-29.371 14.508-16.961-.101-2.451h-.859l-98.954 64.251-17.618 2.275-7.583-7.103.936-11.652 3.589-3.791 29.749-20.474-.101.102.024.101z"/></svg>
@@ -0,0 +1 @@
1
+ <svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Cursor</title><path d="M11.925 24l10.425-6-10.425-6L1.5 18l10.425 6z" fill="url(#lobe-icons-cursorundefined-fill-0)"></path><path d="M22.35 18V6L11.925 0v12l10.425 6z" fill="url(#lobe-icons-cursorundefined-fill-1)"></path><path d="M11.925 0L1.5 6v12l10.425-6V0z" fill="url(#lobe-icons-cursorundefined-fill-2)"></path><path d="M22.35 6L11.925 24V12L22.35 6z" fill="#555"></path><path d="M22.35 6l-10.425 6L1.5 6h20.85z" fill="#000"></path><defs><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-cursorundefined-fill-0" x1="11.925" x2="11.925" y1="12" y2="24"><stop offset=".16" stop-color="#000" stop-opacity=".39"></stop><stop offset=".658" stop-color="#000" stop-opacity=".8"></stop></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-cursorundefined-fill-1" x1="22.35" x2="11.925" y1="6.037" y2="12.15"><stop offset=".182" stop-color="#000" stop-opacity=".31"></stop><stop offset=".715" stop-color="#000" stop-opacity="0"></stop></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-cursorundefined-fill-2" x1="11.925" x2="1.5" y1="0" y2="18"><stop stop-color="#000" stop-opacity=".6"></stop><stop offset=".667" stop-color="#000" stop-opacity=".22"></stop></linearGradient></defs></svg>
@@ -0,0 +1,19 @@
1
+ # PWA Icons Required
2
+
3
+ Create the following icon files in this directory:
4
+
5
+ - icon-72x72.png
6
+ - icon-96x96.png
7
+ - icon-128x128.png
8
+ - icon-144x144.png
9
+ - icon-152x152.png
10
+ - icon-192x192.png
11
+ - icon-384x384.png
12
+ - icon-512x512.png
13
+
14
+ You can use any icon generator tool or create them manually. The icons should be square and represent your Claude Code UI application.
15
+
16
+ For a quick solution, you can:
17
+ 1. Create a simple square PNG icon (512x512)
18
+ 2. Use online tools like realfavicongenerator.net to generate all sizes
19
+ 3. Or use ImageMagick: `convert icon-512x512.png -resize 192x192 icon-192x192.png`
Binary file
@@ -0,0 +1,12 @@
1
+ <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Background fills entire canvas - iOS will handle corner rounding -->
3
+ <rect width="512" height="512" fill="hsl(240 5.9% 10%)"/>
4
+
5
+ <!-- MessageSquare icon - scaled and centered -->
6
+ <path d="M128 144C128 126.327 142.327 112 160 112H352C369.673 112 384 126.327 384 144V272C384 289.673 369.673 304 352 304H224L128 400V144Z"
7
+ stroke="white"
8
+ stroke-width="32"
9
+ stroke-linecap="round"
10
+ stroke-linejoin="round"
11
+ fill="none"/>
12
+ </svg>
Binary file
@@ -0,0 +1,12 @@
1
+ <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Background fills entire canvas - iOS will handle corner rounding -->
3
+ <rect width="512" height="512" fill="hsl(240 5.9% 10%)"/>
4
+
5
+ <!-- MessageSquare icon - scaled and centered -->
6
+ <path d="M128 144C128 126.327 142.327 112 160 112H352C369.673 112 384 126.327 384 144V272C384 289.673 369.673 304 352 304H224L128 400V144Z"
7
+ stroke="white"
8
+ stroke-width="32"
9
+ stroke-linecap="round"
10
+ stroke-linejoin="round"
11
+ fill="none"/>
12
+ </svg>
Binary file
@@ -0,0 +1,12 @@
1
+ <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Background fills entire canvas - iOS will handle corner rounding -->
3
+ <rect width="512" height="512" fill="hsl(240 5.9% 10%)"/>
4
+
5
+ <!-- MessageSquare icon - scaled and centered -->
6
+ <path d="M128 144C128 126.327 142.327 112 160 112H352C369.673 112 384 126.327 384 144V272C384 289.673 369.673 304 352 304H224L128 400V144Z"
7
+ stroke="white"
8
+ stroke-width="32"
9
+ stroke-linecap="round"
10
+ stroke-linejoin="round"
11
+ fill="none"/>
12
+ </svg>
Binary file
@@ -0,0 +1,12 @@
1
+ <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Background fills entire canvas - iOS will handle corner rounding -->
3
+ <rect width="512" height="512" fill="hsl(240 5.9% 10%)"/>
4
+
5
+ <!-- MessageSquare icon - scaled and centered -->
6
+ <path d="M128 144C128 126.327 142.327 112 160 112H352C369.673 112 384 126.327 384 144V272C384 289.673 369.673 304 352 304H224L128 400V144Z"
7
+ stroke="white"
8
+ stroke-width="32"
9
+ stroke-linecap="round"
10
+ stroke-linejoin="round"
11
+ fill="none"/>
12
+ </svg>
Binary file
@@ -0,0 +1,12 @@
1
+ <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Background fills entire canvas - iOS will handle corner rounding -->
3
+ <rect width="512" height="512" fill="hsl(240 5.9% 10%)"/>
4
+
5
+ <!-- MessageSquare icon - scaled and centered -->
6
+ <path d="M128 144C128 126.327 142.327 112 160 112H352C369.673 112 384 126.327 384 144V272C384 289.673 369.673 304 352 304H224L128 400V144Z"
7
+ stroke="white"
8
+ stroke-width="32"
9
+ stroke-linecap="round"
10
+ stroke-linejoin="round"
11
+ fill="none"/>
12
+ </svg>
Binary file
@@ -0,0 +1,12 @@
1
+ <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Background fills entire canvas - iOS will handle corner rounding -->
3
+ <rect width="512" height="512" fill="hsl(240 5.9% 10%)"/>
4
+
5
+ <!-- MessageSquare icon - scaled and centered -->
6
+ <path d="M128 144C128 126.327 142.327 112 160 112H352C369.673 112 384 126.327 384 144V272C384 289.673 369.673 304 352 304H224L128 400V144Z"
7
+ stroke="white"
8
+ stroke-width="32"
9
+ stroke-linecap="round"
10
+ stroke-linejoin="round"
11
+ fill="none"/>
12
+ </svg>