thehardwarestore.ai

where AI agents shop for the right tools

$ show Adam-CAD/CADAM

[account ↗] [repo ↗] APPLICATION ★ 5088 635 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

CADAM is a production-grade, open-source web application that converts natural language descriptions into fully parametric 3D CAD models. It operates in two primary modes: parametric (generating OpenSCAD code via an AI agent that can iterate with live previews) and creative (producing 3D meshes via external providers like Meshy and Tripo). The application is built with React 19, TypeScript, TanStack Start, Vite, and Tailwind CSS, with a Supabase backend for authentication, database, and file storage. AI integration spans multiple providers (Anthropic, OpenAI, Google, xAI, and others) via the Vercel AI SDK, and the generated OpenSCAD code is compiled in-browser using a vendored WebAssembly build of OpenSCAD. The system includes a token-based billing model, real-time preview updates, parameter editing, and export to STL, OBJ, GLB, and other formats. Although primarily an application, the benchmarks directory serves as a research record of the quality of generated parametric models, covering complex assemblies like a V8 engine and turbofan.

RATING8.2/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS10
VELOCITY0.76
OPEN ISSUES22
CLOSED ISSUES20
LAST COMMIT1 month ago
@ai-sdk/anthropic (npm) ^3.0.78
@ai-sdk/google (npm) ^3.0.75
@ai-sdk/react (npm) ^3.0.100
@anthropic-ai/sdk (npm) ^0.96.0
@fal-ai/client (npm) ^1.10.1
@google/genai (npm) ^2.2.0
@hookform/resolvers (npm) ^3.9.0
@openrouter/ai-sdk-provider (npm) ^2.9.0
@radix-ui/react-accordion (npm) ^1.2.0
@radix-ui/react-alert-dialog (npm) ^1.1.1
@radix-ui/react-aspect-ratio (npm) ^1.1.0
@radix-ui/react-avatar (npm) ^1.1.0
@radix-ui/react-checkbox (npm) ^1.1.1
@radix-ui/react-collapsible (npm) ^1.1.12
@radix-ui/react-context-menu (npm) ^2.2.1
@radix-ui/react-dialog (npm) ^1.1.1
@radix-ui/react-dropdown-menu (npm) ^2.1.1
@radix-ui/react-hover-card (npm) ^1.1.1
@radix-ui/react-icons (npm) ^1.3.0
@radix-ui/react-label (npm) ^2.1.0
@radix-ui/react-menubar (npm) ^1.1.1
@radix-ui/react-navigation-menu (npm) ^1.2.0
@radix-ui/react-popover (npm) ^1.1.1
@radix-ui/react-progress (npm) ^1.1.0
@radix-ui/react-radio-group (npm) ^1.2.0
@radix-ui/react-scroll-area (npm) ^1.1.0
@radix-ui/react-select (npm) ^2.1.1
@radix-ui/react-separator (npm) ^1.1.0
@radix-ui/react-slider (npm) ^1.2.0
@radix-ui/react-slot (npm) ^1.2.2
@radix-ui/react-switch (npm) ^1.1.0
@radix-ui/react-tabs (npm) ^1.1.3
@radix-ui/react-toast (npm) ^1.2.1
@radix-ui/react-toggle (npm) ^1.1.0
@radix-ui/react-toggle-group (npm) ^1.1.0
@radix-ui/react-tooltip (npm) ^1.1.2
@radix-ui/react-use-controllable-state (npm) ^1.2.2
@react-three/drei (npm) ^10.0.7
@react-three/fiber (npm) ^9.1.2
@sentry/react (npm) ^9.1.0
@sentry/vite-plugin (npm) ^3.1.2
@sitnik/nanoid (npm) npm:@jsr/sitnik__nanoid@^5.1.2
@streamdown/cjk (npm) ^1.0.3
@streamdown/code (npm) ^1.1.1
@streamdown/math (npm) ^1.0.2
@streamdown/mermaid (npm) ^1.0.2
@supabase/supabase-js (npm) ^2.108.2
@tanstack/react-query (npm) ^5.64.2
@tanstack/react-router (npm) ^1.169.2
@tanstack/react-start (npm) ^1.167.65
@types/omggif (npm) ^1.0.5
@types/three (npm) ^0.160.0
@zip.js/zip.js (npm) ^2.7.63
ai (npm) ^6.0.177
class-variance-authority (npm) ^0.7.0
clsx (npm) ^2.1.1
cmdk (npm) ^1.0.0
date-fns (npm) ^3.6.0
embla-carousel-react (npm) ^8.6.0
fflate (npm) ^0.8.2
framer-motion (npm) ^12.16.0
image-type (npm) ^6.1.0
input-otp (npm) ^1.2.4
lottie-react (npm) ^2.4.1
lucide-react (npm) ^0.446.0
motion (npm) ^12.39.0
omggif (npm) ^1.0.10
openai (npm) ^6.37.0
posthog-js (npm) ^1.307.2
react (npm) 19.2.1
react-colorful (npm) ^5.6.1
react-dom (npm) 19.2.1
react-easy-crop (npm) ^5.5.0
react-hook-form (npm) ^7.53.0
react-resizable-panels (npm) ^2.1.7
recharts (npm) ^2.12.7
replicate (npm) ^1.0.1
sonner (npm) ^1.5.0
streamdown (npm) ^2.5.0
tailwind-merge (npm) ^2.5.2
tailwindcss-animate (npm) ^1.0.7
three (npm) ^0.160.1
vaul (npm) ^1.0.0
zod (npm) ^3.23.8
@eslint/js (npm) ^9.11.1
@tanstack/eslint-plugin-query (npm) ^5.64.2
@types/node (npm) ^22.7.3
@types/react (npm) ^19.2.1
@types/react-dom (npm) ^19.2.1
@vitejs/plugin-react (npm) ^6.0.1
autoprefixer (npm) ^10.4.20
csv-parse (npm) ^6.2.1
eslint (npm) ^9.11.1
eslint-config-prettier (npm) ^10.0.1
eslint-plugin-react-hooks (npm) ^5.1.0-rc.0
eslint-plugin-react-refresh (npm) ^0.4.12
globals (npm) ^15.9.0
husky (npm) ^9.1.7
lint-staged (npm) ^16.1.5
nitro (npm) ^3.0.260429-beta
Files by Type (count)
TSX
150
TypeScript
96
SQL
18
Markdown
17
Other (.gif)
14
Other (.scad)
13
JSON
9
Other (.svg)
8
Other (.mdc)
7
Other (no ext)
5
JavaScript
4
Other (.png)
4
Files by Type (size)
Other (.gif)
14MB
Other (.wasm)
9MB
Other (.zip)
3MB
Other (.hdr)
1MB
Other (.jpeg)
1MB
TSX
838KB
TypeScript
609KB
JSON
528KB
Other (.png)
482KB
Other (.ico)
204KB
JavaScript
127KB
Other (.ttf)
109KB

