Skip to content

Pages ​

All pages live in app/pages/. Nuxt 4 file-based routing maps the directory structure directly to URL routes.

Route Namespace Overview ​

NamespaceFile patternPurpose
AuthRoot-level .vue filesUnauthenticated entry points
DAM[workspace_id]/dam/Core asset management
Workspace settings[workspace_id]/workspace-settings/Per-workspace admin
External / partner[workspace_id]/external/Partner-facing upload and access flows
Shared assetsshared-assets/ and [brand_name]/shared-assets/Public asset collection views
Account / profileprofile.vue, [workspace_id]/feedback/Per-user profile and feedback
Dev / utilitystyleguide.vue, test-error.vueInternal tooling, not for production use

Auth Pages ​

All use login-layout. Middleware is guest-check unless noted. Exception: generate-password.vue has no active middleware (it is commented out in source).

RouteFileDescription
/index.vueLogin — email/password, Google, Microsoft, and passkey. Verifies the current domain via check-branding before rendering. Social sign-in options are suppressed on white-label custom domains.
/forgot-passwordforgot-password.vuePassword reset request — accepts an email address and sends a reset link.
/reset-passwordreset-password.vuePassword reset form — validates the token from the email link, then sets a new password.
/generate-passwordgenerate-password.vueInvitation acceptance — sets a name and password for a newly invited user. Resolves invitation details from a token query param. Shows an expiry message if the link is stale.
/password-setuppassword-setup.vueFirst-time password setup — used when an existing account requires an initial password. Token-based, redirects to login on success.
/social-loginsocial-login.vueOAuth and passkey callback handler — exchanges the access_token query param (OAuth) or a sessionStorage stash (passkey) for a session, then calls nextStep().

Account and Profile ​

RouteFileLayoutDescription
/profileprofile.vueprofile-layoutProfile settings and notification preferences, presented as two tabs. Middleware: auth-check.
/:workspace_id/feedback[workspace_id]/feedback/index.vueprofile-layoutFeedback submission form. Middleware: auth-check, check-workspace, can-access, check-workspace-access, check-if-suspended.

DAM Pages ​

All use collage-layout. Common middleware base: auth-check, check-workspace, can-access-dam-module, check-if-suspended. Some pages also include check-workspace-access (dashboard, upload, uploaded, trash, portals detail, sharing).

Setup ​

RouteFileLayoutDescription
/:workspace_id/dam/add-instance[workspace_id]/dam/add-instance.vuelogin-layoutDAM instance creation wizard — shown when the workspace has no DAM instance yet. Middleware: auth-check, check-workspace, check-dam-instance.
RouteFileDescription
/:workspace_id/dam/dashboard[workspace_id]/dam/dashboard/index.vueDAM home — quick action tiles (New Asset, New Folder, etc.) and recent collages and folders. Storage-full state disables the New Asset tile.
/:workspace_id/dam/search[workspace_id]/dam/search.vueFull-text asset and folder search powered by Typesense, with type-ahead and filter support.

Folders ​

RouteFileDescription
/:workspace_id/dam/folders[workspace_id]/dam/folders/index.vueAll folders flat list. Create button gated by canCreateFolders permission.
/:workspace_id/dam/folders/:_id[workspace_id]/dam/folders/[_id]/index.vueFolder contents — nested assets and sub-folders with breadcrumbs, bulk action bar, and infinite scroll. Uses embedsHeader: true.

Assets ​

RouteFileDescription
/:workspace_id/dam/files/:_id[workspace_id]/dam/files/[_id]/index.vueAsset detail — metadata editing, version history, comments, and sharing panel. Double-click the title to rename inline.
/:workspace_id/dam/upload[workspace_id]/dam/upload.vueAsset upload — wraps <AssetUpload mode="both" /> supporting both drag-drop and file browser.
/:workspace_id/dam/uploaded[workspace_id]/dam/uploaded.vueUncategorized assets — all assets not yet assigned to a folder, with bulk assign and bulk action support. Uses embedsHeader: true.
/:workspace_id/dam/trash[workspace_id]/dam/trash/index.vueSoft-deleted assets — restore individually or empty trash.

Collages ​

