create-claudeportal 0.2.1 → 0.2.3

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/dist/index.html CHANGED
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>Claude Portal</title>
7
- <script type="module" crossorigin src="/assets/index-DT9wvgYq.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-Dk_0f6au.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-BG0yZd9Y.css">
9
9
  </head>
10
10
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-claudeportal",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Get from npx to a working app in under 5 minutes — Claude Code setup wizard",
5
5
  "bin": {
6
6
  "create-claudeportal": "bin/cli.js"
@@ -88,6 +88,23 @@ const RECOMMENDED_MCPS = [
88
88
  usefulFor: ['draft', 'extract', 'transform'],
89
89
  category: 'automation',
90
90
  },
91
+ {
92
+ id: 'composio',
93
+ name: 'Composio',
94
+ description: '250+ app integrations — CRM, email, social, databases',
95
+ installHint: 'claude mcp add composio -- npx -y composio-core mcp',
96
+ usefulFor: ['draft', 'extract', 'analyse', 'transform', 'summarize'],
97
+ category: 'automation',
98
+ },
99
+ // Social Media
100
+ {
101
+ id: 'postiz',
102
+ name: 'Postiz',
103
+ description: 'Schedule and manage social media posts across platforms',
104
+ installHint: 'claude mcp add postiz -- npx -y @postiz/mcp-server',
105
+ usefulFor: ['draft', 'transform'],
106
+ category: 'social',
107
+ },
91
108
  // Meetings & Notes
92
109
  {
93
110
  id: 'fireflies',
@@ -155,6 +172,7 @@ const CATEGORY_LABELS = {
155
172
  design: 'Design & Build',
156
173
  workspace: 'Workspace',
157
174
  automation: 'Automation',
175
+ social: 'Social Media',
158
176
  meetings: 'Meetings',
159
177
  projects: 'Project Management',
160
178
  data: 'Data',
@@ -96,8 +96,26 @@ router.get('/read-file', (req, res) => {
96
96
  if (stat.size > 10 * 1024 * 1024) {
97
97
  return res.status(413).json({ error: 'File too large (max 10MB)' })
98
98
  }
99
- const content = fs.readFileSync(resolved, 'utf8')
100
- res.json({ content, path: resolved, size: stat.size, modified: stat.mtime.toISOString() })
99
+
100
+ const ext = path.extname(resolved).toLowerCase()
101
+ const binaryTypes = ['.pdf', '.docx', '.doc', '.xlsx', '.xls', '.pptx', '.odt']
102
+
103
+ if (binaryTypes.includes(ext)) {
104
+ // Binary files can't be read as text — return metadata only
105
+ // Claude Code can read these directly via its file reading capability
106
+ res.json({
107
+ content: null,
108
+ binary: true,
109
+ path: resolved,
110
+ size: stat.size,
111
+ type: ext.slice(1),
112
+ modified: stat.mtime.toISOString(),
113
+ message: `${ext.slice(1).toUpperCase()} file — Claude will read this directly`,
114
+ })
115
+ } else {
116
+ const content = fs.readFileSync(resolved, 'utf8')
117
+ res.json({ content, path: resolved, size: stat.size, modified: stat.mtime.toISOString() })
118
+ }
101
119
  } catch (err) {
102
120
  res.status(500).json({ error: err.message })
103
121
  }
@@ -170,12 +188,12 @@ router.get('/pick-file', (req, res) => {
170
188
  let selected
171
189
  if (process.platform === 'darwin') {
172
190
  selected = execSync(
173
- `osascript -e 'POSIX path of (choose file with prompt "Choose a document" of type {"md", "txt", "csv", "json", "html"})'`,
191
+ `osascript -e 'POSIX path of (choose file with prompt "Choose a document" of type {"md", "txt", "csv", "json", "html", "pdf", "docx", "doc", "xlsx", "xls", "pptx", "rtf", "odt", "tsv"})'`,
174
192
  { encoding: 'utf8', timeout: 60000 }
175
193
  ).trim()
176
194
  } else if (process.platform === 'linux') {
177
195
  selected = execSync(
178
- 'zenity --file-selection --title="Choose a document" --file-filter="Documents|*.md *.txt *.csv *.json *.html" 2>/dev/null',
196
+ 'zenity --file-selection --title="Choose a document" --file-filter="Documents|*.md *.txt *.csv *.json *.html *.pdf *.docx *.doc *.xlsx *.xls *.pptx *.rtf *.odt *.tsv" 2>/dev/null',
179
197
  { encoding: 'utf8', timeout: 60000 }
180
198
  ).trim()
181
199
  } else {