Skip to content

Commit 2f30d22

Browse files
committed
Publish modular ProtoLab 3D generator with GitHub Pages
1 parent 39da907 commit 2f30d22

723 files changed

Lines changed: 101439 additions & 2 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/pages.yml

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
name: Build and deploy GitHub Pages
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
workflow_dispatch:
9+
10+
permissions:
11+
contents: read
12+
13+
concurrency:
14+
group: pages-${{ github.ref }}
15+
cancel-in-progress: true
16+
17+
jobs:
18+
build:
19+
runs-on: ubuntu-latest
20+
steps:
21+
- name: Check out source
22+
uses: actions/checkout@v6
23+
- name: Set up Node.js
24+
uses: actions/setup-node@v4
25+
with:
26+
node-version: 22
27+
cache: npm
28+
- name: Install dependencies
29+
run: npm ci
30+
- name: Verify geometry and generators
31+
run: npm test
32+
- name: Build static app
33+
run: npm run build
34+
- name: Configure Pages
35+
if: github.event_name != 'pull_request'
36+
uses: actions/configure-pages@v5
37+
- name: Upload website
38+
if: github.event_name != 'pull_request'
39+
uses: actions/upload-pages-artifact@v4
40+
with:
41+
path: dist
42+
43+
deploy:
44+
if: github.event_name != 'pull_request'
45+
needs: build
46+
runs-on: ubuntu-latest
47+
permissions:
48+
pages: write
49+
id-token: write
50+
environment:
51+
name: github-pages
52+
url: ${{ steps.deployment.outputs.page_url }}
53+
steps:
54+
- name: Deploy to GitHub Pages
55+
id: deployment
56+
uses: actions/deploy-pages@v4