RouteFileDescription
/:workspace_id/dam/collage[workspace_id]/dam/collage/index.vueAll collages list with grid/list view toggle and create button.
/:workspace_id/dam/collage/:id[workspace_id]/dam/collage/[id]/index.vueCollage detail — asset grid with bulk actions and back navigation to the collages list. Uses embedsHeader: true.

Portals ​

RouteFileDescription
/:workspace_id/dam/portals[workspace_id]/dam/portals/index.vueAll portals list with create button. Uses embedsHeader: true.
/:workspace_id/dam/portals/:id[workspace_id]/dam/portals/[id].vuePortal detail — branded asset collection with asset grid, bulk actions, and back navigation.

Sharing ​

RouteFileDescription
/:workspace_id/dam/sharing[workspace_id]/dam/sharing/index.vueShares and embeds manager — toggle between Shares view and Embeds view. Supports bulk delete.

Workspace Settings Pages ​

All use general-settings-layout. Standard middleware: auth-check, check-workspace, plus page-specific access guards.

RouteFileDescription
/:workspace_id/workspace-settings[workspace_id]/workspace-settings/index.vueWorkspace general settings — name, branding, domain, and other workspace-level configuration. Middleware includes can-access-general-settings.
/:workspace_id/workspace-settings/custom-fields[workspace_id]/workspace-settings/custom-fields/index.vueCustom metadata field management — create, edit, and reorder fields. Middleware includes can-access-dam-module.
/:workspace_id/workspace-settings/user/list[workspace_id]/workspace-settings/user/list.vueWorkspace members — list, invite, and manage internal users and their roles.
/:workspace_id/workspace-settings/external-user/list[workspace_id]/workspace-settings/external-user/list.vueGuest Upload Manager — list and manage external / guest users who have portal or upload access. Labeled "Guest Upload Manager" in the UI sidebar.
/:workspace_id/workspace-settings/portals/users[workspace_id]/workspace-settings/portals/users/index.vuePortal users — all users granted access across portals. Middleware includes can-access-dam-settings.
/:workspace_id/workspace-settings/dam/:instance_id/announcements/list[workspace_id]/workspace-settings/dam/[instance_id]/announcements/list.vueDAM instance announcements — create and manage in-product announcements for the instance.
/:workspace_id/workspace-settings/dam/:instance_id/notifications[workspace_id]/workspace-settings/dam/[instance_id]/notifications/index.vueDAM instance notification settings — configure which events trigger notifications.

External / Partner Pages ​

All use layout: false (no layout wrapper). These are partner-facing, lightly branded pages reached without a standard internal session.

RouteFileMiddlewareDescription
/:workspace_id/external/request-access[workspace_id]/external/request-access.vueexternal-guest-redirectAccess request form — external users enter their email to request portal access. Renders workspace branding.
/:workspace_id/external/verify[workspace_id]/external/verify.vueexternal-otp-verifyOTP verification step for external users — validates the code sent after an access request.
/:workspace_id/external/upload[workspace_id]/external/upload.vuecheck-external-access, external-upload-authExternal upload form — partners submit files to a portal upload request.
/:workspace_id/external/request-submitted[workspace_id]/external/request-submitted.vuecheck-external-access, external-upload-authConfirmation screen shown after a partner successfully submits an access or upload request.

Shared Assets Pages ​

Public asset collection views, no layout wrapper (layout: false). No authentication required.

RouteFileDescription
/shared-assets/:typeshared-assets/[type].vueRenders <SharedAssetsPage /> — a public shared asset collection, type-parameterised.
/:brand_name/shared-assets/:type[brand_name]/shared-assets/[type].vueSame as above but namespaced under a brand slug for white-label deployments.

Dev / Utility Pages ​

Not intended for production use. No definePageMeta — no layout or middleware applied.

RouteFileDescription
/test-errortest-error.vueError trigger page — buttons to throw 404, 401, and 500 Nuxt errors for testing error.vue.

Page Conventions ​

  • definePageMeta appears in <script setup> on every production page to declare layout and middleware.
  • All protected pages run auth-check middleware first; that middleware saves the current URL in a cookie so the login page can redirect back after sign-in.
  • DAM pages that show an asset grid pass embedsHeader: true in definePageMeta to signal the layout to render the embeds-aware header variant.
  • Route params are accessed via useRoute(). Workspace ID is always route.params.workspace_id.