forgecad 0.9.14 → 0.9.16
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/LICENSE +6 -4
- package/README.md +8 -4
- package/dist/assets/{AdminPage-eWGs2K6H.js → AdminPage-CXvls4-J.js} +2 -2
- package/dist/assets/{BenchmarkPage-CTrLKfpo.js → BenchmarkPage-B27zk8xL.js} +4 -15
- package/dist/assets/{BlogPage-5nPesyds.js → BlogPage-CMAVvgQL.js} +2 -2
- package/dist/assets/{DocsPage-C4Y3nbYc.js → DocsPage-knf4I4h7.js} +9 -3
- package/dist/assets/EditorApp-BHMQlJ-D.js +14686 -0
- package/dist/assets/{EditorApp-BAnckbsk.css → EditorApp-BpjZgzk0.css} +846 -0
- package/dist/assets/{EmbedViewer-C8fB4n5U.js → EmbedViewer-D7ZGlFjx.js} +3 -3
- package/dist/assets/{LandingPageProofDriven-jSz0LaMM.js → LandingPageProofDriven-CnevhTE8.js} +36 -38
- package/dist/assets/LegalPage-BPTUmqeg.js +39 -0
- package/dist/assets/LegalPage-BRlScr9A.css +91 -0
- package/dist/assets/{PricingPage-B83B90zh.js → PricingPage-B0D4goG_.js} +19 -19
- package/dist/assets/{PricingPage-BMedqFef.css → PricingPage-BPF6HKyO.css} +25 -0
- package/dist/assets/{SettingsPage-DY889pcu.js → SettingsPage-CFF-UgjI.js} +2 -2
- package/dist/assets/app-CE3sYcV7.css +3890 -0
- package/dist/assets/{app-bEww1ic4.js → app-T0pDcSX4.js} +3382 -1069
- package/dist/assets/cli/{render-Cho2uKG_.js → render-C5pcIISc.js} +477 -29
- package/dist/assets/{constructionHistoryWorker-HYwzJY4m.js → constructionHistoryWorker-Ba2Hm58b.js} +928 -243
- package/dist/assets/{evalWorker-CjQwJSE-.js → evalWorker-vkx310U2.js} +8883 -6040
- package/dist/assets/{forgecad_geometry-CH2nvuLA.js → forgecad_geometry-Dgceylq9.js} +43 -1
- package/dist/assets/forgecad_geometry_bg-dD4RNQF1.wasm +0 -0
- package/dist/assets/{inspectWorker-DeRnMVv1.js → inspectWorker-BuTJDVX6.js} +1179 -273
- package/dist/assets/{javascript-70-4uGcz.js → javascript-1kQXfVaz.js} +1 -1
- package/dist/assets/{targets-D6PWsv6X.js → jointPose-B_Cgedn9.js} +71 -3
- package/dist/assets/landing-proof-driven-DiGqdtWa.js +18 -0
- package/dist/assets/{landing-proof-driven-oFYW6mjz.css → landing-proof-driven-ORyigZ6p.css} +13 -7
- package/dist/assets/legalContent-ZfFGMmi4.js +251 -0
- package/dist/assets/{manifold-rmfAcdwF.js → manifold-BWgsjmAM.js} +1 -1
- package/dist/assets/{manifold-uRzgk5O8.js → manifold-D6IFSkhH.js} +2 -2
- package/dist/assets/{manifold-CG9Fokx-.js → manifold-rZexZI0G.js} +1 -1
- package/dist/assets/{reportWorker-4cW_ZpoS.js → reportWorker-0AGij1Ru.js} +8659 -12771
- package/dist/assets/{scalar-sampling-budget-CfDiFvh7.js → scalar-sampling-budget-J5cuzxT1.js} +8050 -6203
- package/dist/assets/{scanProxyWorker-Bs2TDgLw.js → scanProxyWorker-Vl4Wxa1y.js} +50 -6
- package/dist/assets/{solver-DuJAO8S6.js → solver-BZ9LPTHs.js} +1 -1
- package/dist/assets/solver_bg-DAHZJ_rw.wasm +0 -0
- package/dist/assets/{vendor-react-Da3A2QmU.js → vendor-react-6j1Kke-Y.js} +6 -5
- package/dist/cli/render.html +1 -1
- package/dist/docs/index.html +2 -2
- package/dist/docs-raw/AI/ai-native-cad.md +50 -0
- package/dist/docs-raw/AI/usage.md +5 -12
- package/dist/docs-raw/CLI.md +34 -10
- package/dist/docs-raw/component-model.md +27 -11
- package/dist/docs-raw/generated/assembly.md +374 -187
- package/dist/docs-raw/generated/concepts.md +245 -237
- package/dist/docs-raw/generated/core.md +283 -6
- package/dist/docs-raw/generated/curves.md +274 -361
- package/dist/docs-raw/generated/lib.md +9 -19
- package/dist/docs-raw/generated/output.md +29 -4
- package/dist/docs-raw/generated/runtime-names.md +49 -0
- package/dist/docs-raw/generated/sdf.md +31 -0
- package/dist/docs-raw/generated/sheet-metal.md +9 -0
- package/dist/docs-raw/generated/sketch.md +44 -1
- package/dist/docs-raw/generated/viewport.md +11 -3
- package/dist/docs-raw/guides/coordinate-system.md +20 -16
- package/dist/docs-raw/guides/geometry-conventions.md +2 -2
- package/dist/docs-raw/guides/inspection-bundles.md +2 -1
- package/dist/docs-raw/guides/joint-design.md +24 -0
- package/dist/docs-raw/guides/positioning.md +13 -3
- package/dist/docs-raw/legal/privacy.md +63 -0
- package/dist/docs-raw/legal/software-license.md +55 -0
- package/dist/docs-raw/legal/terms.md +87 -0
- package/dist/docs-raw/skills/forgecad-3d-reconstruction.md +1 -1
- package/dist/docs-raw/skills/forgecad-blockout-model.md +1 -1
- package/dist/docs-raw/skills/forgecad-component-model.md +11 -2
- package/dist/docs-raw/skills/forgecad-high-level-spec.md +1 -1
- package/dist/docs-raw/skills/forgecad-image-replicator.md +8 -8
- package/dist/docs-raw/skills/forgecad-lld.md +1 -1
- package/dist/docs-raw/skills/forgecad-make-a-model.md +40 -39
- package/dist/docs-raw/skills/forgecad-model-grader.md +2 -2
- package/dist/docs-raw/skills/forgecad-prepare-prompt.md +2 -2
- package/dist/docs-raw/skills/forgecad-project.md +3 -1
- package/dist/docs-raw/skills/forgecad-reconstruction-benchmark.md +1 -1
- package/dist/docs-raw/skills/forgecad-render-inspect.md +4 -2
- package/dist/docs-raw/skills/forgecad-visual-spec.md +1 -1
- package/dist/docs-raw/skills/forgecad.md +4 -3
- package/dist/docs-raw/welcome.md +2 -0
- package/dist/index.html +40 -12
- package/dist/llms.txt +8 -0
- package/dist/site.webmanifest +1 -1
- package/dist/sitemap.xml +49 -13
- package/dist-cli/{check-compiler-U5SOPN7X.js → check-compiler-SYQ2PWOB.js} +1 -2
- package/dist-cli/{check-query-propagation-XOKNSSYU.js → check-query-propagation-HIAGV62W.js} +1 -2
- package/dist-cli/{chunk-EXWGNL6K.js → chunk-SPZE3DUY.js} +20659 -17930
- package/dist-cli/forgecad.js +3568 -1250
- package/dist-cli/{forgecad_geometry-GYVNKPIE.js → forgecad_geometry-QOQIIP53.js} +42 -1
- package/dist-cli/forgecad_geometry_bg.wasm +0 -0
- package/dist-cli/{solver-46FFSK2U.js → solver-OK4HECRH.js} +0 -1
- package/dist-cli/solver_bg.wasm +0 -0
- package/dist-skill/CONTEXT.md +1192 -725
- package/dist-skill/SKILL.md +3 -2
- package/dist-skill/docs/API/core/concepts.md +64 -1
- package/dist-skill/docs/CLI.md +34 -10
- package/dist-skill/docs/generated/assembly.md +339 -213
- package/dist-skill/docs/generated/core.md +283 -6
- package/dist-skill/docs/generated/curves.md +272 -362
- package/dist-skill/docs/generated/lib.md +9 -19
- package/dist-skill/docs/generated/output.md +29 -4
- package/dist-skill/docs/generated/runtime-names.md +40 -0
- package/dist-skill/docs/generated/sdf.md +31 -0
- package/dist-skill/docs/generated/sheet-metal.md +9 -0
- package/dist-skill/docs/generated/sketch.md +44 -2
- package/dist-skill/docs/generated/viewport.md +2 -87
- package/dist-skill/docs/guides/coordinate-system.md +20 -16
- package/dist-skill/docs/guides/geometry-conventions.md +2 -2
- package/dist-skill/docs/guides/inspection-bundles.md +2 -1
- package/dist-skill/docs/guides/joint-design.md +24 -0
- package/dist-skill/docs/guides/positioning.md +13 -3
- package/dist-skill/library/forgecad-component-model/SKILL.md +10 -1
- package/dist-skill/library/forgecad-image-replicator/SKILL.md +6 -6
- package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.py +166 -0
- package/dist-skill/library/forgecad-make-a-model/SKILL.md +39 -38
- package/dist-skill/library/forgecad-model-grader/SKILL.md +1 -1
- package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +1 -1
- package/dist-skill/library/forgecad-project/SKILL.md +2 -0
- package/dist-skill/library/forgecad-render-inspect/SKILL.md +3 -1
- package/examples/api/assembly-kinematics-foundation.forge.js +65 -0
- package/examples/api/assembly-kinematics-four-bar.forge.js +115 -0
- package/examples/api/assembly-kinematics-limb.forge.js +116 -0
- package/examples/api/connector-frame-rig-chain.forge.js +102 -0
- package/examples/api/exact-sheet-shell-assembly.forge.js +0 -2
- package/examples/api/exact-surface-studio.forge.js +6 -8
- package/examples/api/helix-basics.forge.js +8 -8
- package/examples/api/lean-foundations/README.md +12 -0
- package/examples/api/lean-foundations/curve-blend-exact.forge.js +22 -0
- package/examples/api/lean-foundations/curve-fit-interpolation.forge.js +18 -0
- package/examples/api/lean-foundations/curve-helix-canonicalization.forge.js +27 -0
- package/examples/api/lean-foundations/curve-route-canonicalization.forge.js +16 -0
- package/examples/api/lean-foundations/curve-trim-reverse.forge.js +24 -0
- package/examples/api/lean-foundations/exact-curve-arc.forge.js +36 -0
- package/examples/api/mixed-edge-finishes-proof.forge.js +8 -11
- package/examples/api/route3d-elbow.forge.js +71 -0
- package/examples/api/transition-curves.forge.js +44 -15
- package/examples/api/variable-sweep-test.forge.js +3 -1
- package/examples/api/y-blend-corner-showcase.forge.js +0 -2
- package/examples/generative/coral-vase.forge.js +1 -1
- package/examples/nurbs-tube.forge.js +1 -1
- package/package.json +17 -13
- package/dist/assets/EditorApp-lXv53A1m.js +0 -13610
- package/dist/assets/app-CsHnaBWt.css +0 -1789
- package/dist/assets/forgecad_geometry_bg-C5_E9Oa9.wasm +0 -0
- package/dist/assets/solver_bg-CWvv4lnN.wasm +0 -0
- package/dist/docs-raw/API/README.md +0 -16
- package/dist/docs-raw/API/core/concepts.md +0 -118
- package/dist/docs-raw/INDEX.md +0 -138
- package/dist/docs-raw/RELEASING.md +0 -87
- package/dist/docs-raw/agent-native-api.md +0 -27
- package/dist/docs-raw/beta-deployment.md +0 -304
- package/dist/docs-raw/beta-operations.md +0 -325
- package/dist/docs-raw/blueprint-first.md +0 -145
- package/dist/docs-raw/cli-monetization.md +0 -112
- package/dist/docs-raw/coding-best-practices.md +0 -120
- package/dist/docs-raw/coding.md +0 -340
- package/dist/docs-raw/deployment.md +0 -374
- package/dist/docs-raw/guides/skill-maintenance.md +0 -161
- package/dist/docs-raw/guides/surface-members.md +0 -82
- package/dist/docs-raw/harbor-cli.md +0 -854
- package/dist/docs-raw/internals/backend-vocabulary.md +0 -35
- package/dist/docs-raw/internals/compiler.md +0 -307
- package/dist/docs-raw/internals/constraint-solver-quality.md +0 -161
- package/dist/docs-raw/internals/constraint-solver.md +0 -176
- package/dist/docs-raw/internals/shape-from-slices.md +0 -152
- package/dist/docs-raw/internals/sketch-2d-pipeline.md +0 -108
- package/dist/docs-raw/platform/admin.md +0 -45
- package/dist/docs-raw/platform/architecture.md +0 -82
- package/dist/docs-raw/platform/auth.md +0 -139
- package/dist/docs-raw/platform/email.md +0 -67
- package/dist/docs-raw/platform/google-oauth-setup.md +0 -88
- package/dist/docs-raw/platform/observability.md +0 -197
- package/dist/docs-raw/platform/projects.md +0 -111
- package/dist/docs-raw/platform/sharing.md +0 -90
- package/dist/docs-raw/product/README.md +0 -39
- package/dist/docs-raw/product/api-as-product-language.md +0 -13
- package/dist/docs-raw/product/business-model.md +0 -15
- package/dist/docs-raw/product/competitive-positioning.md +0 -17
- package/dist/docs-raw/product/creative-manufacturing.md +0 -15
- package/dist/docs-raw/product/founder-story.md +0 -11
- package/dist/docs-raw/product/manufacturing-workflows.md +0 -15
- package/dist/docs-raw/product/onboarding-first-experience.md +0 -256
- package/dist/docs-raw/product/product-loop.md +0 -17
- package/dist/docs-raw/product/strategic-decisions.md +0 -22
- package/dist/docs-raw/product/user-outreach-email-templates.md +0 -161
- package/dist/docs-raw/product/user-segments.md +0 -15
- package/dist/docs-raw/product/vision.md +0 -26
- package/dist/docs-raw/rl-environments.md +0 -350
- package/dist/docs-raw/runbook.md +0 -611
- package/dist-cli/check-compiler-U5SOPN7X.js.map +0 -1
- package/dist-cli/check-query-propagation-XOKNSSYU.js.map +0 -1
- package/dist-cli/chunk-EXWGNL6K.js.map +0 -1
- package/dist-cli/forgecad.js.map +0 -1
- package/dist-cli/forgecad_geometry-GYVNKPIE.js.map +0 -1
- package/dist-cli/solver-46FFSK2U.js.map +0 -1
- package/dist-skill/SKILL-dev.md +0 -145
- package/dist-skill/docs-dev/API/core/concepts.md +0 -118
- package/dist-skill/docs-dev/CLI.md +0 -677
- package/dist-skill/docs-dev/agent-native-api.md +0 -27
- package/dist-skill/docs-dev/blueprint-first.md +0 -145
- package/dist-skill/docs-dev/coding-best-practices.md +0 -120
- package/dist-skill/docs-dev/coding.md +0 -340
- package/dist-skill/docs-dev/component-model.md +0 -164
- package/dist-skill/docs-dev/generated/assembly.md +0 -794
- package/dist-skill/docs-dev/generated/core.md +0 -2117
- package/dist-skill/docs-dev/generated/curves.md +0 -2583
- package/dist-skill/docs-dev/generated/lib.md +0 -169
- package/dist-skill/docs-dev/generated/output.md +0 -247
- package/dist-skill/docs-dev/generated/sdf.md +0 -446
- package/dist-skill/docs-dev/generated/sheet-metal.md +0 -504
- package/dist-skill/docs-dev/generated/sketch.md +0 -1811
- package/dist-skill/docs-dev/generated/viewport.md +0 -585
- package/dist-skill/docs-dev/generated/wood.md +0 -108
- package/dist-skill/docs-dev/guides/coordinate-system.md +0 -46
- package/dist-skill/docs-dev/guides/geometry-conventions.md +0 -52
- package/dist-skill/docs-dev/guides/inspection-bundles.md +0 -485
- package/dist-skill/docs-dev/guides/joint-design.md +0 -78
- package/dist-skill/docs-dev/guides/modeling-recipes.md +0 -78
- package/dist-skill/docs-dev/guides/positioning.md +0 -161
- package/dist-skill/docs-dev/guides/skill-maintenance.md +0 -161
- package/dist-skill/docs-dev/internals/backend-vocabulary.md +0 -35
- package/dist-skill/docs-dev/internals/compiler.md +0 -307
- package/dist-skill/docs-dev/internals/constraint-solver-quality.md +0 -161
- package/dist-skill/docs-dev/internals/constraint-solver.md +0 -176
- package/dist-skill/docs-dev/internals/sketch-2d-pipeline.md +0 -108
- package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.mjs +0 -289
- package/examples/api/bolted-service-cover.forge.js +0 -17
- package/examples/api/cable-gland-anchor.forge.js +0 -14
- package/examples/api/captured-cartridge-guide.forge.js +0 -14
- package/examples/api/captured-linear-slide.forge.js +0 -13
- package/examples/api/clevis-pin-joint.forge.js +0 -13
- package/examples/api/datum-enclosure.forge.js +0 -16
- package/examples/api/hose-barb-port.forge.js +0 -14
- package/examples/api/knuckled-hinge-assembly.forge.js +0 -15
- package/examples/api/living-hinge-cover.forge.js +0 -14
- package/examples/api/pcb-terminal-block.forge.js +0 -22
- package/examples/api/pinned-lever-pivot-stack.forge.js +0 -14
- package/examples/api/retained-shaft-knob-stack.forge.js +0 -15
- package/examples/api/routed-tube-clip.forge.js +0 -15
- package/examples/api/seated-bearing-stack.forge.js +0 -30
- package/examples/api/snap-latch-cover.forge.js +0 -14
- package/examples/api/thumb-screw-clamp.forge.js +0 -15
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# Model Sharing and Publishing
|
|
2
|
-
|
|
3
|
-
ForgeCAD supports multiple ways to share models. Two categories exist: **server-backed publishing** (persistent URLs, requires auth to publish) and **client-side sharing** (no server needed, data encoded in the URL).
|
|
4
|
-
|
|
5
|
-
See [architecture.md](architecture.md) for the full URL route table.
|
|
6
|
-
|
|
7
|
-
## Server-backed publishing
|
|
8
|
-
|
|
9
|
-
Authenticated users can publish models to get a stable, public URL. Published models are stored in the `shared_files` database table.
|
|
10
|
-
|
|
11
|
-
### Database schema (`shared_files`)
|
|
12
|
-
|
|
13
|
-
| Column | Type | Notes |
|
|
14
|
-
|--------|------|-------|
|
|
15
|
-
| `id` | uuid | Primary key |
|
|
16
|
-
| `share_id` | text | Unique, 10-char nanoid -- the URL identifier |
|
|
17
|
-
| `owner_id` | uuid | FK to `users.id`, cascade delete |
|
|
18
|
-
| `filename` | text | Original filename |
|
|
19
|
-
| `code` | text | Full source code |
|
|
20
|
-
| `title` | text | Optional display title |
|
|
21
|
-
| `created_at` | timestamptz | Auto-set |
|
|
22
|
-
| `updated_at` | timestamptz | Auto-set, updated on re-publish |
|
|
23
|
-
|
|
24
|
-
### Public URLs
|
|
25
|
-
|
|
26
|
-
| URL | Behavior |
|
|
27
|
-
|-----|----------|
|
|
28
|
-
| `/m/:shareId` | Full model preview: source code panel + 3D viewport |
|
|
29
|
-
| `/m/:shareId?embed=1` | Viewport only, no UI chrome -- designed for iframe embeds |
|
|
30
|
-
|
|
31
|
-
No authentication is required to view a published model.
|
|
32
|
-
|
|
33
|
-
### API endpoints
|
|
34
|
-
|
|
35
|
-
| Method | Route | Auth | Purpose |
|
|
36
|
-
|--------|-------|------|---------|
|
|
37
|
-
| GET | `/api/shares/:shareId` | None | Fetch a published model (code, title, author name, timestamps) |
|
|
38
|
-
| GET | `/api/shares` | Required | List the authenticated user's published models |
|
|
39
|
-
| POST | `/api/shares` | Required | Publish a new model or update an existing one |
|
|
40
|
-
| DELETE | `/api/shares/:shareId` | Required (owner or admin) | Unpublish a model |
|
|
41
|
-
|
|
42
|
-
### Publish behavior
|
|
43
|
-
|
|
44
|
-
- If the user already has a published model with the same filename, `POST /api/shares` updates the existing share rather than creating a new one. The `share_id` is preserved so existing links remain valid.
|
|
45
|
-
- Each user may publish up to **100** models. Exceeding this limit returns `403` with `{ error: "Share limit reached" }`.
|
|
46
|
-
- All publish, update, and delete operations are recorded in the `audit_log` table.
|
|
47
|
-
|
|
48
|
-
### Audit trail
|
|
49
|
-
|
|
50
|
-
Every share mutation writes to `audit_log` with one of these actions:
|
|
51
|
-
- `share.publish` -- new model published
|
|
52
|
-
- `share.update` -- existing model code/title updated
|
|
53
|
-
- `share.delete` -- model unpublished
|
|
54
|
-
|
|
55
|
-
## Client-side sharing (no server)
|
|
56
|
-
|
|
57
|
-
These methods encode model data directly into the URL. They work without authentication and without the hosted backend.
|
|
58
|
-
|
|
59
|
-
### Inline code (hash fragment)
|
|
60
|
-
|
|
61
|
-
Format: `/app#code/<filename>/<lz-compressed-code>`
|
|
62
|
-
|
|
63
|
-
The code is compressed with `lz-string` (`compressToEncodedURIComponent`) and placed in the URL hash. Since hash fragments are not sent to the server, this works entirely client-side. Encoding and decoding logic lives in `src/share.ts`.
|
|
64
|
-
|
|
65
|
-
### Multi-file bundles (hash fragment)
|
|
66
|
-
|
|
67
|
-
Format: `/app#bundle/<lz-compressed-packed>`
|
|
68
|
-
|
|
69
|
-
Packs multiple files into a single compressed payload using null-byte separators: `entry\0filename1\0code1\0filename2\0code2...`. Used when a model has import dependencies.
|
|
70
|
-
|
|
71
|
-
### Gist sharing
|
|
72
|
-
|
|
73
|
-
Format: `/app?gist=<github-gist-id>`
|
|
74
|
-
|
|
75
|
-
Fetches code from a public GitHub Gist at load time.
|
|
76
|
-
|
|
77
|
-
### URL sharing
|
|
78
|
-
|
|
79
|
-
Format: `/app?url=<external-url>`
|
|
80
|
-
|
|
81
|
-
Fetches code from any publicly accessible URL at load time.
|
|
82
|
-
|
|
83
|
-
## Source files
|
|
84
|
-
|
|
85
|
-
| File | Role |
|
|
86
|
-
|------|------|
|
|
87
|
-
| `server/routes/shares.ts` | API route handlers for publish/unpublish/list |
|
|
88
|
-
| `server/db/schema.ts` | `sharedFiles` table definition and types |
|
|
89
|
-
| `src/pages/SharedModelPage.tsx` | Frontend page rendering `/m/:shareId` |
|
|
90
|
-
| `src/share.ts` | Client-side encode/decode for hash-based sharing |
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# Product Docs
|
|
2
|
-
|
|
3
|
-
These docs are product-first. They are for PMs, founders, designers, product engineers, and strategic reviewers who need to decide what ForgeCAD should become.
|
|
4
|
-
|
|
5
|
-
They intentionally overlap with developer docs in a few places, but they have a different job. Product docs explain the market, user, workflow, and business reason behind a direction. Developer docs explain how to implement it safely.
|
|
6
|
-
|
|
7
|
-
Use the generated API docs and ForgeCAD skills for exact API usage. Use this folder to decide which API vocabulary, workflow, customer segment, or manufacturing route deserves attention.
|
|
8
|
-
|
|
9
|
-
## Themes
|
|
10
|
-
|
|
11
|
-
| Theme | Read this when the question is |
|
|
12
|
-
|---|---|
|
|
13
|
-
| [Vision](vision.md) | What is ForgeCAD, really? |
|
|
14
|
-
| [Founder Story](founder-story.md) | Why did this product start, and what problem did it reveal? |
|
|
15
|
-
| [API As Product Language](api-as-product-language.md) | Why does API vocabulary matter as product strategy? |
|
|
16
|
-
| [Product Loop](product-loop.md) | What loop makes AI-authored CAD reliable? |
|
|
17
|
-
| [User Segments](user-segments.md) | Who are we building for first, next, and later? |
|
|
18
|
-
| [Creative Manufacturing](creative-manufacturing.md) | What is the first wedge? |
|
|
19
|
-
| [Manufacturing Workflows](manufacturing-workflows.md) | How should we think about 3D printing, laser cutting, CNC, furniture, robotics, and export routes? |
|
|
20
|
-
| [Competitive Positioning](competitive-positioning.md) | How should ForgeCAD be compared to OpenSCAD, CadQuery, Fusion, Onshape, Zoo, and prompt-to-CAD tools? |
|
|
21
|
-
| [Business Model](business-model.md) | Where can early revenue come from? |
|
|
22
|
-
| [Strategic Decisions](strategic-decisions.md) | How should future product bets be judged? |
|
|
23
|
-
|
|
24
|
-
## Tactical Product Docs
|
|
25
|
-
|
|
26
|
-
These docs are narrower product operating notes:
|
|
27
|
-
|
|
28
|
-
- [First Account Onboarding](onboarding-first-experience.md) - source of truth for new-account first-run behavior.
|
|
29
|
-
- [User Outreach Email Templates](user-outreach-email-templates.md) - founder-style user discovery and onboarding outreach.
|
|
30
|
-
|
|
31
|
-
Theme docs should stay short and easy to scan. Tactical docs may be longer when they contain templates, checklists, or implementation maps, but they should still link back here so the product reading path stays clear.
|
|
32
|
-
|
|
33
|
-
## How To Use This Folder
|
|
34
|
-
|
|
35
|
-
Start with [Vision](vision.md), [Product Loop](product-loop.md), and [Creative Manufacturing](creative-manufacturing.md) if you are new to the product.
|
|
36
|
-
|
|
37
|
-
Read [Manufacturing Workflows](manufacturing-workflows.md) before deciding whether to add a manufacturing feature such as CNC primitives, slicer integration, sheet workflows, or furniture cut lists.
|
|
38
|
-
|
|
39
|
-
Read [Strategic Decisions](strategic-decisions.md) when a feature sounds exciting but the product reason is still fuzzy.
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# API As Product Language
|
|
2
|
-
|
|
3
|
-
In ForgeCAD, the API is not only a developer convenience. It is the product language that AI agents use to express physical intent.
|
|
4
|
-
|
|
5
|
-
This is why API design is a product decision. When the API has a first-class concept like a connector, gear, sheet bend, inspection bundle, or manufacturing export, the agent can discover it in docs, compose it, validate it, and explain it to the user. When the API lacks that concept, the agent improvises with lower-level geometry and the product becomes fragile.
|
|
6
|
-
|
|
7
|
-
ForgeCAD skills should teach the API that exists. Product docs should help decide which vocabulary deserves to exist next. Those are different jobs. The skills can say how to use a function; product docs should say why that family of functions matters to users, markets, workflows, and business strategy.
|
|
8
|
-
|
|
9
|
-
The best API additions reduce how much specialist knowledge the agent must recreate from scratch. A strong agent can learn a lot from documentation, but documentation should not become a substitute for a domain-shaped product surface. If three agents would implement three fragile versions of the same common manufacturing idea, ForgeCAD likely needs a real concept for it.
|
|
10
|
-
|
|
11
|
-
Product managers should look for repeated recipes, repeated user friction, repeated validation failures, and repeated market requests. Those are signals that the product vocabulary is too weak. The answer may be a new API, a better workflow, a diagnostic, a starter template, a partner integration, or a higher-level export path.
|
|
12
|
-
|
|
13
|
-
The product goal is not the largest possible API. The goal is a vocabulary that makes common physical design intent obvious, inspectable, and manufacturable.
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# Business Model
|
|
2
|
-
|
|
3
|
-
ForgeCAD has three early business paths. They should be explored deliberately instead of blended into one vague market.
|
|
4
|
-
|
|
5
|
-
The first path is Pro users in creative manufacturing. These are makers, engineers, designers, educators, and small teams who want stronger AI-assisted modeling, exports, private projects, and validation workflows. This path proves repeat usage and product-led demand.
|
|
6
|
-
|
|
7
|
-
The second path is embedded parametric commerce. Furniture companies, custom product stores, marketplaces, and printer ecosystems can use ForgeCAD underneath a guided customization experience. The buyer is not paying for "CAD." They are paying for safer customization, fewer manual design steps, better visuals, manufacturing logic, and a shorter path from user intent to orderable object.
|
|
8
|
-
|
|
9
|
-
The third path is strategic enterprise or AI-CAD pilots. These customers care about agent evaluation, semantic CAD generation, backend routing, data, export reliability, or integration into existing workflows. This path can create revenue and strategic signal, but it can also pull the product toward custom services too early.
|
|
10
|
-
|
|
11
|
-
The product should separate model authoring value from hosted workflow value. A partner may pay for a parametric product family, an embed, hosting, support, usage, or an integration. Those are different products, even if they share the same engine.
|
|
12
|
-
|
|
13
|
-
For early business judgement, the strongest evidence is not a broad market slide. The strongest evidence is a repeated paid job: users or partners ask ForgeCAD to generate useful physical objects, the loop succeeds, the output is trusted, and the customer returns.
|
|
14
|
-
|
|
15
|
-
Pricing and deal numbers belong in private planning docs when they include negotiation anchors. The permanent product docs should preserve the strategic shape: Pro subscriptions, partner integrations, OEM/marketplace pilots, and enterprise AI-CAD workflows.
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Competitive Positioning
|
|
2
|
-
|
|
3
|
-
ForgeCAD should not be positioned as "OpenSCAD but newer" or "a JavaScript clone of existing CAD-as-code." That framing makes the product sound like a library choice. The stronger framing is that ForgeCAD is an AI-native workflow for editable, manufacturable physical design.
|
|
4
|
-
|
|
5
|
-
OpenSCAD proved that code can be a CAD interface for programmers. CadQuery and build123d show that Python can express serious parametric CAD with an exact kernel. Replicad shows that browser and JavaScript CAD can be elegant. These tools are valuable, but they are mainly library or authoring environments.
|
|
6
|
-
|
|
7
|
-
Fusion, Onshape, and SolidWorks are professional CAD systems. They are powerful because they serve trained users, teams, manufacturing workflows, and enterprise expectations. They are not naturally shaped around autonomous agents editing semantic source, running validation, producing inspection evidence, and routing outputs from a project folder.
|
|
8
|
-
|
|
9
|
-
Prompt-to-CAD tools are close to the user's desire: describe an object and get geometry. The risk is that the result becomes a dead artifact. ForgeCAD should win by keeping the model editable, parameterized, validated, and exportable after generation.
|
|
10
|
-
|
|
11
|
-
Zoo and KCL are closer to the same future because they also connect code, AI, and CAD. ForgeCAD's strongest differentiation should be backend-agnostic intent, JavaScript/TypeScript familiarity, local-agent workflow, validation evidence, project sync, and an early focus on daily creative manufacturing rather than only professional CAD replacement.
|
|
12
|
-
|
|
13
|
-
The one-line positioning:
|
|
14
|
-
|
|
15
|
-
**OpenSCAD made code a CAD interface for programmers. Fusion and Onshape made CAD collaborative for professionals. ForgeCAD makes editable physical design accessible to AI agents and daily users.**
|
|
16
|
-
|
|
17
|
-
Product work should reinforce that sentence. If a feature only makes ForgeCAD look like a smaller traditional CAD tool, it needs a sharper reason to exist.
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# Creative Manufacturing
|
|
2
|
-
|
|
3
|
-
Creative manufacturing is the first product wedge.
|
|
4
|
-
|
|
5
|
-
The user has a real-world problem and access to a way to make things: a 3D printer, laser cutter, CNC service, local workshop, online manufacturing service, or a partner marketplace. They do not want to spend weeks learning traditional CAD. They want to turn everyday intent into a usable object.
|
|
6
|
-
|
|
7
|
-
The objects are practical and personal: drawer organizers, brackets, adapters, cable guides, kitchen and bathroom helpers, electronics enclosures, fixtures, toys, lamps, furniture fittings, small mechanisms, replacement parts, and custom mounts.
|
|
8
|
-
|
|
9
|
-
This wedge is different from professional CAD replacement. ForgeCAD does not need to beat Fusion, Onshape, or SolidWorks on every enterprise workflow to be useful. It needs to make the first useful object dramatically easier for people who are currently blocked by CAD expertise.
|
|
10
|
-
|
|
11
|
-
The wedge is also different from pure prompt-to-mesh. The result should remain editable. If the adapter is 2 mm too short, the user should change a parameter or ask the agent to adjust the model, then validate and export again. If the furniture fitting needs a different screw pattern, the model should carry enough intent to change safely.
|
|
12
|
-
|
|
13
|
-
The product should favor workflows where repeated small wins compound. A user who makes one useful object can make another. A printer company that helps users make useful objects sells more printer value. A furniture site that lets customers safely customize dimensions reduces friction around fit.
|
|
14
|
-
|
|
15
|
-
Creative manufacturing is not a small niche if the loop becomes reliable. It is the habit of solving physical problems with generated, editable, manufacturable objects.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Founder Story
|
|
2
|
-
|
|
3
|
-
ForgeCAD started from a long-running curiosity about AI interfaces: what does the AI see, what language does it act through, and how much better does it become when the interface is engineered for it?
|
|
4
|
-
|
|
5
|
-
That question became practical during a physical design problem. Ruben wanted to make a custom loft table and realized that a closed CAD system was a poor surface for AI help. If the object lives only inside a complex GUI or proprietary binary state, the AI cannot reliably inspect it, change it, run it, and learn from errors.
|
|
6
|
-
|
|
7
|
-
Code was not chosen because code is magical. Code was chosen because it is both machine-operable and human-readable. The deeper requirement is an expressive representation that AI can learn, humans can inspect, and tools can validate. ForgeCAD uses code as that representation today because it gives parameters, composition, reviewability, and a natural path for agent workflows.
|
|
8
|
-
|
|
9
|
-
The early browser-first implementation used Manifold and Three.js because fast iteration mattered. A user or agent could change the model and see something quickly. Over time, the product grew beyond browser preview into multiple backends, exact export exploration, hosted projects, sharing, skills, inspection bundles, and manufacturing outputs.
|
|
10
|
-
|
|
11
|
-
The important origin lesson is not "build a CAD-as-code tool." The lesson is "design the interface AI needs in order to make physical objects responsibly." ForgeCAD exists because the AI age changes who does the modeling work and therefore changes what the CAD interface should be.
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# Manufacturing Workflows
|
|
2
|
-
|
|
3
|
-
Manufacturing workflows should be evaluated as product routes, not only as geometry features.
|
|
4
|
-
|
|
5
|
-
3D printing is the easiest first route because STL/3MF outputs are familiar, iteration is local, and users tolerate prototypes. The product value is not only export. It is parameter checks, wall-thickness evidence, connectivity checks, print-oriented templates, and the ability for an agent to repair the model after feedback.
|
|
6
|
-
|
|
7
|
-
Laser cutting and sheet workflows are natural next routes because they turn design intent into flat parts, joints, labels, nesting, and assembly guidance. The product question is whether ForgeCAD can reduce the user's need to manually plan tabs, kerf, slots, bend reliefs, and cut sheets.
|
|
8
|
-
|
|
9
|
-
CNC should be treated carefully. "Add CNC primitives" should not mean adding random geometry helpers named after machining words. The user need is closer to stock, workholding, material, tool access, pockets, contours, drilling, dogbones, tabs, tolerances, and safe output routing. A PM should ask whether the feature helps the AI express manufacturable machining intent and whether ForgeCAD can validate enough of that intent to be trusted.
|
|
10
|
-
|
|
11
|
-
Furniture and custom product workflows are especially business-relevant. A customer does not want a CAD editor inside a furniture store. They want safe customization, dimensions, visuals, price logic, BOM/cut-list logic, and an orderable product. ForgeCAD can be the parametric engine underneath that experience.
|
|
12
|
-
|
|
13
|
-
Robotics and mechanism workflows matter because they show ForgeCAD is not just static shapes. Connectors, joints, collision checks, exports, and kinematic evidence can make the product valuable for users who need motion and system-level relationships.
|
|
14
|
-
|
|
15
|
-
The decision rule is simple: a manufacturing workflow is strong when it connects user intent to a validated output route. If ForgeCAD cannot validate or constrain the route yet, the feature may still be worth exploring, but it should be framed as discovery rather than production promise.
|
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
# First Account Onboarding Experience
|
|
2
|
-
|
|
3
|
-
This is a tactical product doc. For the product-first theme map, start with [Product Docs](README.md).
|
|
4
|
-
|
|
5
|
-
This is the source of truth for the first experience after a person creates a ForgeCAD account.
|
|
6
|
-
|
|
7
|
-
Any code, docs copy, starter files, CLI guidance, analytics, or launch issue that changes first-run behavior should start by updating this document. The goal is to keep the experience coherent instead of letting it drift across auth, project creation, examples, docs, and CLI surfaces.
|
|
8
|
-
|
|
9
|
-
## Summary
|
|
10
|
-
|
|
11
|
-
The first account experience should not drop a new user into an empty editor. A new user should land in a small "Start Here" project with three curated files, a visible docs Welcome page, and a clear path from browser exploration to CLI-based local work.
|
|
12
|
-
|
|
13
|
-
The recommended first-run path is:
|
|
14
|
-
|
|
15
|
-
1. Account is created.
|
|
16
|
-
2. User opens `/app`.
|
|
17
|
-
3. If the account has no projects, ForgeCAD creates a private `Start Here` project from the starter template.
|
|
18
|
-
4. The editor opens `00-start-here.forge.js`.
|
|
19
|
-
5. The file itself teaches the first model loop: edit one parameter, run, see geometry change.
|
|
20
|
-
6. The docs nav exposes `/docs/welcome` as the public orientation page.
|
|
21
|
-
7. The Welcome page points to the CLI loop and API docs without making the user read the whole docs set first.
|
|
22
|
-
|
|
23
|
-
## Decision
|
|
24
|
-
|
|
25
|
-
Use a curated starter project as the first account artifact. Do not open the full examples project by default for hosted accounts.
|
|
26
|
-
|
|
27
|
-
The full examples project is too large for first contact. It is useful once the person already knows what kind of thing they are looking for. A first account needs something smaller: one runnable file, one slightly richer parametric file, and one assembly file.
|
|
28
|
-
|
|
29
|
-
## User Profiles
|
|
30
|
-
|
|
31
|
-
### Alex - AI-First Maker
|
|
32
|
-
|
|
33
|
-
**Background:** Uses Codex or Claude Code daily, knows JavaScript well enough to edit generated code, owns a 3D printer.
|
|
34
|
-
|
|
35
|
-
**What Alex Wants:**
|
|
36
|
-
|
|
37
|
-
- Get from idea to printable geometry quickly.
|
|
38
|
-
- Ask an AI agent to change a model and validate it through the CLI.
|
|
39
|
-
- Understand which files matter without reading a large reference.
|
|
40
|
-
- Export STL or images from the terminal.
|
|
41
|
-
|
|
42
|
-
**Ideal Flow:**
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
npm install -g forgecad
|
|
46
|
-
forgecad login
|
|
47
|
-
forgecad project clone start-here
|
|
48
|
-
cd start-here
|
|
49
|
-
forgecad run 00-start-here.forge.js
|
|
50
|
-
forgecad studio .
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
For GitHub/Google accounts, `forgecad login` should offer API-token login because there is no CLI password to submit.
|
|
54
|
-
|
|
55
|
-
**Current Friction:**
|
|
56
|
-
|
|
57
|
-
- A new account sees a blank or near-empty editor state.
|
|
58
|
-
- The CLI is not part of the first-run path.
|
|
59
|
-
- The AI skill exists but is not connected to the account onboarding story.
|
|
60
|
-
|
|
61
|
-
### Maya - Mechanical Designer Trying Code-CAD
|
|
62
|
-
|
|
63
|
-
**Background:** Comfortable with CAD concepts, not necessarily with code-first modeling. May use Onshape, Fusion, or SolidWorks.
|
|
64
|
-
|
|
65
|
-
**What Maya Wants:**
|
|
66
|
-
|
|
67
|
-
- See a real parametric model immediately.
|
|
68
|
-
- Discover that sliders are parameters, not magic UI state.
|
|
69
|
-
- Find the coordinate system and modeling conventions when she needs them.
|
|
70
|
-
- Avoid feeling that she must read API docs before doing anything.
|
|
71
|
-
|
|
72
|
-
**Ideal Flow:**
|
|
73
|
-
|
|
74
|
-
```text
|
|
75
|
-
Sign up -> Start Here project opens -> Width slider is visible -> change it -> model updates -> open Welcome docs for "what next?"
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
**Current Friction:**
|
|
79
|
-
|
|
80
|
-
- The editor has powerful panels, but the first screen does not explain the working loop.
|
|
81
|
-
- The file list does not provide a progression.
|
|
82
|
-
- API docs are reference-first rather than first-session-first.
|
|
83
|
-
|
|
84
|
-
### Sam - Software Engineer Evaluating ForgeCAD
|
|
85
|
-
|
|
86
|
-
**Background:** Strong TypeScript/JavaScript developer, maybe less CAD knowledge. Wants to know if ForgeCAD fits automation and CI.
|
|
87
|
-
|
|
88
|
-
**What Sam Wants:**
|
|
89
|
-
|
|
90
|
-
- Confirm files are plain `.forge.js`.
|
|
91
|
-
- Learn the local workflow and sync model.
|
|
92
|
-
- Know how web projects relate to CLI projects.
|
|
93
|
-
- See commands that can be pasted into a terminal.
|
|
94
|
-
|
|
95
|
-
**Ideal Flow:**
|
|
96
|
-
|
|
97
|
-
```bash
|
|
98
|
-
forgecad project clone start-here
|
|
99
|
-
forgecad run 01-parametric-bracket.forge.js
|
|
100
|
-
forgecad render 3d 01-parametric-bracket.forge.js
|
|
101
|
-
forgecad project push
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
**Current Friction:**
|
|
105
|
-
|
|
106
|
-
- Hosted app and CLI feel like separate products.
|
|
107
|
-
- GitHub/Google accounts need API tokens for CLI login, but that reason is not in the first-run path.
|
|
108
|
-
- Project clone/push/pull is documented, but not introduced at the moment of motivation.
|
|
109
|
-
|
|
110
|
-
### Priya - Robotics / Assembly Explorer
|
|
111
|
-
|
|
112
|
-
**Background:** Interested in mechanisms, robotics, SDF/URDF, and multi-part assemblies. She needs a signal that ForgeCAD is more than boxes.
|
|
113
|
-
|
|
114
|
-
**What Priya Wants:**
|
|
115
|
-
|
|
116
|
-
- See multiple files or at least multiple model styles quickly.
|
|
117
|
-
- Discover assemblies, joints/connectors, and exports.
|
|
118
|
-
- Understand where the larger examples live without being dropped into all of them.
|
|
119
|
-
|
|
120
|
-
**Ideal Flow:**
|
|
121
|
-
|
|
122
|
-
```text
|
|
123
|
-
Open Start Here -> inspect assembly starter -> follow docs to Assembly -> later browse examples/mechanical
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
**Current Friction:**
|
|
127
|
-
|
|
128
|
-
- The first account project does not show the product's range.
|
|
129
|
-
- The examples corpus is broad, but not curated into a first-session sequence.
|
|
130
|
-
|
|
131
|
-
## Design Principles
|
|
132
|
-
|
|
133
|
-
1. **The first screen should contain intent.** A code box with no project story makes ForgeCAD feel like a compiler, not a tool.
|
|
134
|
-
2. **Curate before catalog.** First-run should show three chosen files, not every example.
|
|
135
|
-
3. **Teach the loop, not the whole product.** The first session is edit -> run -> inspect -> move local.
|
|
136
|
-
4. **The CLI is the serious workflow.** Hosted onboarding should point users toward local files, agents, validation, rendering, and project sync.
|
|
137
|
-
5. **Docs should be layered.** Welcome first, CLI second, API reference only when the user has a concrete modeling question.
|
|
138
|
-
6. **Do not point first-run users at package internals.** If examples are part of onboarding, they need a hosted docs/gallery surface, public repo link, or seeded project file the user can actually open.
|
|
139
|
-
|
|
140
|
-
## Target Experience
|
|
141
|
-
|
|
142
|
-
### Browser First Run
|
|
143
|
-
|
|
144
|
-
When a hosted user with zero projects opens `/app`, ForgeCAD creates:
|
|
145
|
-
|
|
146
|
-
```text
|
|
147
|
-
Start Here/
|
|
148
|
-
00-start-here.forge.js
|
|
149
|
-
01-parametric-bracket.forge.js
|
|
150
|
-
02-assembly-basics.forge.js
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
The first file is active. It should be short, runnable, and friendly inside the code itself. The user can change dimensions and immediately see the model update.
|
|
154
|
-
|
|
155
|
-
### Docs Welcome Page
|
|
156
|
-
|
|
157
|
-
`/docs/welcome` is the public first-session docs page. It should answer:
|
|
158
|
-
|
|
159
|
-
- What am I looking at?
|
|
160
|
-
- What should I try first?
|
|
161
|
-
- How do I move this project to the CLI?
|
|
162
|
-
- How do I use an AI coding agent with ForgeCAD?
|
|
163
|
-
- Where do I go after the first 10 minutes?
|
|
164
|
-
|
|
165
|
-
### CLI Bridge
|
|
166
|
-
|
|
167
|
-
The Welcome page and starter file both point to this path:
|
|
168
|
-
|
|
169
|
-
```bash
|
|
170
|
-
npm install -g forgecad
|
|
171
|
-
forgecad login
|
|
172
|
-
forgecad project clone start-here
|
|
173
|
-
cd start-here
|
|
174
|
-
forgecad studio .
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
For GitHub/Google accounts, choose API token during `forgecad login`. API tokens are available from Settings > API Tokens.
|
|
178
|
-
|
|
179
|
-
## Friction to Experiment Map
|
|
180
|
-
|
|
181
|
-
| Friction | Profiles affected | Experiment | Priority |
|
|
182
|
-
|---|---|---|---|
|
|
183
|
-
| New account opens an empty project | Alex, Maya, Sam, Priya | Create `Start Here` starter project when an account has zero projects | P0 |
|
|
184
|
-
| Docs are reference-first | Alex, Maya, Sam | Add `/docs/welcome` before API sections | P0 |
|
|
185
|
-
| CLI is not introduced at the moment of need | Alex, Sam | Put clone/studio/run commands in starter file and Welcome page | P0 |
|
|
186
|
-
| Full examples are too broad for first contact | Maya, Priya | Curate three starter files instead of opening examples project | P0 |
|
|
187
|
-
| AI-agent workflow is disconnected | Alex, Sam | Welcome page points to `forgecad skill install` and CLI validation loop | P1 |
|
|
188
|
-
| No first-run instrumentation | All | Add analytics/audit event for starter project creation and first CLI token creation | P1 |
|
|
189
|
-
|
|
190
|
-
## Implementation Map
|
|
191
|
-
|
|
192
|
-
### Source-of-Truth Surfaces
|
|
193
|
-
|
|
194
|
-
| Surface | Role | Owner |
|
|
195
|
-
|---|---|---|
|
|
196
|
-
| `docs/permanent/product/onboarding-first-experience.md` | Product source of truth | Product/engineering |
|
|
197
|
-
| `docs/permanent/welcome.md` | User-facing Welcome docs page | Product/engineering |
|
|
198
|
-
| `server/onboarding/starterProject.ts` | Starter project file template | Engineering |
|
|
199
|
-
| `src/pages/DocsPage.tsx` | Docs navigation and route registration | Engineering |
|
|
200
|
-
| `src/App.tsx` and `src/fs/HostedStudioProvider.ts` | Zero-project redirect/create behavior | Engineering |
|
|
201
|
-
|
|
202
|
-
### First Implementation
|
|
203
|
-
|
|
204
|
-
1. Add a `starter` project template option to `POST /api/projects`.
|
|
205
|
-
2. Keep normal "New Project" behavior blank by default.
|
|
206
|
-
3. Use `template: "starter"` only when the hosted app detects a user with zero projects.
|
|
207
|
-
4. Add starter files server-side so the first project works even if the browser reloads immediately.
|
|
208
|
-
5. Add `/docs/welcome` to the docs nav and search index.
|
|
209
|
-
|
|
210
|
-
### Local Preview Note
|
|
211
|
-
|
|
212
|
-
`npm run dev:studio` starts the hosted frontend only. It can show `/docs/welcome`, but it cannot create the hosted `Start Here` project unless the Fastify backend and Postgres are also running. To test starter project creation locally, run the hosted backend stack and open `/app` with a fresh account or empty project list.
|
|
213
|
-
|
|
214
|
-
### Later Improvements
|
|
215
|
-
|
|
216
|
-
- Add a first-run modal only if the starter project and docs page are not enough.
|
|
217
|
-
- Add a hosted examples gallery later, separate from first-run. Until then, link to public repo examples instead of npm package paths.
|
|
218
|
-
- Add "Clone locally" and "Create API token" affordances in the editor toolbar once the base path is proven.
|
|
219
|
-
- Add first-run metrics: starter project created, first file opened, first save, first CLI token created, first project clone.
|
|
220
|
-
|
|
221
|
-
## Non-Goals
|
|
222
|
-
|
|
223
|
-
- Do not design a full tutorials system yet.
|
|
224
|
-
- Do not open the entire examples project for new hosted accounts.
|
|
225
|
-
- Do not add gamified checklists or badges.
|
|
226
|
-
- Do not require the CLI before the browser gives immediate value.
|
|
227
|
-
- Do not restore implicit local studio examples; `forgecad studio ./examples` should be explicit and `forgecad studio` without a project path should fail.
|
|
228
|
-
|
|
229
|
-
## Risks and Mitigations
|
|
230
|
-
|
|
231
|
-
| Risk | Mitigation |
|
|
232
|
-
|---|---|
|
|
233
|
-
| Starter files become stale as APIs evolve | Treat starter files like examples and run them through smoke checks. |
|
|
234
|
-
| Users think the browser is the whole product | Put CLI path in the starter file and Welcome page. |
|
|
235
|
-
| Users who want blank projects dislike seeded files | Only seed the first zero-project account path. Manual New Project stays blank. |
|
|
236
|
-
| Docs page becomes too broad | Keep Welcome short and route API details to existing docs sections. |
|
|
237
|
-
| Starter project creation fails | Fall back to the existing project path, but log/audit failures once observability is added. |
|
|
238
|
-
|
|
239
|
-
## Validation
|
|
240
|
-
|
|
241
|
-
The first implementation is good enough when:
|
|
242
|
-
|
|
243
|
-
- A new hosted account with zero projects opens `/app` and lands in `Start Here`.
|
|
244
|
-
- The project contains exactly the curated starter files.
|
|
245
|
-
- The active file is `00-start-here.forge.js`.
|
|
246
|
-
- `/docs/welcome` appears before API Reference in the docs sidebar and index.
|
|
247
|
-
- The Welcome page includes the CLI login/token/project clone path.
|
|
248
|
-
- The Welcome page does not tell users to browse npm package internals for examples.
|
|
249
|
-
- Existing manual project creation still creates blank projects.
|
|
250
|
-
|
|
251
|
-
## Experiment Log
|
|
252
|
-
|
|
253
|
-
| Date | Change | Result |
|
|
254
|
-
|---|---|---|
|
|
255
|
-
| 2026-04-29 | Created this source-of-truth document and planned the P0 first-run path. | Done |
|
|
256
|
-
| 2026-04-29 | Added `/docs/welcome` and wired zero-project hosted accounts to a server-side `Start Here` starter template. | Done |
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Product Loop
|
|
2
|
-
|
|
3
|
-
ForgeCAD's core product loop is:
|
|
4
|
-
|
|
5
|
-
```text
|
|
6
|
-
user goal -> AI edits .forge.js -> run -> render or inspect -> fix -> sweep params -> export or publish
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
This loop is the product. The editor, CLI, docs, hosted projects, skills, examples, exports, and inspection bundles should all make this loop faster and more trustworthy.
|
|
10
|
-
|
|
11
|
-
The loop matters because AI will be wrong. The product promise is not that an agent invents perfect CAD on the first try. The promise is that the agent works inside a system that catches syntax errors, missing imports, invalid geometry, bad parameter ranges, collisions, thin walls, broken assembly relationships, and export failures.
|
|
12
|
-
|
|
13
|
-
For a normal user, this turns CAD from expert hand work into guided iteration. They can describe the object, inspect a render, change a parameter, reject an awkward result, and ask for a fix. For a technical user, the loop is also automation-friendly: files are plain source, outputs are deterministic enough to compare, and checks can run from the terminal.
|
|
14
|
-
|
|
15
|
-
Every product investment should be measured against this loop. A feature that looks impressive but cannot be validated, edited, parameterized, exported, or explained by the agent is weaker than a boring feature that closes the loop for a real manufacturing job.
|
|
16
|
-
|
|
17
|
-
The strongest future product surface will combine natural language, editable code, visual evidence, manufacturing constraints, and project history. The user should feel that the AI is doing the hard modeling work, while ForgeCAD is keeping the work understandable and grounded.
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Strategic Decisions
|
|
2
|
-
|
|
3
|
-
ForgeCAD product decisions should start from the same question: does this make AI-authored physical design more reliable, useful, and commercially valuable?
|
|
4
|
-
|
|
5
|
-
A strong product bet usually has five properties. It serves a clear user segment. It gives the AI better domain vocabulary. It creates validation evidence. It connects to a real output route. It strengthens a business path such as Pro usage, embedded commerce, OEM partnership, or enterprise pilot work.
|
|
6
|
-
|
|
7
|
-
This means not every geometry feature deserves product priority. A kernel capability is not automatically a product feature. A product feature exists when it helps a user get a job done, helps an agent express intent, or helps the business own a valuable workflow.
|
|
8
|
-
|
|
9
|
-
For example, CNC primitives should be judged by the manufacturing workflow they unlock. If they only add shapes, they are weak. If they let an agent express pockets, contours, drilling, stock, tool access, material constraints, and validation around a real CNC route, they may be strategically important.
|
|
10
|
-
|
|
11
|
-
Similarly, better API docs are useful but are not always the product answer. If the same workaround appears repeatedly, the deeper issue may be missing product vocabulary. Documentation should make the product easier to use; it should not hide the absence of a first-class concept.
|
|
12
|
-
|
|
13
|
-
Use this filter for new ideas:
|
|
14
|
-
|
|
15
|
-
- Who is the first user who will care?
|
|
16
|
-
- What object or workflow becomes possible that was hard before?
|
|
17
|
-
- What does the AI no longer have to improvise?
|
|
18
|
-
- What can ForgeCAD validate or inspect?
|
|
19
|
-
- What output, partner, or revenue path does it strengthen?
|
|
20
|
-
- What would make this feature obviously successful after one month?
|
|
21
|
-
|
|
22
|
-
If those answers are weak, keep the idea as research. If they are strong, the product likely has a real direction to explore.
|