46 Commits
Author SHA1 Message Date
Tautvydas Derzinskas 0d505b716a feat: keep a model's pictures and supporting files beside its model files
Gallery and description images, plate thumbnails and renders now live in an
Images folder next to the model's files (Print.assetsPath), and supporting and
prepared files sit beside the plates, named through the storage template. They
move with the model when the storage structure changes, and the storage browser
lists them by kind.

Models from before keep working: reads fall back to the old shared folders, and
the first start runs the storage move to bring their files over, then clears
what's left in those folders.
2026-10-20 15:09:19 +02:00
Tautvydas Derzinskas 96300510b4 fix(i18n): require each locale's plural forms in i18n:check
Lithuanian lacked _few forms, so counts like 2 fell back to English.
Add them, fix _other wording for 10+, and update stale docs and comments.
2026-10-20 07:57:22 +02:00
Tautvydas Derzinskas 10451a9f11 feat(i18n): add a language by dropping in its locale file
Languages come from the locale files, named in themselves via Intl.DisplayNames, with missing keys falling back to English. The week start follows the locale, the Appearance picker switches to a Select past four languages, and docs/TRANSLATING.md plus an i18n:check script guide translators.
2026-10-20 07:25:46 +02:00
Tautvydas Derzinskas 233c794065 docs: add a setup page per provider and a comparison of all ten
Each provider gets its own page under docs/providers/ with a short description,
what it needs (sign-in, Thingport Grab, FlareSolverr) and its setup steps, with
the provider's icon as an accent. PROVIDER_SETUP.md becomes the overview, with a
dependency and feature table. MakerWorld, Printables and Thingiverse come first
everywhere.
2026-10-20 05:57:23 +02:00
Tautvydas Derzinskas 37094b56db refactor: add Cults3D error handling and enhance sync provider picker with logos 2026-10-20 05:34:53 +02:00
Tautvydas Derzinskas 930b9b48db feat: add Cults3D provider
Imports Cults3D models, anyone's likes and the user's own printlists, and
syncs them. Metadata comes from Cults3D's GraphQL API with each user's own
nickname and API key. The API never hands out files, and the site's pages are
behind a Cloudflare check only a browser passes, so Thingport Grab sends the
browser's _session_id and cf_clearance cookies with its User-Agent; with
them the server orders a free model for nothing, as its Download button
does, and follows the download page to the signed file link (CloudFront, or
Cults3D's Scaleway bucket for older models). Paid models download once
bought. A Cloudflare block defers a sync until the next visit with Grab.
2026-10-20 05:08:08 +02:00
Tautvydas Derzinskas 87db3f0ff0 feat: pick mapped provider categories by name
Each provider gets a Manage button that opens its categories as chips, by name, instead of a field of ids. The names come from a catalog checked in with the app, refreshed by backend/scripts/syncProviderCategories.ts. Stored values keep their shape.
2026-10-20 00:01:04 +02:00
Tautvydas Derzinskas 70e3821e1a refactor: remove bookmarklet from provider settings
The bookmarklet stays in Add > Import, its one place now.
2026-10-19 23:36:40 +02:00
Tautvydas Derzinskas 2591714c0c feat: add Thangs provider
Imports Thangs models, likes and collections, and syncs them. Metadata is
public; files need the user's own sign-in, which Thingport Grab sends and
Thingport renews from the refresh token. Paid models download once owned;
print-only ones are refused before any download. Free accounts' daily
download limit stops a batch and defers the rest of a sync to its next check.
2026-10-19 23:36:07 +02:00
Tautvydas Derzinskas f7dda0a211 feat: prioritize Thingport Grab in import guidance 2026-10-19 21:22:10 +02:00
Tautvydas Derzinskas 8f3fc3d6e6 feat: add bookmarklet import 2026-10-19 21:16:30 +02:00
Tautvydas Derzinskas 1cf2903b8e fix: correct category updates and improve NexPrint error handling 2026-10-19 18:39:24 +02:00
Tautvydas Derzinskas 4037151e4a feat: enable NextPrint provider 2026-10-19 18:18:26 +02:00
Tautvydas Derzinskas 42be6fb988 refactor: validate Creality Cloud account and improve session handling 2026-10-19 14:34:50 +02:00
Tautvydas Derzinskas 772b1acfef feat: enable Creality Cloud provider 2026-10-19 14:13:45 +02:00
Tautvydas Derzinskas 5bf3457e8c feat(providers): enable MakerOnline provider 2026-10-19 07:41:05 +02:00
Tautvydas Derzinskas ac5bf253c7 feat(providers): enable Snapmaker Space provider 2026-10-19 00:57:12 +02:00
Tautvydas Derzinskas be9d0f0cbe refactor: address pr comments 2026-10-18 21:45:22 +02:00
Tautvydas Derzinskas 24bb8d430a refactor: update extension popup and address pr comments 2026-10-18 21:21:42 +02:00
Tautvydas Derzinskas a7a91902a0 feat: add MyMiniFactory as a provider
Import, collection import and synced collections from MyMiniFactory, alongside MakerWorld,
Printables and Thingiverse.

- Backend: API v2 client with an instance-wide API key for metadata, collections and
  authors; files from MyMiniFactory's own download links (free models need no login).
  Paid models, and free ones whose files are archives, download as the user from their
  MyMiniFactory library through their session (PHPSESSID), fetching the model files
  MyMiniFactory unpacked from each archive. Paid models are left out of collection
  listings and syncs.
- One migration: MyMiniFactory category ids, username and session columns, plus a data
  migration giving existing users' starter categories the new category ids. Category
  matching now prefers the most specific site category.
- Frontend: provider everywhere the others appear (badges, Configuration and
  Administration providers, sync Browse tab, user menu, link detection, System Health,
  category ids), shared instance-key form for Thingiverse and MyMiniFactory, en and lt.
- Thingport Grab: new provider sites are allowed once from the popup (optional
  all-sites access, content script registered at runtime), so adding one never makes
  the browser disable the extension; captures the signed-in MyMiniFactory username and
  session; paid-model notice.
- Docs, website, store assets and screenshots updated.
2026-10-18 18:19:43 +02:00
Tautvydas Derzinskas 2a1972b4f0 docs: update docs and outdated comments 2026-10-17 22:25:42 +02:00
Tautvydas Derzinskas cc4107694a fix: rename Thingiverse Access Token to App Token to match what it provides 2026-10-17 20:27:58 +02:00
Tautvydas Derzinskas 358dfc1a03 feat: system notifications updates, Thingport grab in System health check, node 24+ (#52)
* feat: update system notifications

* feat: add Thingport grab to system health check

* ci: upgrade to Node.js 24 and centralize version management
2026-10-17 10:44:13 +02:00
Tautvydas Derzinskas f10bd133f2 docs: update docs and site (#50)
* docs: update docs and site

* docs: image theme adaptability
2026-10-17 05:59:03 +02:00
Tautvydas Derzinskas b619084be7 feat: browse private collections functionality 2026-10-12 12:54:26 +02:00
Tautvydas Derzinskas 1131700ec5 feat(collections): turn sync on from Thingport, picking the provider's collection
Every collection's Sync configuration now works before it's synced: a
Browse tab lists the user's own collections on MakerWorld (through
their cookie, private ones included), Printables and Thingiverse (by a
username asked once), and takes any collection's link. Each provider's
collections are drawn in its own colours and manner.

On Printables and Thingiverse the collection's current models are
imported by the sync's first check. MakerWorld rate-limits bulk
imports, so there only models added from now on come in. Settings can
be picked before turning sync on.
2026-10-12 05:31:01 +02:00
Tautvydas Derzinskas 9334438a52 feat(sync): notify on enable, change defaults to daily and designer profiles 2026-10-12 04:08:24 +02:00
Tautvydas Derzinskas 1408b09c59 feat(notifications): reinvent notifications 2026-10-11 23:20:21 +02:00
Tautvydas Derzinskas 5fa6c40324 feat(flaresolverr): make URL configurable in admin settings 2026-10-11 19:34:29 +02:00
Tautvydas Derzinskas e24e797999 docs: add synced collections guide and showcase 2026-10-09 07:42:42 +02:00
Tautvydas Derzinskas 9df01d0ed5 docs: update docs, screenshots & site 2026-10-08 19:20:54 +02:00
Tautvydas Derzinskas 62480d7828 docs: refresh app screenshots and add a script to capture them
regression/screenshots.mjs signs in to any instance (--url, --email,
THINGPORT_PASSWORD) and captures the README and website screenshots at
1400x790 and 2x scale. The account's theme and Categories/Folders choice
are switched for the shots and restored afterwards.
2026-10-04 21:09:52 +02:00
Tautvydas Derzinskas 47e10a2ec5 docs: add honorable contributors first entry 2026-10-04 20:56:48 +02:00
Tautvydas Derzinskas 179ce389b6 docs: explain existing library import pathways 2026-10-03 19:34:41 +01:00
Tautvydas Derzinskas 300fe3db0d test: add regression test + couple minor bug fixes 2026-10-03 19:10:50 +01:00
Tautvydas Derzinskas e22f57903f feat: add consume folder support 2026-10-02 13:22:56 +02:00
Tautvydas Derzinskas dae33246aa chore: deal with formatting by adding prettier + reformat 2026-09-28 22:50:39 +02:00
Tautvydas Derzinskas 80c79f624f refactor: major overhaul related to browser extension 2026-09-27 09:38:05 +02:00
Tautvydas Derzinskas bc0e062180 docs: some updates in docs/workflow for future contributors 2026-09-22 21:10:01 +02:00
Tautvydas Derzinskas 7d996829cd refactor: no more need for initial admin email env var 2026-09-14 05:35:27 +02:00
Tautvydas Derzinskas 09577e623d docs: add CasaOS install guide 2026-09-14 04:27:15 +02:00
Tautvydas Derzinskas 5589e157b5 docs: few minor changes to readme 2026-09-13 14:48:13 +02:00
Tautvydas Derzinskas f7806d6153 refactor: rename folders to categories + ability to remove model from collection 2026-09-11 21:41:59 +02:00
Tautvydas Derzinskas 56de86d5b5 feat: rebrand from PrintStash to Thingport 2026-09-10 07:08:51 +02:00
Tautvydas Derzinskas 796298042b refactor: docker and file structure 2026-09-07 13:59:37 +02:00
Tautvydas Derzinskas a8fef7d491 feat: initial commit 2026-09-07 09:12:37 +02:00