.gitignore

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
node_modules/
2+
dist/
3+
*.tsbuildinfo
4+
.DS_Store
5+
screenshots/
6+
test-results/
7+
8+
__pycache__/
9+
*.pyc
10+
.part-module-backups/
11+
.catalog-snapshot-backup-*/
12+
.part-module-staging-*/
13+
14+
data/*
15+
!data/*validation.json
16+
!data/promtehimport-import-report.json
17+
!data/promtehimport-inventory.json

.prettierrc.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"singleQuote": true,
3+
"printWidth": 100,
4+
"trailingComma": "all"
5+
}

CATALOG_COVERAGE.md

Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
# Catalog import coverage
2+
3+
Generated: 2026-09-13. All counts below distinguish discovered products from usable geometry presets; source inventories retain their snapshot timestamps.
4+
5+
The library contains **74 part modules**, **12497 sourced presets** and **94 prototype examples**.
6+
7+
## Supplied drawings and motion components
8+
9+
The eight supplied images are retained in `public/references/` and linked from the matching presets. Added modules cover ball screw assemblies, standalone ball nuts, a jaw coupling and bevel gear pairs. Ball screw manufacturer tables supplement the images; each preset identifies its own source and verified dimensions.
10+
11+
- All 27 SFU dimension-table rows and all nine requested ball nut families are represented.
12+
- Miniature SFK shaft lengths cover 100–550 mm in 50 mm steps. Repeated lengths and assembly/nut exports are distinct configurations, not additional source products.
13+
- The D25 L30 coupling includes all 38 unique listed bore pairs.
14+
- Four m0.5 pinions cover 11/13/15/17 teeth with a 2.98 mm bore. Six bevel pairs cover all 12 dimension-table rows.
15+
- SFK602 and SFE3210 remain unverified prototype examples because the listing codes have no matching dimensioned drawing. DFI1605-4 is excluded from the LIMON import because its published L=10 conflicts with its double-nut construction.
16+
17+
See [ball screw source coverage](docs/ball-screw-catalog.md) and [gear reference mapping](docs/reference-gears.md) for source-specific dimensions and model limitations.
18+
19+
## Gvyntok
20+
21+
Every public category page in the five supplied sections was read. Coatings and materials with identical dimensions are grouped; every admitted supplier SKU remains searchable.
22+
23+
| Section | Source categories | Pages | Visible products read | SKUs represented by models |
24+
| --- | ---: | ---: | ---: | ---: |
25+
| Bolts and screws | 55 | 148 | 5901 | 5871 |
26+
| Nuts and inserts | 82 | 83 | 958 | 638 |
27+
| Washers and rings | 35 | 37 | 606 | 479 |
28+
| Threaded rods | 10 | 10 | 186 | 186 |
29+
| Pins, cotters and clamps | 7 | 10 | 272 | 236 |
30+
31+
Navigation badges have stale totals in a few categories. The importer checks against the actual visible result count and records discrepancies separately.
32+
33+
Dimensions are taken from linked supplier drawings and product rows. Where a listing supplies only a nominal size, an explicitly identified standard reference can supply additional dimensions; each preset describes that distinction and links to the reference. Nominal screw sizes and washer clearance bores remain separate. Unspecified chamfers, slit angles, collars and internal profiles are prototype settings.
34+
35+
### Products still without a supported model or verified size
36+
37+
| Standard / group | Unrepresented SKU rows |
38+
| --- | ---: |
39+
| Other supplier families | 184 |
40+
| DIN 8140 | 111 |
41+
| DIN 471 | 24 |
42+
| DIN 935 | 22 |
43+
| DIN 11024 | 20 |
44+
| DIN 6926 | 19 |
45+
| DIN 93 | 14 |
46+
| DIN 6927 | 13 |
47+
| DIN 1624 | 13 |
48+
| DIN 937 | 11 |
49+
| DIN 472 | 10 |
50+
| DIN 929 | 8 |
51+
| DIN 432 | 8 |
52+
| DIN 434 | 7 |
53+
| DIN 982 | 6 |
54+
| DIN 928 | 6 |
55+
| DIN 6330 | 5 |
56+
| DIN 582 | 5 |
57+
| DIN 11023 | 5 |
58+
| DIN 440 | 4 |
59+
| DIN 435 | 4 |
60+
| DIN 315 | 3 |
61+
| DIN 1587 | 3 |
62+
| DIN 6923 | 2 |
63+
| DIN 985 | 2 |
64+
| DIN 6334 | 1 |
65+
| DIN 9021 | 1 |
66+
| DIN 436 | 1 |
67+
| DIN 6799 | 1 |
68+
69+
## Promtehimport
70+
71+
All 19 supplied sections were enumerated: **510 category pages** and **11977 distinct product URLs**. **11977 product records** were processed. Import state: **source-fetch-complete**.
72+
73+
| Import status | Product rows |
74+
| --- | ---: |
75+
| imported | 7928 |
76+
| unsupported-subtype | 3545 |
77+
| missing-dimensions | 279 |
78+
| source-conflict | 214 |
79+
| model-rejected | 11 |
80+
81+
### Coverage by supplier section
82+
83+
| Section | Enumerated products | Imported presets | Pending pages |
84+
| --- | ---: | ---: | ---: |
85+
| [Single-row radial ball](https://promtehimport.com.ua/radialni-odnoryadni-pidshipniki-c34/) | 3651 | 2942 | 0 |
86+
| [Self-aligning ball](https://promtehimport.com.ua/samovstanovlyuvalni-dvoryadni-kulkovi-pidshipniki-c35/) | 158 | 148 | 0 |
87+
| [Angular contact ball](https://promtehimport.com.ua/radialno-uporni-kulkovi-pidshipniki-c36/) | 1176 | 380 | 0 |
88+
| [Mounted bearing units](https://promtehimport.com.ua/korpusni-pidshipnikovi-vuzli-c37/) | 499 | 196 | 0 |
89+
| [Thrust ball](https://promtehimport.com.ua/uporni-kulkovi-pidshipniki-c38/) | 405 | 337 | 0 |
90+
| [Tapered roller](https://promtehimport.com.ua/rolikovi-konichni-pidshipniki-c39/) | 2099 | 1480 | 0 |
91+
| [Insert bearings](https://promtehimport.com.ua/pidshipniki-scho-zakriplyuyutsya-dlya-korpusiv-c40/) | 559 | 128 | 0 |
92+
| [Spherical roller](https://promtehimport.com.ua/rolikovi-sferichni-pidshipniki-c42/) | 722 | 657 | 0 |
93+
| [Cylindrical roller](https://promtehimport.com.ua/rolikovi-cilindrichni-pidshipniki-c43/) | 843 | 549 | 0 |
94+
| [Needle roller](https://promtehimport.com.ua/golchasti-pidshipniki-c44/) | 626 | 211 | 0 |
95+
| [One-way clutches](https://promtehimport.com.ua/obginni-mufti-c45/) | 56 | 43 | 0 |
96+
| [Thrust roller](https://promtehimport.com.ua/uporni-rolikovi-pidshipniki-c46/) | 75 | 52 | 0 |
97+
| [Linear bushings](https://promtehimport.com.ua/liniyini-pidshipniki-c47/) | 85 | 72 | 0 |
98+
| [Combined bearings](https://promtehimport.com.ua/kombinovani-pidshipniki-c48/) | 12 | 8 | 0 |
99+
| [Rod ends](https://promtehimport.com.ua/sharnirni-golovki-nakonechniki-shtokiv-c49/) | 99 | 26 | 0 |
100+
| [Plain bearings](https://promtehimport.com.ua/pidshipniki-kovzannya-c50/) | 157 | 117 | 0 |
101+
| [Double-row radial ball](https://promtehimport.com.ua/radialni-dvoryadni-kulkovi-pidshipniki-c51/) | 562 | 458 | 0 |
102+
| [Adapter sleeves](https://promtehimport.com.ua/zakriplyuvalni-vtulki-c52/) | 93 | 56 | 0 |
103+
| [Oil seals](https://promtehimport.com.ua/salniki-c54/) | 100 | 68 | 0 |
104+
105+
### Most common remaining exclusions
106+
107+
| Reason | Product rows |
108+
| --- | ---: |
109+
| No exact geometry family for the source designation | 1020 |
110+
| Automotive hub or cartridge construction requires a dedicated bearing model | 590 |
111+
| Tapered-bearing designation lacks sufficient evidence to establish the exact ring construction | 472 |
112+
| Needle-bearing subtype does not match the available drawn-cup construction | 333 |
113+
| Insert bearing locking collar, bore or outer profile needs a distinct model | 315 |
114+
| Housing style differs from the supported pillow, oval two-bolt or square four-bolt units | 195 |
115+
| Outer snap-ring groove or retaining-ring assembly requires a dedicated bearing variant | 194 |
116+
| Cylindrical roller rib or row construction is not represented by NU/N/NJ/NUP | 165 |
117+
| Insert bearing has an eccentric or specialized locking construction | 97 |
118+
| Missing width: T | 82 |
119+
| Bearing with an adapter sleeve requires a separate assembly model | 79 |
120+
| Missing housingDepth: A | 62 |
121+
122+
Discovered URLs without retrieved dimensions are not labeled as imported presets. Unresolved dimension conflicts and unsupported shapes are excluded. A small set of shop-summary conflicts is reconciled against explicitly linked NSK reference dimensions and labeled accordingly. The importer resumes from its saved cache.
123+
124+
## Presets by module
125+
126+
| Part | Sourced presets | Prototype examples |
127+
| --- | ---: | ---: |
128+
| Deep groove ball bearing | 2939 | 3 |
129+
| Self-aligning ball bearing | 456 | 0 |
130+
| Angular contact ball bearing | 240 | 0 |
131+
| Double-row ball bearing | 31 | 0 |
132+
| Double-row angular contact bearing | 259 | 0 |
133+
| Cylindrical roller bearing | 606 | 2 |
134+
| Spherical roller bearing | 600 | 0 |
135+
| Tapered roller bearing | 1480 | 0 |
136+
| Drawn cup needle bearing | 201 | 0 |
137+
| Rod end bearing | 26 | 2 |
138+
| Linear ball bushing | 41 | 0 |
139+
| Square-flange linear bushing | 18 | 1 |
140+
| Round-flange linear bushing | 13 | 1 |
141+
| Thrust ball bearing | 337 | 0 |
142+
| Two-bolt flange bearing | 19 | 1 |
143+
| Four-bolt flange bearing | 71 | 1 |
144+
| Pillow block bearing | 107 | 2 |
145+
| Insert bearing | 128 | 0 |
146+
| Drawn-cup one-way clutch | 11 | 0 |
147+
| Ball-bearing sprag clutch | 32 | 0 |
148+
| Cylindrical thrust roller bearing | 15 | 0 |
149+
| Spherical thrust roller bearing | 39 | 2 |
150+
| Combined needle / ball bearing | 2 | 0 |
151+
| Combined needle / axial roller bearing | 6 | 0 |
152+
| Spherical plain bearing | 117 | 0 |
153+
| Adapter sleeve with locknut | 56 | 0 |
154+
| Radial shaft oil seal | 68 | 0 |
155+
| Wing screw | 117 | 0 |
156+
| Swing eye bolt | 187 | 0 |
157+
| Lifting eye bolt | 18 | 0 |
158+
| Bolt & screw | 2560 | 8 |
159+
| Set screw / grub screw | 459 | 4 |
160+
| Thin hex nut | 25 | 0 |
161+
| Wing nut | 9 | 0 |
162+
| Lifting eye nut | 10 | 0 |
163+
| Coupling nut | 14 | 0 |
164+
| High hex nut | 14 | 0 |
165+
| Square nut | 14 | 0 |
166+
| Flange nut | 9 | 0 |
167+
| Nylon insert lock nut | 32 | 0 |
168+
| Domed cap nut | 14 | 0 |
169+
| All-metal lock nut | 17 | 0 |
170+
| Square washer | 8 | 0 |
171+
| Conical spring washer | 7 | 0 |
172+
| External tooth lock washer | 15 | 0 |
173+
| Threaded rod / stud | 78 | 0 |
174+
| Hex nut | 34 | 0 |
175+
| Flat washer | 131 | 0 |
176+
| Retaining ring / circlip | 127 | 3 |
177+
| E-ring / three-lug retaining washer | 16 | 0 |
178+
| Split spring lock washer | 24 | 0 |
179+
| Slotted spring pin | 95 | 0 |
180+
| Split cotter pin | 141 | 0 |
181+
| Compression spring | 0 | 4 |
182+
| Extension spring | 0 | 4 |
183+
| Torsion spring | 0 | 3 |
184+
| Double torsion spring | 0 | 2 |
185+
| Flat spiral spring | 0 | 3 |
186+
| Worm drive | 0 | 3 |
187+
| Spur gear | 4 | 3 |
188+
| Helical & herringbone gear | 0 | 3 |
189+
| Bevel gear · layout model | 0 | 3 |
190+
| Bevel gear pair · mounting layout | 6 | 0 |
191+
| Straight gear rack | 0 | 3 |
192+
| Profile linear guide | 8 | 0 |
193+
| Round shaft guide | 0 | 2 |
194+
| Ball screw assembly | 219 | 11 |
195+
| Ball screw nut | 129 | 2 |
196+
| Ball screw linear axis | 0 | 6 |
197+
| Flexible jaw coupling | 38 | 0 |
198+
| Open enclosure | 0 | 3 |
199+
| L bracket | 0 | 3 |
200+
| Round spacer | 0 | 3 |
201+
| Utility wheel | 0 | 3 |
202+
203+
## Audit files
204+
205+
- [Supplier inventory](data/promtehimport-inventory.json)
206+
- [Bearing mapping report](data/promtehimport-import-report.json)
207+
- [Hardware mapping report](src/catalog/data/gvyntok-hardware-mapping-coverage.json)
208+
- [Gvyntok source snapshots](src/catalog/data/)
209+
210+
Regenerate this report with `node --import tsx scripts/report-catalog.ts` after refreshing supplier data.

0 commit comments

Comments
 (0)