mirror of
https://github.com/TautvydasDerzinskas/Thingport.git
synced 2026-10-23 15:12:39 -05:00
develop
22
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
0dfdae545f |
feat: dashboard remade (v3) + custom dashboard widget system (#131)
* feat(backend): store dashboard templates per user
Adds a dashboardTemplates JSON column and GET/PUT /settings/dashboard for the
user's templates: each holds its panels (one widget, or several as tabs) and
their grid layout per breakpoint, plus which built-in templates were offered.
Reading drops widgets since removed instead of failing the whole dashboard.
The old widget and layout settings stay, read once to build the first
templates.
* feat: customizable dashboard grid with tabbed panels and templates
The dashboard is now a responsive grid (12, 6 and 1 columns) of panels the
user arranges in edit mode: drag to move, resize from the corner, or use the
arrow keys. Panels merge into tabbed panels by dragging a panel's name onto
another or with the bulk Merge action, and split back out. Edit mode expands
like bulk select into Add panel, Merge and Remove, over a dotted grid.
Templates replace the fixed layouts: built-in Classic, Overview, Compact tabs,
Showcase, Puzzle and Minimal, each with its own panels and arrangement, and
user-made ones to switch between, rename, copy, reset or delete. A user's old
layout and widget choices carry over into their first template, and built-ins
added later are offered once.
* feat(backend): dashboard panel settings, °F weather and recently added list
Stores each widget's options on its dashboard template. The weather endpoint
takes a unit and converts from the cached Celsius reading, so Fahrenheit isn't
rounded twice. The web dashboard's summary holds up to 10 of each list, enough
for any list panel's item count, while the MCP tool keeps its short lists.
Adds /dashboard/recently-added for that panel's "See more", in the API
token's Dashboard scope.
* feat: dashboard panel settings and panels that fit their content
Panels get options from a cog shown in edit mode: 12/24-hour clock with or
without date and greeting, weather in °C or °F with or without the later
forecast, and for lists the items shown (3, 5, 7 or 10; 5 by default) and
whether "See more" shows. Top providers and recently added gain "See more",
and every list shows it only when there is more to see.
Changing a panel's options resizes it to fit, as does Fit to content in its
menu. A list too long for its panel scrolls between its title and "See more",
which stay in sight. Built-in lists are sized to fit five items, and the
Showcase template is no longer built in.
* feat(backend): RSS, uptime and server stats for new dashboard panels
/dashboard/feeds reads the RSS, RSS 1.0 and Atom feeds a panel lists, merged
newest first, with any it couldn't read named. /dashboard/monitors checks
whether addresses answer and how quickly. /dashboard/system gives admins the
server's CPU, load, memory and uptime. Feeds and checks may reach the local
network, but only over http(s), with a timeout and a size cap, and both are
cached briefly. Panel settings can now hold lists, like a launcher's links.
* feat: RSS, CPU, uptime and launcher dashboard panels
RSS merges the feeds it's given; uptime shows whether each address answers,
and for admins how long the server has been up; CPU, for admins only, shows
load with a short history and memory. The launcher shows bookmarks as app
icons, coloured, mono or grayed, with optional search and a limit with Show
all, starting with Thingport's site and repository. Panels added later go into
the first gap they fit and size themselves to their content.
* feat(backend): dashboard templates can hold copies of a widget
A panel's widgets are now instances: a widget's own id for its first copy,
and the id with a suffix ("rss:k3j2h9") for any further one, so templates
saved before stay valid. Options are kept per instance and may hold a record,
such as a weather panel's own place. Saving refuses unknown widgets and
malformed instances; reading still drops widgets since removed.
* feat: add RSS, launcher and weather panels more than once
Each copy has its own options: its own feeds, links, unit or place. Add
panel keeps offering these three, and their tiles in the Panels dialog count
the copies and add another. A copy's options go with it into and out of tabs
and are dropped when it's removed. A weather panel's place is now its own,
chosen on the panel; one without falls back to the account's place, so
existing dashboards look the same.
* fix: split tabbed panels from the edit toolbar, keeping their tabs together
Split into panels joins Merge and Remove in the edit toolbar, active when
every selected panel has tabs. Splitting now puts each tab under the one
before it, the size the panel was, where the panel stood, and moves what was
below down to make room; before, all but the first went to the bottom.
* fix: keep a tab's size when it leaves its panel, and drop launcher tooltips
A tab dragged out of a tabbed panel onto empty space now takes the size of
the panel it came from, as split tabs already did, rather than its widget's
usual size. Launcher tiles no longer show the address in a tooltip on hover.
* feat(backend): trending models from each provider for the dashboard
/dashboard/trending gives one provider's trending list at a time, in one
shape: title, link, image, likes, author and whether it's paid. Printables,
MakerWorld, Thangs and MakerOnline give their trending lists; Snapmaker
Space its featured one, NexPrint and Creality Cloud their recommended ones;
Thingiverse and MyMiniFactory their popular ones with the instance's token or
key, and Cults3D its most downloaded with the user's own key. A provider
without what it needs answers with what to set up. Lists are cached half an
hour, NSFW models are left out, and the path is in the Dashboard token scope.
* feat: Explore trending dashboard panel
Shows what's trending on the providers the user picks and drags into order,
their logos beside the title: the first loads with the panel, and clicking
another loads that one. Models show as a list or as even-sized cards and
open on the provider's site, as does More. A provider that needs a token or
key shows what's missing and where to add it. The panel can be added more
than once.
* feat: open the dashboard on its own as a homepage
A button beside the edit button opens /home in a new tab: the dashboard's
panels alone, without the side menu, top bar or editing, to set as a
browser's homepage. It's kept to the template it was opened from, so
switching templates in the app later doesn't change it.
* feat: search the homepage view with ⌘S
The homepage view gets the top bar's search as a spotlight: hidden until ⌘S
(Ctrl+S) or its corner button opens it, larger and in the middle of a dimmed
screen, focused and ready to type, and searching just as the top bar does.
Its import and Configuration commands take the user into the app, the latter
through a new ?configuration=<tab> link the top bar opens on arrival.
* feat: put the homepage button beside the template picker
* feat: custom and community dashboard widgets
A widget is metadata (JSON or YAML: name, icon, size, settings, hosts), an ES module and optional HTML, run in its
own dashboard panel with its size, settings, theme, a server-side fetch to the hosts it declares and Thingport's API.
Users write their own in an editor or with an AI over the new widget_guide, list_widgets and save_widget MCP tools,
and install shared ones from community-widgets/ in this repository, kept as installed until an update is approved.
A workflow validates community widgets in pull requests, and an admin can turn custom widgets off.
* refactor: address pr comments
* refactor: address pr comments pt2
* refactor: improve widget editor
* feat: reorder tabs in a tabbed dashboard panel
* feat: icon browser with built-in and uploaded icons for launcher links and custom widgets
* fix: show a launcher link's new icon without a refresh
* feat: self-hosted, media, 3D printing and popular site icons in the icon browser
* fix: keep the code editor's change handler current without writing a ref during render
* feat: dashboard admin page with separate own and community widget switches and widgets in use
* feat: homepage as the default dashboard template, with presets carrying widget settings
* feat: widget icons from the icon browser, preinstalled countdown sample, MCP icon tools
Drops the emoji icon, adds an hourglass icon, list_icons and upload_icon MCP tools, and folds the dashboard migrations into one.
* feat: save_widget and upload_icon on by default for new API tokens
* feat: weather scene as the first community widget, no preinstalled widgets, bare editor starter
Drops the world clock starter and the countdown sample install, and adds a built-in weather icon.
* chore: drop the countdown community widget
|
||
|
|
e2382f801d |
fix: read every valid Content-Disposition filename on link imports (#129)
* fix: read every valid Content-Disposition filename on link imports * fix: fall back to filename when filename* has a malformed percent escape |
||
|
|
a59d15b15a |
chore(backend): release 1.2.0
# [thingport-backend-v1.2.0](https://github.com/TautvydasDerzinskas/Thingport/compare/thingport-backend-v1.1.0...thingport-backend-v1.2.0) (2026-10-21) ### Bug Fixes * address card preview review comments ([ |
||
|
|
8567f195c0 |
feat(backend): MCP endpoint at /api/mcp, with tools chosen per API token
An AI assistant connects over Streamable HTTP (stateless) with the user's API token and gets read-only tools: search_models, list_models, get_model, list_collections, get_collection, list_tags, list_categories, get_author and library_stats. Each runs as the token's user through the same services as the REST API. Every MCP message is a POST, which requireAuth refuses to an API token, so /api/mcp checks the token itself and is mounted before the routers that apply requireAuth to every path. The token stays read-only over REST; over MCP it only reaches the tools its user ticked, stored per token in User.apiTokenMcpTools. Existing tokens get the read-only tools; a tool that writes would be off for every token until its user turns it on. get_model reads through printOutById rather than GET /print/:id, so an assistant looking a model up doesn't count as a view or land in Browsing History. |
||
|
|
999179a7f9 |
chore(backend): release 1.1.0
# [thingport-backend-v1.1.0](https://github.com/TautvydasDerzinskas/Thingport/compare/thingport-backend-v1.0.2...thingport-backend-v1.1.0) (2026-10-20) ### Bug Fixes * add validation and improve error handling in sync operations ([ |
||
|
|
8b29a50e18 |
chore(backend): release 1.0.2
# [thingport-backend-v1.0.2](https://github.com/TautvydasDerzinskas/Thingport/compare/thingport-backend-v1.0.1...thingport-backend-v1.0.2) (2026-10-18) ### Bug Fixes * download from Thingiverse with a Chrome TLS fingerprint ([ |
||
|
|
8e6e5b2e0e |
fix: download from Thingiverse with a Chrome TLS fingerprint
Thingiverse's Cloudflare now challenges every request whose TLS handshake isn't a browser's, whatever the headers or cookies, so file downloads, preview images and API calls all failed. Route all thingiverse.com requests through impit, which impersonates Chrome. |
||
|
|
8a39a87b6c |
chore(backend): release 1.0.1
# [thingport-backend-v1.0.1](https://github.com/TautvydasDerzinskas/Thingport/compare/thingport-backend-v1.0.0...thingport-backend-v1.0.1) (2026-10-17) ### Bug Fixes * rename Thingiverse Access Token to App Token to match what it provides ([ |
||
|
|
495e04d535 |
chore(backend): release 1.0.0
# thingport-backend-v1.0.0 (2026-10-17) ### Bug Fixes * 3mf model preview default to proper solid ([ |
||
|
|
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 |
||
|
|
9a2238691d |
feat: administration settings remake + OIDC support (#49)
* feat: expand storage usage reporting with disk breakdown * feat: add providers admin view * feat(storage): add background reorganization and admin browser Adds background-driven storage reorganization for moving model files when the storage template changes, with an admin interface to preview changes, check impact, monitor progress, and browse the storage tree built from plate records rather than filesystem walks. * feat: new auth admin settings page + OIDC support * test: fix failing test |
||
|
|
97f0eea4c2 | feat: support Markdown with embedded images in model descriptions | ||
|
|
0d8cd62fa7 | feat: add sanitized bambu 3mf open option | ||
|
|
e111dc27d7 | chore: update licence and perform comment clean up | ||
|
|
7464583780 | feat: anable complex model simplification | ||
|
|
6a6a87e38d | feat: add ability to enable catpcha | ||
|
|
56de86d5b5 | feat: rebrand from PrintStash to Thingport | ||
|
|
8cb97bd315 | fix: big collection import printables | ||
|
|
2bce5a2049 | feat: admin panel remake | ||
|
|
51b56021c0 | refactor: deal with few things | ||
|
|
be45bacbea | feat: add proper auth | ||
|
|
a8fef7d491 | feat: initial commit |