Permission-Based RBAC
Replaced hardcoded role checks with a proper permission-based RBAC system. Roles now map to granular permissions on folders, collections, and products instead of checking role === "admin" everywhere.
Replaced hardcoded role checks with a proper permission-based RBAC system. Roles now map to granular permissions on folders, collections, and products instead of checking role === "admin" everywhere.
Auto-generated landing pages for tools, industries, use cases, alternatives, and "best of" comparisons. Database-backed with ISR, JSON-LD schemas, breadcrumbs, and internal linking.
/alternative/* pages for competitor comparisons/best/* pages for category roundups/industry/* and /use-case/* taxonomy pagesCreate 360-degree product spins from a set of images, and add clickable hotspots to any asset. Uploads now run concurrently with IndexedDB-backed session tracking so nothing gets lost if the browser closes.
A runtime audit with Playwright found pages firing up to 15 redundant API calls. We deduplicated invitations fetching, deferred hook loading until dialogs open, and replaced full list fetches with lightweight count queries in the sidebar.
Organizations can now configure SSO login with any OIDC-compatible identity provider. Set it up in Settings > SSO with your provider's discovery URL, client ID, and secret.
Vendors can now upload thousands of files at once with intelligent chunking, scoped product assignments, and asset slot templates.
The Shopify embedded app got a big upgrade.
Deleted folders and collections now soft-delete into a trash bin with automatic cleanup after 30 days. You can restore anything before the cleanup runs.
Search now uses pg_trgm for typo tolerance, so "backgruond" still finds "background".
Redesigned the getting started page with an onboarding progress tracker. Walks new users through connecting accounts, uploading first assets, and running their first AI tool.
Sessions are now cached in Redis instead of hitting the database on every request, and missing indexes were added to frequently queried columns.
Merged the separate Queue page into the Activity feed with status filters.