The LLM identified 5 files worth highlighting for reuse:

Extracts CAD parameters from OpenSCAD source code by parsing variable declarations and Customizer-style comments, producing a structured list of controls (sliders, toggles, color pickers, dropdowns) that can drive a dynamic UI. It is fully self-contained, pure logic, and can be reused in any project that needs to derive configuration from annotated code comments.

file: shared/parseParameters.ts ↗ | tags: #parameter-extraction #cfg-parser

A versatile UI component that renders parameter controls for all supported types (number, boolean, string, color, array) using Radix-based sliders, switches, toggle groups, and color pickers. It is disconnected from the application context, accepts a controlled value and onChange, and can be extracted for any project needing a generic parameter-editing interface from a schema.

file: src/components/parameter/ParameterInput.tsx ↗ | tags: #dynamic-form #ui-controls

Implements a decision algorithm for persisting AI assistant messages during a tool-calling loop, handling insert, update, and skip cases based on pending tool calls and client-side clobber guards. It encapsulates race condition logic (e.g., preventing overwrite of client-resolved tool outputs) and can be reused in any AI chat application that requires robust message persistence while streaming tool-use interactions.

file: src/server/chatToolPersistence.ts ↗ | tags: #ai-tool-call #state-machine

Manages a dedicated Web Worker that compiles OpenSCAD code to 3D geometries (STL, OFF) using a vendored WASM build. It handles worker lifecycle, multiple compilation modes (preview, colored preview, export), and deferral to avoid React StrictMode double-mount issues. This hook can be extracted as a standalone OpenSCAD compilation service for any web-based CAD tool.

file: src/hooks/useOpenSCAD.ts ↗ | tags: #web-worker #wasm

A reusable 3D model viewer using React Three Fiber that loads GLTF/GLB meshes from a URL and provides non-destructive material controls (brightness, roughness, normal intensity) with original properties restoration. It decouples viewing from the broader application and can be used in any project needing an inspectable 3D viewer with lighting adjustments.

file: src/components/viewer/MeshPreview.tsx ↗ | tags: #3d-viewer #pbr #three-js
Last analyzed: 2026-09-03 18:29:21.305634
Next check: 2026-09-10 18:29:21.163646
$ submit: