Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 79 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: Bug report
description: Something is broken in CADAM (the open-source app or the demo at adam.new/cadam)
title: "[Bug] "
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to file a bug. Before opening, please search existing issues to avoid duplicates.

- type: dropdown
id: surface
attributes:
label: Where did you hit this?
options:
- "Live demo at adam.new/cadam"
- "Local dev (cloned this repo)"
- "Self-hosted / forked"
default: 0
validations:
required: true

- type: input
id: prompt
attributes:
label: Prompt or input
description: If the bug happened during generation, paste the prompt and any image filename.
placeholder: "a parametric phone stand for a Pixel 8"

- type: dropdown
id: model
attributes:
label: Model selected (if known)
options:
- "Don't know / default"
- "Claude Opus 4.7"
- "GPT-5.5"
- "GPT-5.5 Pro"
- "Gemini 3.1 Pro"
- "DeepSeek V4 Pro"
- "Other (mention in description)"

- type: textarea
id: repro
attributes:
label: Steps to reproduce
placeholder: |
1. Go to adam.new/cadam
2. Type "..."
3. Click ...
4. See error
validations:
required: true

- type: textarea
id: expected
attributes:
label: What did you expect?
validations:
required: true

- type: textarea
id: actual
attributes:
label: What actually happened?
description: Include error text, console output, or a screen recording link if you can.
validations:
required: true

- type: input
id: browser
attributes:
label: Browser + OS
placeholder: "Chrome 130 / macOS 15.1"

- type: textarea
id: extra
attributes:
label: Anything else?
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Discord community
url: https://discord.com/invite/HKdXDqAHCs
about: Quick questions, demo sharing, troubleshooting
- name: Live demo
url: https://adam.new/cadam
about: Try CADAM without cloning anything
37 changes: 37 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Feature request
description: Suggest something CADAM should do
title: "[Feature] "
labels: ["enhancement"]
body:
- type: textarea
id: problem
attributes:
label: What problem does this solve?
description: Start with the user pain, not the implementation.
validations:
required: true

- type: textarea
id: proposal
attributes:
label: What would a good solution look like?
validations:
required: true

- type: textarea
id: alternatives
attributes:
label: What alternatives have you considered?

- type: dropdown
id: audience
attributes:
label: Who would benefit most?
multiple: true
options:
- "3D printing hobbyists / makers"
- "Mechanical engineers"
- "Industrial designers"
- "Students / educators"
- "Power OpenSCAD users"
- "Other (mention in description)"
43 changes: 43 additions & 0 deletions .github/ISSUE_TEMPLATE/model_routing.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: Model / routing issue
description: Something about model selection, output quality, or vision support is off
title: "[Model] "
labels: ["model-routing"]
body:
- type: dropdown
id: model
attributes:
label: Which model?
options:
- "Claude Opus 4.7"
- "GPT-5.5"
- "GPT-5.5 Pro"
- "Gemini 3.1 Pro"
- "DeepSeek V4 Pro"
- "Other"
validations:
required: true

- type: textarea
id: prompt
attributes:
label: Prompt or image
validations:
required: true

- type: textarea
id: output
attributes:
label: What did the model produce?

- type: textarea
id: expected
attributes:
label: What did you expect?
validations:
required: true

- type: textarea
id: notes
attributes:
label: Notes
description: Anything else useful (regression vs prior model, vision-related, region/locale, etc.)
31 changes: 31 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
## Summary

<!-- What does this PR do, in one or two sentences? -->

## Why

<!-- Linked issue, user pain, or product reason. -->

Closes #

## Changes

<!-- Bullet the meaningful changes. -->

-

## Testing

<!-- How was this verified? Manual steps, screenshots, recordings, unit tests. -->

- [ ] Manually tested locally
- [ ] Tested on the live demo (if applicable)
- [ ] Added or updated tests (if applicable)

## Risk

<!-- Anything risky? Migrations, prod-only paths, irreversible operations, model behavior changes. -->

## Screenshots / clips

<!-- Optional: drag in a recording or before/after image. -->
46 changes: 46 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: CI

