- Brand ◢ chisel-wedge favicon (SVG + 32px PNG + 180px apple-touch-icon)
- 1200x630 OG share card (Say it. Shape it. + isometric wireframe), rendered
from HTML via headless Brave; source in step-service/.render/
- og:/twitter: meta with image, theme-color
- vite publicDir=static so assets ship in the build
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Single source of truth: build123d drives BOTH the STL preview and the STEP
export from the same script + params, so what you see is what you download.
Verified live: generate → build123d → /api/build STL + /api/step STEP.
- prompts: SYSTEM_PROMPT teaches build123d (Python) with # @param sliders
- claude.ts: parse python fences
- step.ts → generic geometry-service client (/tessellate + /step), GeometryError
carries the Python traceback for the repair loop
- worker: /api/generate returns code; /api/build tessellates; /api/step runs the
same code+params (no separate Claude re-gen)
- client engine: runJscad → buildModel (server STL); parseParams handles # @param
- App: debounced param rebuilds + rebuilding indicator; STEP sends script+params
- Viewer: Z-up→Y-up rotation; retire client-side JSCAD worker
- VM service.py/runner.py: /tessellate + /step with params
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>