cyclecad 0.1.0 → 0.1.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/README.md +58 -0
- package/hero-generator.html +314 -0
- package/package.json +2 -2
- package/screenshot.png +0 -0
package/README.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# cycleCAD
|
|
2
|
+
|
|
3
|
+
**Browser-based parametric 3D CAD modeler with AI-powered tools, native Inventor file parsing, and smart assembly management.**
|
|
4
|
+
|
|
5
|
+
No install required — runs entirely in your browser.
|
|
6
|
+
|
|
7
|
+
[](https://www.npmjs.com/package/cyclecad)
|
|
8
|
+
[](https://opensource.org/licenses/MIT)
|
|
9
|
+
|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
## Features
|
|
13
|
+
|
|
14
|
+
- **Full parametric modeling** — Sketch, extrude, revolve, fillet, chamfer, boolean operations with constraint-driven design
|
|
15
|
+
- **Native Inventor parsing** — Open Autodesk Inventor `.ipt` and `.iam` files directly in the browser
|
|
16
|
+
- **AI-powered tools** — Part identification, smart natural language search, automated assembly instructions, integrated AI chatbot
|
|
17
|
+
- **Maintenance intelligence** — Heatmaps, wear timelines, service mode, smart BOM generation with estimated pricing
|
|
18
|
+
- **40+ built-in tools** — Measurement, section cuts, annotations, hero shots, QR codes, 3D print slicer, and more
|
|
19
|
+
- **Export everything** — STL, OBJ, GLTF, PLY per part. CSV/HTML reports. Technical report generation
|
|
20
|
+
- **6 languages** — English, German, French, Spanish, Italian, Dutch
|
|
21
|
+
- **McMaster-Carr integration** — Direct part sourcing links for identified components
|
|
22
|
+
- **Zero dependencies** — Three.js r170 via CDN, no build step required
|
|
23
|
+
|
|
24
|
+
## Quick Start
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx cyclecad
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Or install globally:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm i -g cyclecad
|
|
34
|
+
cyclecad
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Or just open [cyclecad.com/app/](https://cyclecad.com/app/) in your browser.
|
|
38
|
+
|
|
39
|
+
## Built For
|
|
40
|
+
|
|
41
|
+
cycleCAD was built to manage the **cycleWASH DUO** — a fully automatic bicycle washing system with 473 parts across 6 assemblies. It handles real production-scale assemblies out of the box.
|
|
42
|
+
|
|
43
|
+
## Tech Stack
|
|
44
|
+
|
|
45
|
+
- **Three.js r170** — WebGL-powered 3D viewport
|
|
46
|
+
- **ES Modules** — Modern JavaScript, no bundler needed
|
|
47
|
+
- **Gemini Flash + Groq** — AI part identification and chatbot
|
|
48
|
+
- **Browser-native** — Works on any modern browser, any OS
|
|
49
|
+
|
|
50
|
+
## Links
|
|
51
|
+
|
|
52
|
+
- **Website:** [cyclecad.com](https://cyclecad.com)
|
|
53
|
+
- **App:** [cyclecad.com/app/](https://cyclecad.com/app/)
|
|
54
|
+
- **GitHub:** [github.com/vvlars-cmd/cyclecad](https://github.com/vvlars-cmd/cyclecad)
|
|
55
|
+
|
|
56
|
+
## License
|
|
57
|
+
|
|
58
|
+
MIT © [vvlars](https://github.com/vvlars-cmd)
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<style>
|
|
6
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
7
|
+
body { background: #0a0a0f; display: flex; align-items: center; justify-content: center; min-height: 100vh; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; }
|
|
8
|
+
.frame {
|
|
9
|
+
width: 1280px; height: 720px; background: #141418; border-radius: 12px; overflow: hidden;
|
|
10
|
+
box-shadow: 0 0 80px rgba(255,149,32,0.08), 0 0 0 1px rgba(255,255,255,0.06);
|
|
11
|
+
display: grid; grid-template-columns: 240px 1fr 280px; grid-template-rows: 44px 1fr 28px;
|
|
12
|
+
}
|
|
13
|
+
/* Title bar */
|
|
14
|
+
.titlebar {
|
|
15
|
+
grid-column: 1/-1; background: #1a1a20; display: flex; align-items: center; padding: 0 16px;
|
|
16
|
+
border-bottom: 1px solid #2a2a35; gap: 12px;
|
|
17
|
+
}
|
|
18
|
+
.dots { display: flex; gap: 6px; }
|
|
19
|
+
.dot { width: 10px; height: 10px; border-radius: 50%; }
|
|
20
|
+
.dot-r { background: #ff5f57; }
|
|
21
|
+
.dot-y { background: #febc2e; }
|
|
22
|
+
.dot-g { background: #28c840; }
|
|
23
|
+
.titlebar-text { color: #888; font-size: 12px; margin-left: 12px; }
|
|
24
|
+
.titlebar-logo { color: #ff9520; font-weight: 700; font-size: 14px; margin-left: auto; }
|
|
25
|
+
.titlebar-logo span { color: #a0a0b4; font-weight: 400; }
|
|
26
|
+
|
|
27
|
+
/* Toolbar */
|
|
28
|
+
.toolbar {
|
|
29
|
+
grid-column: 1/-1; background: #1c1c22; display: flex; align-items: center; padding: 0 12px; gap: 2px;
|
|
30
|
+
border-bottom: 1px solid #2a2a35; grid-row: 2; height: 38px;
|
|
31
|
+
}
|
|
32
|
+
.tool-btn {
|
|
33
|
+
padding: 5px 10px; border-radius: 5px; color: #a0a0b4; font-size: 11px; display: flex; align-items: center; gap: 4px;
|
|
34
|
+
}
|
|
35
|
+
.tool-btn:hover, .tool-active { background: rgba(255,149,32,0.12); color: #ff9520; }
|
|
36
|
+
.tool-sep { width: 1px; height: 20px; background: #2a2a35; margin: 0 6px; }
|
|
37
|
+
|
|
38
|
+
/* Left panel - Model Tree */
|
|
39
|
+
.tree-panel {
|
|
40
|
+
background: #161619; border-right: 1px solid #2a2a35; padding: 12px; overflow: hidden;
|
|
41
|
+
grid-row: 3/5;
|
|
42
|
+
}
|
|
43
|
+
.tree-title { color: #ff9520; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 10px; }
|
|
44
|
+
.tree-item { color: #a0a0b4; font-size: 11px; padding: 4px 0 4px 8px; border-left: 2px solid transparent; display: flex; align-items: center; gap: 6px; }
|
|
45
|
+
.tree-item.active { color: #ff9520; border-left-color: #ff9520; background: rgba(255,149,32,0.06); }
|
|
46
|
+
.tree-item .icon { font-size: 10px; }
|
|
47
|
+
.tree-sub { padding-left: 16px; }
|
|
48
|
+
.tree-assembly { color: #5aabff; font-weight: 500; }
|
|
49
|
+
|
|
50
|
+
/* Viewport */
|
|
51
|
+
.viewport {
|
|
52
|
+
background: linear-gradient(180deg, #1a1a24 0%, #12121a 50%, #0e0e16 100%);
|
|
53
|
+
position: relative; grid-row: 3/5; overflow: hidden;
|
|
54
|
+
}
|
|
55
|
+
.grid-lines {
|
|
56
|
+
position: absolute; inset: 0;
|
|
57
|
+
background-image:
|
|
58
|
+
linear-gradient(rgba(255,255,255,0.02) 1px, transparent 1px),
|
|
59
|
+
linear-gradient(90deg, rgba(255,255,255,0.02) 1px, transparent 1px);
|
|
60
|
+
background-size: 40px 40px;
|
|
61
|
+
}
|
|
62
|
+
.axis-x { position: absolute; top: 55%; left: 10%; right: 20%; height: 1px; background: linear-gradient(90deg, transparent, #ff4444 40%, #ff444488); }
|
|
63
|
+
.axis-z { position: absolute; top: 20%; bottom: 10%; left: 55%; width: 1px; background: linear-gradient(transparent, #44ff44 40%, #44ff4488); }
|
|
64
|
+
.axis-y { position: absolute; top: 40%; left: 35%; width: 200px; height: 1px; background: #4444ff88; transform: rotate(-30deg); }
|
|
65
|
+
|
|
66
|
+
/* 3D Object mockup - gear/mechanical part */
|
|
67
|
+
.part-group { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
|
|
68
|
+
.part-main {
|
|
69
|
+
width: 280px; height: 200px; border: 2px solid rgba(255,149,32,0.4);
|
|
70
|
+
background: linear-gradient(135deg, rgba(255,149,32,0.08), rgba(90,171,255,0.05));
|
|
71
|
+
border-radius: 8px; transform: perspective(800px) rotateX(15deg) rotateY(-20deg);
|
|
72
|
+
box-shadow: 0 20px 60px rgba(0,0,0,0.5), 0 0 30px rgba(255,149,32,0.1);
|
|
73
|
+
position: relative; overflow: hidden;
|
|
74
|
+
}
|
|
75
|
+
.part-wireframe {
|
|
76
|
+
position: absolute; inset: 0;
|
|
77
|
+
background-image:
|
|
78
|
+
linear-gradient(45deg, rgba(255,149,32,0.15) 1px, transparent 1px),
|
|
79
|
+
linear-gradient(-45deg, rgba(90,171,255,0.1) 1px, transparent 1px);
|
|
80
|
+
background-size: 20px 20px;
|
|
81
|
+
}
|
|
82
|
+
.part-highlight {
|
|
83
|
+
position: absolute; top: 30%; left: 20%; width: 60%; height: 40%;
|
|
84
|
+
border: 1.5px solid #ff9520; border-radius: 4px;
|
|
85
|
+
box-shadow: 0 0 15px rgba(255,149,32,0.3);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* Secondary parts */
|
|
89
|
+
.part-2 {
|
|
90
|
+
position: absolute; top: 15%; right: 15%; width: 120px; height: 90px;
|
|
91
|
+
border: 1.5px solid rgba(90,171,255,0.4);
|
|
92
|
+
background: linear-gradient(135deg, rgba(90,171,255,0.06), transparent);
|
|
93
|
+
border-radius: 6px; transform: perspective(600px) rotateX(10deg) rotateY(-15deg);
|
|
94
|
+
}
|
|
95
|
+
.part-3 {
|
|
96
|
+
position: absolute; bottom: 18%; left: 12%; width: 100px; height: 70px;
|
|
97
|
+
border: 1.5px solid rgba(90,171,255,0.3);
|
|
98
|
+
background: linear-gradient(135deg, rgba(90,171,255,0.04), transparent);
|
|
99
|
+
border-radius: 6px; transform: perspective(600px) rotateX(20deg) rotateY(-10deg);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* Dimension lines */
|
|
103
|
+
.dim-line {
|
|
104
|
+
position: absolute; display: flex; align-items: center; color: #5aabff; font-size: 9px;
|
|
105
|
+
}
|
|
106
|
+
.dim-h { top: 82%; left: 25%; width: 200px; border-top: 1px solid #5aabff55; text-align: center; padding-top: 4px; }
|
|
107
|
+
.dim-v { top: 25%; right: 22%; height: 150px; border-left: 1px solid #5aabff55; writing-mode: vertical-rl; padding-left: 6px; }
|
|
108
|
+
|
|
109
|
+
/* Annotations */
|
|
110
|
+
.annotation {
|
|
111
|
+
position: absolute; background: rgba(255,149,32,0.9); color: #fff; font-size: 9px; font-weight: 600;
|
|
112
|
+
padding: 3px 8px; border-radius: 10px; white-space: nowrap;
|
|
113
|
+
}
|
|
114
|
+
.ann-1 { top: 30%; left: 60%; }
|
|
115
|
+
.ann-2 { top: 55%; right: 25%; }
|
|
116
|
+
|
|
117
|
+
/* Corner cube */
|
|
118
|
+
.view-cube {
|
|
119
|
+
position: absolute; top: 12px; right: 12px; width: 50px; height: 50px;
|
|
120
|
+
border: 1px solid rgba(255,149,32,0.3); background: rgba(255,149,32,0.05);
|
|
121
|
+
border-radius: 4px; display: flex; align-items: center; justify-content: center;
|
|
122
|
+
color: #ff9520; font-size: 8px; font-weight: 600;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* Status badges */
|
|
126
|
+
.viewport-badge {
|
|
127
|
+
position: absolute; bottom: 12px; left: 12px; display: flex; gap: 8px;
|
|
128
|
+
}
|
|
129
|
+
.badge {
|
|
130
|
+
background: rgba(255,149,32,0.12); border: 1px solid rgba(255,149,32,0.25);
|
|
131
|
+
color: #ff9520; font-size: 9px; padding: 3px 8px; border-radius: 4px;
|
|
132
|
+
}
|
|
133
|
+
.badge-blue { background: rgba(90,171,255,0.1); border-color: rgba(90,171,255,0.25); color: #5aabff; }
|
|
134
|
+
|
|
135
|
+
/* Right panel - Properties */
|
|
136
|
+
.props-panel {
|
|
137
|
+
background: #161619; border-left: 1px solid #2a2a35; padding: 12px; overflow: hidden;
|
|
138
|
+
grid-row: 3/5;
|
|
139
|
+
}
|
|
140
|
+
.props-title { color: #ff9520; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 12px; }
|
|
141
|
+
.props-section { margin-bottom: 14px; }
|
|
142
|
+
.props-label { color: #72728a; font-size: 10px; margin-bottom: 4px; }
|
|
143
|
+
.props-value { color: #e0e0e8; font-size: 12px; font-weight: 500; }
|
|
144
|
+
.props-row { display: flex; justify-content: space-between; padding: 4px 0; border-bottom: 1px solid #1e1e28; }
|
|
145
|
+
.props-row-label { color: #72728a; font-size: 10px; }
|
|
146
|
+
.props-row-val { color: #e0e0e8; font-size: 10px; }
|
|
147
|
+
.ai-badge { background: linear-gradient(135deg, #ff9520, #ff6010); color: #fff; font-size: 9px; padding: 2px 8px; border-radius: 8px; display: inline-block; margin-top: 8px; }
|
|
148
|
+
.mcmaster-link { color: #5aabff; font-size: 10px; text-decoration: underline; margin-top: 6px; display: block; }
|
|
149
|
+
|
|
150
|
+
/* Chat preview */
|
|
151
|
+
.chat-preview { margin-top: 16px; padding: 10px; background: #1c1c22; border-radius: 8px; border: 1px solid #2a2a35; }
|
|
152
|
+
.chat-msg { font-size: 10px; color: #a0a0b4; margin-bottom: 6px; }
|
|
153
|
+
.chat-ai { color: #ff9520; }
|
|
154
|
+
.chat-input { background: #141418; border: 1px solid #2a2a35; border-radius: 4px; padding: 6px 8px; color: #72728a; font-size: 10px; width: 100%; margin-top: 4px; }
|
|
155
|
+
|
|
156
|
+
/* Status bar */
|
|
157
|
+
.statusbar {
|
|
158
|
+
grid-column: 1/-1; background: #1a1a20; border-top: 1px solid #2a2a35;
|
|
159
|
+
display: flex; align-items: center; padding: 0 12px; gap: 16px;
|
|
160
|
+
color: #72728a; font-size: 10px;
|
|
161
|
+
}
|
|
162
|
+
.status-dot { width: 6px; height: 6px; border-radius: 50%; background: #28c840; }
|
|
163
|
+
.status-item { display: flex; align-items: center; gap: 4px; }
|
|
164
|
+
</style>
|
|
165
|
+
</head>
|
|
166
|
+
<body>
|
|
167
|
+
<div class="frame">
|
|
168
|
+
<!-- Title Bar -->
|
|
169
|
+
<div class="titlebar">
|
|
170
|
+
<div class="dots"><div class="dot dot-r"></div><div class="dot dot-y"></div><div class="dot dot-g"></div></div>
|
|
171
|
+
<span class="titlebar-text">cycleCAD — DUO_Assembly.iam</span>
|
|
172
|
+
<span class="titlebar-logo">cycle<span>CAD</span></span>
|
|
173
|
+
</div>
|
|
174
|
+
|
|
175
|
+
<!-- Toolbar -->
|
|
176
|
+
<div class="toolbar">
|
|
177
|
+
<div class="tool-btn tool-active">✎ Sketch</div>
|
|
178
|
+
<div class="tool-btn">╱ Line</div>
|
|
179
|
+
<div class="tool-btn">◯ Circle</div>
|
|
180
|
+
<div class="tool-sep"></div>
|
|
181
|
+
<div class="tool-btn">⬆ Extrude</div>
|
|
182
|
+
<div class="tool-btn">↺ Revolve</div>
|
|
183
|
+
<div class="tool-btn">▬ Fillet</div>
|
|
184
|
+
<div class="tool-btn">⎯ Cut</div>
|
|
185
|
+
<div class="tool-btn">+ Union</div>
|
|
186
|
+
<div class="tool-sep"></div>
|
|
187
|
+
<div class="tool-btn">📏 Measure</div>
|
|
188
|
+
<div class="tool-btn">✂ Section</div>
|
|
189
|
+
<div class="tool-btn">📌 Annotate</div>
|
|
190
|
+
<div class="tool-sep"></div>
|
|
191
|
+
<div class="tool-btn" style="color:#ff9520">★ AI Identify</div>
|
|
192
|
+
<div class="tool-btn" style="color:#ff9520">⚙ Smart BOM</div>
|
|
193
|
+
<div class="tool-btn" style="color:#ff9520">💬 Chat</div>
|
|
194
|
+
</div>
|
|
195
|
+
|
|
196
|
+
<!-- Left: Model Tree -->
|
|
197
|
+
<div class="tree-panel">
|
|
198
|
+
<div class="tree-title">Model Tree</div>
|
|
199
|
+
<div class="tree-item tree-assembly">📦 DUO Assembly</div>
|
|
200
|
+
<div class="tree-sub">
|
|
201
|
+
<div class="tree-item active">▶ Frame</div>
|
|
202
|
+
<div class="tree-sub">
|
|
203
|
+
<div class="tree-item active"> ■ Rahmen_Seite</div>
|
|
204
|
+
<div class="tree-item"> ■ Traeger_Hoehe1</div>
|
|
205
|
+
<div class="tree-item"> ■ Quertraeger</div>
|
|
206
|
+
<div class="tree-item"> ■ Bodenplatte</div>
|
|
207
|
+
</div>
|
|
208
|
+
<div class="tree-item">▶ Brush System</div>
|
|
209
|
+
<div class="tree-sub">
|
|
210
|
+
<div class="tree-item"> ■ Leistenbuerstenblech</div>
|
|
211
|
+
<div class="tree-item"> ■ Buerstenhalter_L</div>
|
|
212
|
+
<div class="tree-item"> ■ Buerstenhalter_R</div>
|
|
213
|
+
</div>
|
|
214
|
+
<div class="tree-item">▶ Drive System</div>
|
|
215
|
+
<div class="tree-item">▶ Water Circuit</div>
|
|
216
|
+
<div class="tree-item">▶ Electronics</div>
|
|
217
|
+
<div class="tree-item">▶ Housing</div>
|
|
218
|
+
</div>
|
|
219
|
+
<div style="margin-top: 16px; padding: 8px; background: #1c1c22; border-radius: 6px; border: 1px solid #2a2a35;">
|
|
220
|
+
<div style="color: #72728a; font-size: 9px; margin-bottom: 4px;">ASSEMBLY</div>
|
|
221
|
+
<div style="color: #e0e0e8; font-size: 18px; font-weight: 700;">473</div>
|
|
222
|
+
<div style="color: #72728a; font-size: 9px;">parts loaded</div>
|
|
223
|
+
</div>
|
|
224
|
+
</div>
|
|
225
|
+
|
|
226
|
+
<!-- Center: Viewport -->
|
|
227
|
+
<div class="viewport">
|
|
228
|
+
<div class="grid-lines"></div>
|
|
229
|
+
<div class="axis-x"></div>
|
|
230
|
+
<div class="axis-z"></div>
|
|
231
|
+
<div class="axis-y"></div>
|
|
232
|
+
|
|
233
|
+
<div class="part-group">
|
|
234
|
+
<div class="part-main">
|
|
235
|
+
<div class="part-wireframe"></div>
|
|
236
|
+
<div class="part-highlight"></div>
|
|
237
|
+
</div>
|
|
238
|
+
</div>
|
|
239
|
+
<div class="part-2"></div>
|
|
240
|
+
<div class="part-3"></div>
|
|
241
|
+
|
|
242
|
+
<div class="dim-h">← 842.5 mm →</div>
|
|
243
|
+
<div class="dim-v">↑ 635.2 mm</div>
|
|
244
|
+
|
|
245
|
+
<div class="annotation ann-1">Rahmen_Seite</div>
|
|
246
|
+
<div class="annotation ann-2" style="background: rgba(90,171,255,0.9);">M8 Bolt × 12</div>
|
|
247
|
+
|
|
248
|
+
<div class="view-cube">FRONT</div>
|
|
249
|
+
|
|
250
|
+
<div class="viewport-badge">
|
|
251
|
+
<div class="badge">473 Parts</div>
|
|
252
|
+
<div class="badge">6 Assemblies</div>
|
|
253
|
+
<div class="badge badge-blue">AI Identified</div>
|
|
254
|
+
</div>
|
|
255
|
+
</div>
|
|
256
|
+
|
|
257
|
+
<!-- Right: Properties -->
|
|
258
|
+
<div class="props-panel">
|
|
259
|
+
<div class="props-title">Properties</div>
|
|
260
|
+
|
|
261
|
+
<div class="props-section">
|
|
262
|
+
<div class="props-label">Selected Part</div>
|
|
263
|
+
<div class="props-value">Rahmen_Seite</div>
|
|
264
|
+
<div class="ai-badge">AI: Structural Frame</div>
|
|
265
|
+
</div>
|
|
266
|
+
|
|
267
|
+
<div class="props-section">
|
|
268
|
+
<div class="props-label">Dimensions</div>
|
|
269
|
+
<div class="props-row"><span class="props-row-label">Width</span><span class="props-row-val">842.5 mm</span></div>
|
|
270
|
+
<div class="props-row"><span class="props-row-label">Height</span><span class="props-row-val">635.2 mm</span></div>
|
|
271
|
+
<div class="props-row"><span class="props-row-label">Depth</span><span class="props-row-val">3.0 mm</span></div>
|
|
272
|
+
<div class="props-row"><span class="props-row-label">Volume</span><span class="props-row-val">1,604 cm³</span></div>
|
|
273
|
+
</div>
|
|
274
|
+
|
|
275
|
+
<div class="props-section">
|
|
276
|
+
<div class="props-label">Material</div>
|
|
277
|
+
<div class="props-value" style="font-size:11px">Stainless Steel 304</div>
|
|
278
|
+
<div class="props-row"><span class="props-row-label">Est. Weight</span><span class="props-row-val">12.8 kg</span></div>
|
|
279
|
+
<div class="props-row"><span class="props-row-label">Est. Cost</span><span class="props-row-val">~$45.00</span></div>
|
|
280
|
+
</div>
|
|
281
|
+
|
|
282
|
+
<a class="mcmaster-link">🔗 Find on McMaster-Carr →</a>
|
|
283
|
+
|
|
284
|
+
<div class="props-section" style="margin-top:12px">
|
|
285
|
+
<div class="props-label">Maintenance</div>
|
|
286
|
+
<div style="display:flex;gap:4px;margin-top:4px">
|
|
287
|
+
<div style="flex:1;height:4px;background:#28c840;border-radius:2px"></div>
|
|
288
|
+
<div style="flex:1;height:4px;background:#28c840;border-radius:2px"></div>
|
|
289
|
+
<div style="flex:1;height:4px;background:#febc2e;border-radius:2px"></div>
|
|
290
|
+
<div style="flex:1;height:4px;background:#72728a;border-radius:2px"></div>
|
|
291
|
+
</div>
|
|
292
|
+
<div style="color:#72728a;font-size:9px;margin-top:2px">Next service: 8 months</div>
|
|
293
|
+
</div>
|
|
294
|
+
|
|
295
|
+
<div class="chat-preview">
|
|
296
|
+
<div style="color:#72728a;font-size:9px;margin-bottom:6px">AI ASSISTANT</div>
|
|
297
|
+
<div class="chat-msg">Show me all steel parts</div>
|
|
298
|
+
<div class="chat-msg chat-ai">Found 47 steel parts. Highlighting in viewport...</div>
|
|
299
|
+
<div class="chat-input">Ask about this assembly...</div>
|
|
300
|
+
</div>
|
|
301
|
+
</div>
|
|
302
|
+
|
|
303
|
+
<!-- Status Bar -->
|
|
304
|
+
<div class="statusbar">
|
|
305
|
+
<div class="status-item"><div class="status-dot"></div> Ready</div>
|
|
306
|
+
<div class="status-item">Mode: Normal</div>
|
|
307
|
+
<div class="status-item">Units: mm</div>
|
|
308
|
+
<div class="status-item">Grid: 1.0</div>
|
|
309
|
+
<div class="status-item">FPS: 60</div>
|
|
310
|
+
<div class="status-item" style="margin-left:auto; color:#ff9520">cycleCAD v1.0</div>
|
|
311
|
+
</div>
|
|
312
|
+
</div>
|
|
313
|
+
</body>
|
|
314
|
+
</html>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cyclecad",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Browser-based parametric 3D CAD modeler with AI-powered tools, native Inventor file parsing, and smart assembly management. No install required.",
|
|
5
5
|
"main": "index.html",
|
|
6
6
|
"scripts": {
|
|
@@ -30,4 +30,4 @@
|
|
|
30
30
|
"bugs": {
|
|
31
31
|
"url": "https://github.com/vvlars-cmd/cyclecad/issues"
|
|
32
32
|
}
|
|
33
|
-
}
|
|
33
|
+
}
|
package/screenshot.png
ADDED
|
Binary file
|