on:
push:
branches: [master]
pull_request:
branches: [master]

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
Comment on lines +9 to +11
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 cancel-in-progress: true is scoped to the github.ref group with no branch exclusion, so rapid back-to-back pushes directly to master will cancel earlier CI runs and leave those commits without a completed status check. Staggered merges during any active sprint could silently skip CI on intermediate master commits. The standard fix is to only cancel in-progress runs for PRs and let master runs always complete.

Suggested change
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}


jobs:
build:
name: typecheck / lint / build
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
Comment on lines +24 to +26
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 node-version: '20' floats to whatever 20.x is current on the runner at the time, so npm ci could resolve against a different Node minor between runs if the runner image is updated. Pin to a specific minor — or better, use node-version-file: '.nvmrc' — to guarantee reproducible installs.

Suggested change
with:
node-version: '20'
cache: 'npm'
with:
node-version: '20.x'
cache: 'npm'


- name: Install dependencies
run: npm ci --no-audit --no-fund

- name: Typecheck
run: npm run typecheck

- name: Lint
run: npm run lint
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: CI skips Supabase linting because it runs npm run lint only, and that script excludes supabase/**.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .github/workflows/ci.yml, line 35:

<comment>CI skips Supabase linting because it runs `npm run lint` only, and that script excludes `supabase/**`.</comment>

<file context>
@@ -0,0 +1,46 @@
+        run: npm run typecheck
+
+      - name: Lint
+        run: npm run lint
+
+      - name: Build
</file context>


- name: Build
run: npm run build
env:
# Build expects these to be defined; supply harmless local-style defaults
# so a fresh fork can still verify the pipeline without prod secrets.
VITE_SUPABASE_ANON_KEY: ci-placeholder-anon-key
VITE_SUPABASE_URL: http://127.0.0.1:54321
VITE_POSTHOG_PROJECT_KEY: ci-placeholder-posthog
VITE_SENTRY_ENVIRONMENT: ci
VITE_SENTRY_DSN: ''
Comment on lines +34 to +46
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 lint:supabase promised but absent from CI

The PR description explicitly states CI runs npm run lint:supabase, and the validation checklist claims it passes — but the workflow stops at npm run build. The lint:supabase script runs deno lint supabase, meaning every Supabase Edge Function change merges to master without ever being linted. Deno also isn't installed in the job, so adding the step later would fail immediately without a uses: denoland/setup-deno step.

3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ npm run dev

- Node.js and npm
- Supabase CLI
- Docker Desktop (required by `npx supabase start` to run the local Postgres + Edge Functions runtime; **on Windows** ensure Docker Desktop is installed and running before running `npx supabase start`, otherwise it will fail with a missing-Docker-engine error)
- ngrok (for local webhook development)

## 🔧 Setting Up Environment Variables
Expand Down Expand Up @@ -160,7 +161,7 @@ npx supabase functions serve --no-verify-jwt

## 🛠️ Built With

- **Frontend:** React 18 + TypeScript + Vite
- **Frontend:** React 19 + TypeScript + Vite
- **3D Rendering:** Three.js + React Three Fiber
- **CAD Engine:** OpenSCAD WebAssembly
- **Backend:** Supabase (PostgreSQL + Edge Functions)
Expand Down
27 changes: 25 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,30 @@
{
"name": "vite-react-typescript-starter",
"name": "cadam",
"version": "0.1.0",
"description": "CADAM is the open source text-to-CAD web application. Generate parametric 3D models from natural language and images, export STL/SCAD, runs in your browser via OpenSCAD WebAssembly.",
"homepage": "https://adam.new/cadam",
"repository": {
"type": "git",
"url": "git+https://github.com/Adam-CAD/CADAM.git"
},
"bugs": {
"url": "https://github.com/Adam-CAD/CADAM/issues"
},
"author": "Adam (https://adam.new)",
"license": "GPL-3.0-or-later",
"keywords": [
"cad",
"text-to-cad",
"openscad",
"wasm",
"3d",
"parametric",
"ai",
"llm",
"three-js",
"react"
],
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
Expand Down
Loading