@symbo.ls/mcp 1.0.11 → 1.0.14
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/README.md +1 -0
- package/package.json +1 -1
- package/symbols_mcp/skills/AUDIT.md +148 -174
- package/symbols_mcp/skills/BRAND_IDENTITY.md +75 -0
- package/symbols_mcp/skills/COMPONENTS.md +151 -306
- package/symbols_mcp/skills/COOKBOOK.md +850 -0
- package/symbols_mcp/skills/DEFAULT_COMPONENTS.md +3856 -0
- package/symbols_mcp/skills/DEFAULT_LIBRARY.md +301 -0
- package/symbols_mcp/skills/DESIGN_CRITIQUE.md +70 -59
- package/symbols_mcp/skills/DESIGN_DIRECTION.md +109 -175
- package/symbols_mcp/skills/DESIGN_SYSTEM.md +473 -181
- package/symbols_mcp/skills/DESIGN_SYSTEM_ARCHITECT.md +65 -57
- package/symbols_mcp/skills/DESIGN_TO_CODE.md +83 -64
- package/symbols_mcp/skills/DESIGN_TREND.md +62 -50
- package/symbols_mcp/skills/FIGMA_MATCHING.md +69 -58
- package/symbols_mcp/skills/LEARNINGS.md +374 -0
- package/symbols_mcp/skills/MARKETING_ASSETS.md +71 -59
- package/symbols_mcp/skills/MIGRATION.md +158 -117
- package/symbols_mcp/skills/PATTERNS.md +101 -74
- package/symbols_mcp/skills/PRESENTATION.md +78 -0
- package/symbols_mcp/skills/PROJECT_STRUCTURE.md +114 -116
- package/symbols_mcp/skills/RULES.md +179 -148
- package/symbols_mcp/skills/RUNNING_APPS.md +476 -0
- package/symbols_mcp/skills/SEO-METADATA.md +33 -18
- package/symbols_mcp/skills/SNIPPETS.md +598 -0
- package/symbols_mcp/skills/SSR-BRENDER.md +99 -0
- package/symbols_mcp/skills/SYNTAX.md +356 -298
- package/symbols_mcp/skills/BRAND_INDENTITY.md +0 -69
- package/symbols_mcp/skills/THE_PRESENTATION.md +0 -69
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
# Symbols Project Structure
|
|
1
|
+
# Symbols Project Structure
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Follow this environment-agnostic folder structure for the Symbols platform. Generate independent files without JS module preloading. Files must render seamlessly across VSCode, file structure, Symbols platform, server rendering, and browsers.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
## Core Principle
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Do NOT use JavaScript imports/exports for component usage. Register components once in their folders and reuse them through a declarative object tree. No build step is required.
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
@@ -21,11 +21,11 @@ smbls/
|
|
|
21
21
|
├── vars.js # export default { APP_VERSION: '1.0.0', ... }
|
|
22
22
|
│
|
|
23
23
|
├── components/
|
|
24
|
-
│ ├── index.js # export * from './Foo.js'
|
|
24
|
+
│ ├── index.js # export * from './Foo.js' — FLAT re-exports only
|
|
25
25
|
│ └── Navbar.js # export const Navbar = { ... }
|
|
26
26
|
│
|
|
27
27
|
├── pages/
|
|
28
|
-
│ ├── index.js #
|
|
28
|
+
│ ├── index.js # Import-based registry — ONLY file with imports allowed
|
|
29
29
|
│ └── main.js # export const main = { extends: 'Page', ... }
|
|
30
30
|
│
|
|
31
31
|
├── functions/
|
|
@@ -37,24 +37,28 @@ smbls/
|
|
|
37
37
|
│ └── formatDate.js # export const formatDate = function(date) { ... }
|
|
38
38
|
│
|
|
39
39
|
├── designSystem/
|
|
40
|
-
│ ├── index.js # export default {
|
|
41
|
-
│ ├──
|
|
42
|
-
│ ├──
|
|
43
|
-
│ └──
|
|
40
|
+
│ ├── index.js # export default { color, theme, font, ... }
|
|
41
|
+
│ ├── color.js # export default { blue: '#0474f2', ... }
|
|
42
|
+
│ ├── theme.js # export default { dialog: { ... }, ... }
|
|
43
|
+
│ └── typography.js # export default { base: 16, ratio: 1.25, ... }
|
|
44
44
|
│
|
|
45
45
|
└── state/ # (alternative to state.js)
|
|
46
46
|
├── index.js # export default { user: {}, metrics: [], ... }
|
|
47
47
|
└── metrics.js # export default [{ title: 'Status', ... }]
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
+
Each folder is described below. Follow these rules strictly when creating or modifying files.
|
|
51
|
+
|
|
50
52
|
---
|
|
51
53
|
|
|
52
|
-
##
|
|
54
|
+
## Components (`components/`)
|
|
55
|
+
|
|
56
|
+
Create one named export per file, PascalCase, matching the filename exactly.
|
|
53
57
|
|
|
54
58
|
```js
|
|
55
59
|
// components/Header.js
|
|
56
60
|
export const Header = {
|
|
57
|
-
|
|
61
|
+
flow: 'x',
|
|
58
62
|
minWidth: 'G2',
|
|
59
63
|
padding: 'A',
|
|
60
64
|
|
|
@@ -63,25 +67,28 @@ export const Header = {
|
|
|
63
67
|
}
|
|
64
68
|
```
|
|
65
69
|
|
|
66
|
-
Rules
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
-
|
|
70
|
-
|
|
70
|
+
**Rules:**
|
|
71
|
+
- Use a named export matching the filename (PascalCase).
|
|
72
|
+
- Never import from other project files — reference by key name in the tree.
|
|
73
|
+
- Use design system tokens for props (`minWidth: 'G2'`, `padding: 'A'`).
|
|
74
|
+
|
|
75
|
+
Use `export *` only in `components/index.js`. Never use `export * as`.
|
|
71
76
|
|
|
72
77
|
```js
|
|
73
|
-
// components/index.js
|
|
78
|
+
// components/index.js
|
|
74
79
|
export * from './Header.js'
|
|
75
80
|
export * from './Navbar.js'
|
|
76
|
-
//
|
|
81
|
+
// NEVER: export * as Header from './Header.js'
|
|
77
82
|
```
|
|
78
83
|
|
|
79
84
|
---
|
|
80
85
|
|
|
81
|
-
##
|
|
86
|
+
## Pages (`pages/`)
|
|
87
|
+
|
|
88
|
+
Create files as shown. Use dash-case filenames and camelCase exports. Always extend from `'Page'`.
|
|
82
89
|
|
|
83
90
|
```js
|
|
84
|
-
// pages/dashboard.js
|
|
91
|
+
// pages/dashboard.js
|
|
85
92
|
export const dashboard = {
|
|
86
93
|
extends: 'Page',
|
|
87
94
|
width: '100%',
|
|
@@ -97,13 +104,15 @@ export const dashboard = {
|
|
|
97
104
|
}
|
|
98
105
|
```
|
|
99
106
|
|
|
100
|
-
Rules
|
|
101
|
-
- Filenames:
|
|
102
|
-
- Exports:
|
|
103
|
-
- Always extend from `'Page'
|
|
107
|
+
**Rules:**
|
|
108
|
+
- Filenames: dash-case (`add-network.js`, `edit-node.js`).
|
|
109
|
+
- Exports: camelCase (`export const addNetwork`).
|
|
110
|
+
- Always extend from `'Page'`.
|
|
111
|
+
|
|
112
|
+
Register routes in `pages/index.js` — the only file where imports are allowed:
|
|
104
113
|
|
|
105
114
|
```js
|
|
106
|
-
// pages/index.js
|
|
115
|
+
// pages/index.js
|
|
107
116
|
import { main } from './main.js'
|
|
108
117
|
import { dashboard } from './dashboard.js'
|
|
109
118
|
|
|
@@ -115,7 +124,9 @@ export default {
|
|
|
115
124
|
|
|
116
125
|
---
|
|
117
126
|
|
|
118
|
-
##
|
|
127
|
+
## Functions (`functions/`)
|
|
128
|
+
|
|
129
|
+
Create pure, standalone utilities with a named export matching the filename (camelCase). Do not import other project files.
|
|
119
130
|
|
|
120
131
|
```js
|
|
121
132
|
// functions/parseNetworkRow.js
|
|
@@ -124,13 +135,10 @@ export const parseNetworkRow = function parseNetworkRow(data) {
|
|
|
124
135
|
}
|
|
125
136
|
```
|
|
126
137
|
|
|
127
|
-
|
|
128
|
-
- Named export matching filename (camelCase)
|
|
129
|
-
- Pure, standalone utilities — no imports of other project files
|
|
130
|
-
- Called via `el.call('functionName', ...args)` from event handlers
|
|
138
|
+
Call functions from event handlers via `el.call()`:
|
|
131
139
|
|
|
132
140
|
```js
|
|
133
|
-
// In component
|
|
141
|
+
// In a component
|
|
134
142
|
Button: { onClick: (e, el) => el.call('parseNetworkRow', data) }
|
|
135
143
|
```
|
|
136
144
|
|
|
@@ -138,7 +146,9 @@ Button: { onClick: (e, el) => el.call('parseNetworkRow', data) }
|
|
|
138
146
|
|
|
139
147
|
---
|
|
140
148
|
|
|
141
|
-
##
|
|
149
|
+
## Methods (`methods/`)
|
|
150
|
+
|
|
151
|
+
Create utility methods that extend element behavior. Register once; they become reusable across all components.
|
|
142
152
|
|
|
143
153
|
```js
|
|
144
154
|
// methods/formatDate.js
|
|
@@ -147,36 +157,36 @@ export const formatDate = function(date) {
|
|
|
147
157
|
}
|
|
148
158
|
```
|
|
149
159
|
|
|
150
|
-
Rules:
|
|
151
|
-
- Utility methods that extend element behavior
|
|
152
|
-
- Registered once, reused across all components
|
|
153
|
-
|
|
154
160
|
---
|
|
155
161
|
|
|
156
|
-
##
|
|
162
|
+
## Design System (`designSystem/`)
|
|
163
|
+
|
|
164
|
+
Define tokens in separate files. Aggregate them in `index.js`.
|
|
157
165
|
|
|
158
166
|
```js
|
|
159
|
-
// designSystem/
|
|
167
|
+
// designSystem/color.js
|
|
160
168
|
export default {
|
|
161
169
|
black: '#000',
|
|
162
170
|
white: '#fff',
|
|
163
171
|
primary: '#0066cc',
|
|
164
172
|
}
|
|
165
173
|
|
|
166
|
-
// designSystem/
|
|
174
|
+
// designSystem/spacing.js
|
|
167
175
|
export default { base: 16, ratio: 1.618 }
|
|
168
176
|
|
|
169
177
|
// designSystem/index.js
|
|
170
|
-
import
|
|
171
|
-
import
|
|
172
|
-
export default {
|
|
178
|
+
import color from './color.js'
|
|
179
|
+
import theme from './theme.js'
|
|
180
|
+
export default { color, theme }
|
|
173
181
|
```
|
|
174
182
|
|
|
175
|
-
See `DESIGN_SYSTEM.md` for full token reference.
|
|
183
|
+
See `DESIGN_SYSTEM.md` for the full token reference.
|
|
176
184
|
|
|
177
185
|
---
|
|
178
186
|
|
|
179
|
-
##
|
|
187
|
+
## State (`state.js` or `state/index.js`)
|
|
188
|
+
|
|
189
|
+
Declare pure data structures only. Do not include logic or methods. Keep all initial state in a single file with no cross-imports.
|
|
180
190
|
|
|
181
191
|
```js
|
|
182
192
|
// state.js
|
|
@@ -188,14 +198,13 @@ export default {
|
|
|
188
198
|
}
|
|
189
199
|
```
|
|
190
200
|
|
|
191
|
-
|
|
192
|
-
- Pure data structures only — no logic, no methods
|
|
193
|
-
- All initial state inline in a single file (no cross-imports)
|
|
194
|
-
- Accessed and updated via `state.propertyName` or `state.update({})`
|
|
201
|
+
Access and update state via `state.propertyName` or `state.update({})`.
|
|
195
202
|
|
|
196
203
|
---
|
|
197
204
|
|
|
198
|
-
##
|
|
205
|
+
## Dependencies (`dependencies.js`)
|
|
206
|
+
|
|
207
|
+
Map npm package names to exact version numbers. Do not use `^` or `~`. Do not preload modules — import on demand via dynamic `import()`.
|
|
199
208
|
|
|
200
209
|
```js
|
|
201
210
|
export default {
|
|
@@ -205,12 +214,8 @@ export default {
|
|
|
205
214
|
}
|
|
206
215
|
```
|
|
207
216
|
|
|
208
|
-
Rules:
|
|
209
|
-
- Maps npm package names to **exact** version numbers (no `^` or `~`)
|
|
210
|
-
- No module preloading — packages imported on-demand via dynamic `import()`
|
|
211
|
-
- Keeps structure resolvable without a build step
|
|
212
|
-
|
|
213
217
|
Dynamic import pattern:
|
|
218
|
+
|
|
214
219
|
```js
|
|
215
220
|
onClick: async (e, el) => {
|
|
216
221
|
const { Chart } = await import('chart.js')
|
|
@@ -220,7 +225,9 @@ onClick: async (e, el) => {
|
|
|
220
225
|
|
|
221
226
|
---
|
|
222
227
|
|
|
223
|
-
##
|
|
228
|
+
## Config (`config.js`)
|
|
229
|
+
|
|
230
|
+
Control runtime behavior and rendering flags:
|
|
224
231
|
|
|
225
232
|
```js
|
|
226
233
|
export default {
|
|
@@ -235,13 +242,11 @@ export default {
|
|
|
235
242
|
}
|
|
236
243
|
```
|
|
237
244
|
|
|
238
|
-
Controls runtime behavior and rendering flags.
|
|
239
|
-
|
|
240
245
|
---
|
|
241
246
|
|
|
242
247
|
## Root `index.js`
|
|
243
248
|
|
|
244
|
-
|
|
249
|
+
Wire everything together in the root entry file:
|
|
245
250
|
|
|
246
251
|
```js
|
|
247
252
|
export * as components from './components/index.js'
|
|
@@ -269,90 +274,81 @@ next/
|
|
|
269
274
|
└── rita/, bazaar/, ... # consumer apps
|
|
270
275
|
```
|
|
271
276
|
|
|
272
|
-
All packages version-locked at the same version across the monorepo. Consumer apps depend on `"smbls": "3.x.x"` (workspace-resolved).
|
|
277
|
+
All packages are version-locked at the same version across the monorepo. Consumer apps depend on `"smbls": "3.x.x"` (workspace-resolved).
|
|
273
278
|
|
|
274
279
|
---
|
|
275
280
|
|
|
276
281
|
## CLI Setup
|
|
277
282
|
|
|
278
|
-
###
|
|
283
|
+
### Install
|
|
279
284
|
|
|
280
285
|
```bash
|
|
281
286
|
npm i -g @symbo.ls/cli
|
|
282
287
|
```
|
|
283
288
|
|
|
284
|
-
### Create a
|
|
289
|
+
### Create a Project
|
|
285
290
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
smbls create <project-name>
|
|
289
|
-
cd <project-name>
|
|
290
|
-
npm start
|
|
291
|
-
|
|
292
|
-
# Platform-linked (collaboration + remote preview)
|
|
293
|
-
smbls project create <project-name> --create-new
|
|
294
|
-
cd <project-name>
|
|
295
|
-
npm start
|
|
296
|
-
```
|
|
291
|
+
| Goal | Command |
|
|
292
|
+
|------|---------|
|
|
293
|
+
| Local-only (fastest) | `smbls create <project-name> && cd <project-name> && npm start` |
|
|
294
|
+
| Platform-linked (collaboration + remote preview) | `smbls project create <project-name> --create-new && cd <project-name> && npm start` |
|
|
297
295
|
|
|
298
296
|
### Authentication
|
|
299
297
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
smbls login
|
|
303
|
-
smbls
|
|
304
|
-
smbls servers
|
|
305
|
-
|
|
298
|
+
| Command | Action |
|
|
299
|
+
|---------|--------|
|
|
300
|
+
| `smbls login --check` | Check login status |
|
|
301
|
+
| `smbls login` | Sign in |
|
|
302
|
+
| `smbls servers` | List servers |
|
|
303
|
+
| `smbls servers --select` | Switch server |
|
|
306
304
|
|
|
307
305
|
### Sync & Collaboration
|
|
308
306
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
smbls
|
|
312
|
-
smbls
|
|
313
|
-
smbls
|
|
314
|
-
|
|
307
|
+
| Command | Action |
|
|
308
|
+
|---------|--------|
|
|
309
|
+
| `smbls push` | Upload local to platform |
|
|
310
|
+
| `smbls fetch --update` | Download platform to local |
|
|
311
|
+
| `smbls sync` | Two-way sync (interactive conflict handling) |
|
|
312
|
+
| `smbls collab` | Live collaboration watch mode (run in separate terminal) |
|
|
315
313
|
|
|
316
314
|
### File Management
|
|
317
315
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
smbls files
|
|
321
|
-
smbls files
|
|
322
|
-
smbls files
|
|
323
|
-
|
|
316
|
+
| Command | Action |
|
|
317
|
+
|---------|--------|
|
|
318
|
+
| `smbls files list` | List files |
|
|
319
|
+
| `smbls files upload` | Upload files |
|
|
320
|
+
| `smbls files download` | Download files |
|
|
321
|
+
| `smbls files rm` | Remove files |
|
|
324
322
|
|
|
325
323
|
### Linking an Existing Platform Project
|
|
326
324
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
smbls project link
|
|
330
|
-
smbls project link . --
|
|
331
|
-
|
|
325
|
+
| Command | Action |
|
|
326
|
+
|---------|--------|
|
|
327
|
+
| `smbls project link .` | Interactive picker |
|
|
328
|
+
| `smbls project link . --key <key>.symbo.ls` | Non-interactive, by key |
|
|
329
|
+
| `smbls project link . --id <projectId>` | Non-interactive, by ID |
|
|
332
330
|
|
|
333
331
|
### Shell Auto-completion
|
|
334
332
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
smbls completion
|
|
338
|
-
|
|
333
|
+
| Command | Action |
|
|
334
|
+
|---------|--------|
|
|
335
|
+
| `smbls completion zsh --install` | Install zsh completions |
|
|
336
|
+
| `smbls completion bash --install` | Install bash completions |
|
|
339
337
|
|
|
340
338
|
---
|
|
341
339
|
|
|
342
340
|
## Remote Preview URLs
|
|
343
341
|
|
|
344
|
-
After linking and pushing a project,
|
|
342
|
+
After linking and pushing a project, access previews at these URLs:
|
|
345
343
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
344
|
+
| Type | URL Pattern |
|
|
345
|
+
|------|-------------|
|
|
346
|
+
| Preview | `https://<app>.<user>.preview.symbo.ls/` |
|
|
347
|
+
| Dev environment | `https://dev.<app>.<user>.preview.symbo.ls/` |
|
|
348
|
+
| With subpath | `https://<app>.<user>.preview.symbo.ls/<subpath>` |
|
|
351
349
|
|
|
352
|
-
Where:
|
|
353
350
|
- `<user>` — Symbols username or org
|
|
354
351
|
- `<app>` — project identifier
|
|
355
|
-
- `<env>` — optional environment (`dev`, `stage`, etc.)
|
|
356
352
|
|
|
357
353
|
Example for user `nikoloza`, project `my-app`:
|
|
358
354
|
```
|
|
@@ -364,13 +360,13 @@ https://dev.my-app.nikoloza.preview.symbo.ls/
|
|
|
364
360
|
|
|
365
361
|
## AI Integration
|
|
366
362
|
|
|
367
|
-
|
|
363
|
+
Instruct an AI coding assistant to follow project conventions with:
|
|
368
364
|
|
|
369
365
|
```
|
|
370
366
|
Use instructions from all .md files in the /docs folder
|
|
371
367
|
```
|
|
372
368
|
|
|
373
|
-
|
|
369
|
+
Recommended tools for Symbols development: Claude Code > Cursor > Copilot.
|
|
374
370
|
|
|
375
371
|
Workflows that work best with AI assistance:
|
|
376
372
|
- Extending existing Symbols apps
|
|
@@ -381,15 +377,17 @@ Workflows that work best with AI assistance:
|
|
|
381
377
|
|
|
382
378
|
## Troubleshooting
|
|
383
379
|
|
|
384
|
-
| Problem
|
|
385
|
-
|
|
386
|
-
| Auth required / access denied | `smbls login`
|
|
387
|
-
| Missing project key
|
|
388
|
-
| Need verbose output
|
|
389
|
-
| CLI not found
|
|
380
|
+
| Problem | Fix |
|
|
381
|
+
|---------|-----|
|
|
382
|
+
| Auth required / access denied | Run `smbls login` |
|
|
383
|
+
| Missing project key | Check `symbols.json` or run `smbls project link .` |
|
|
384
|
+
| Need verbose output | Add `--verbose` to any command |
|
|
385
|
+
| CLI not found | Run `npm i -g @symbo.ls/cli` |
|
|
390
386
|
| Build fails on new pkg method | Add method to `METHODS` in `keys.js` AND `set.js` |
|
|
391
387
|
|
|
392
|
-
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
## Build Order
|
|
393
391
|
|
|
394
392
|
When changing smbls source, rebuild in dependency order:
|
|
395
393
|
|