Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions docs/docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,16 @@ const config = {
onBrokenAnchors: 'warn',

i18n: {
// Dutch locale temporarily dropped — `i18n/nl/` carries only stale
// translation strings (no actual translated markdown), and recent
// docs additions broke Dutch SSR with "Cannot read properties of
// undefined (reading 'id')" on a handful of pages. Re-enable by
// adding `'nl'` back once the Dutch translation pass has been
// completed or the metadata audited for stale references.
defaultLocale: 'en',
locales: ['en', 'nl'],
locales: ['en'],
localeConfigs: {
en: { label: 'English' },
nl: { label: 'Nederlands' },
},
},

Expand Down
2 changes: 1 addition & 1 deletion docs/features/admin-settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ Admin settings provide Nextcloud administrators with global configuration option

## Screenshot

![Dashboard Overview](../screenshots/mydash-dashboard-overview.png)
![Dashboard Overview](/screenshots/mydash-dashboard-overview.png)
2 changes: 1 addition & 1 deletion docs/features/admin-templates.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,4 @@ Admin templates allow Nextcloud administrators to create pre-configured dashboar

## Screenshot

![Dashboard Overview](../screenshots/mydash-dashboard-overview.png)
![Dashboard Overview](/screenshots/mydash-dashboard-overview.png)
2 changes: 1 addition & 1 deletion docs/features/conditional-visibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,4 @@ Conditional visibility allows widget placements to be shown or hidden based on d

## Screenshot

![Dashboard Overview](../screenshots/mydash-dashboard-overview.png)
![Dashboard Overview](/screenshots/mydash-dashboard-overview.png)
2 changes: 1 addition & 1 deletion docs/features/dashboards.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ Dashboards are the core organizational unit in MyDash. Each user can create and

## Screenshot

![Dashboard Overview](../screenshots/mydash-dashboard-overview.png)
![Dashboard Overview](/screenshots/mydash-dashboard-overview.png)
2 changes: 1 addition & 1 deletion docs/features/grid-layout.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ The grid layout system powers the drag-and-drop dashboard experience in MyDash,

## Screenshot

![Grid Layout](../screenshots/mydash-dashboard-overview.png)
![Grid Layout](/screenshots/mydash-dashboard-overview.png)
2 changes: 1 addition & 1 deletion docs/features/permissions.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ Permission levels control what users can do with their dashboards, especially fo

## Screenshot

![Dashboard Overview](../screenshots/mydash-dashboard-overview.png)
![Dashboard Overview](/screenshots/mydash-dashboard-overview.png)
2 changes: 1 addition & 1 deletion docs/features/prometheus-metrics.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,4 @@ MyDash exposes application metrics in Prometheus text exposition format for moni

## Screenshot

![Dashboard Overview](../screenshots/mydash-dashboard-overview.png)
![Dashboard Overview](/screenshots/mydash-dashboard-overview.png)
2 changes: 1 addition & 1 deletion docs/features/tiles.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ Custom tiles are user-created shortcut cards that provide quick access to Nextcl

## Screenshot

![Dashboard with Tiles](../screenshots/mydash-dashboard-overview.png)
![Dashboard with Tiles](/screenshots/mydash-dashboard-overview.png)
2 changes: 1 addition & 1 deletion docs/features/widgets.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ Widgets are the primary content blocks on MyDash dashboards. MyDash integrates w

## Screenshot

![Dashboard with Widgets](../screenshots/mydash-dashboard-overview.png)
![Dashboard with Widgets](/screenshots/mydash-dashboard-overview.png)
40 changes: 40 additions & 0 deletions docs/i18n/nl/docusaurus-plugin-content-docs/current.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,45 @@
"version.label": {
"message": "Volgende",
"description": "The label for version current"
},
"sidebar.tutorialSidebar.category.Tutorials": {
"message": "Tutorials",
"description": "The label for category 'Tutorials' in sidebar 'tutorialSidebar'"
},
"sidebar.tutorialSidebar.category.Tutorials.link.generated-index.title": {
"message": "MyDash tutorials",
"description": "The generated-index page title for category 'Tutorials' in sidebar 'tutorialSidebar'"
},
"sidebar.tutorialSidebar.category.Tutorials.link.generated-index.description": {
"message": "Step-by-step walkthroughs for everyday MyDash tasks. The user track covers personal-dashboard workflows; the admin track covers org-wide configuration and policy.",
"description": "The generated-index page description for category 'Tutorials' in sidebar 'tutorialSidebar'"
},
"sidebar.tutorialSidebar.category.User guide": {
"message": "User guide",
"description": "The label for category 'User guide' in sidebar 'tutorialSidebar'"
},
"sidebar.tutorialSidebar.category.User guide.link.generated-index.title": {
"message": "User guide",
"description": "The generated-index page title for category 'User guide' in sidebar 'tutorialSidebar'"
},
"sidebar.tutorialSidebar.category.User guide.link.generated-index.description": {
"message": "Workflows for individual MyDash users — opening the app, customizing dashboards, switching between them, and pinning a default.",
"description": "The generated-index page description for category 'User guide' in sidebar 'tutorialSidebar'"
},
"sidebar.tutorialSidebar.category.Admin guide": {
"message": "Admin guide",
"description": "The label for category 'Admin guide' in sidebar 'tutorialSidebar'"
},
"sidebar.tutorialSidebar.category.Admin guide.link.generated-index.title": {
"message": "Admin guide",
"description": "The generated-index page title for category 'Admin guide' in sidebar 'tutorialSidebar'"
},
"sidebar.tutorialSidebar.category.Admin guide.link.generated-index.description": {
"message": "Org-wide MyDash administration — toggling personal dashboards, authoring admin templates, marking group defaults, and restricting widgets per role.",
"description": "The generated-index page description for category 'Admin guide' in sidebar 'tutorialSidebar'"
},
"sidebar.tutorialSidebar.category.MyDash — Features": {
"message": "MyDash — Features",
"description": "The label for category 'MyDash — Features' in sidebar 'tutorialSidebar'"
}
}
Binary file added docs/static/screenshots/admin-settings.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 3 additions & 3 deletions docs/tutorials/admin/01-toggle-personal-dashboards.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ Toggle the flag on or off and verify the user UI reflects the change.

Settings menu (avatar) → **Administration settings** → **MyDash** in the left nav.

![MyDash admin settings page](../../screenshots/tutorials/admin/01-admin-settings.png)
![MyDash admin settings page](/screenshots/tutorials/admin/01-admin-settings.png)

### 2. Find the **Personal dashboards** section

The section is near the top of the page. The toggle is labelled **Allow users to create personal dashboards**.

![Personal dashboards toggle](../../screenshots/tutorials/admin/01-toggle.png)
![Personal dashboards toggle](/screenshots/tutorials/admin/01-toggle.png)

### 3. Flip the toggle

Expand All @@ -41,7 +41,7 @@ Open MyDash as a non-admin user.
- **Toggle on** → **+ Add dashboard** is visible in the sidebar; the empty state shows the standard "Create your first dashboard" CTA.
- **Toggle off** → button hidden; empty state shows "Personal dashboards are not enabled by your administrator."

![User UI when disabled](../../screenshots/tutorials/admin/01-user-disabled.png)
![User UI when disabled](/screenshots/tutorials/admin/01-user-disabled.png)

## Behaviour notes

Expand Down
8 changes: 4 additions & 4 deletions docs/tutorials/admin/02-admin-templates.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Avatar → **Administration settings** → **MyDash**.

The section lists every existing template with name, assigned groups, and edit / delete actions.

![Admin templates list](../../screenshots/tutorials/admin/02-templates-list.png)
![Admin templates list](/screenshots/tutorials/admin/02-templates-list.png)

### 3. Click **Create template**

Expand All @@ -42,7 +42,7 @@ The template-create modal opens. Required fields:
- **Name** — internal label for admins. Not user-visible (the user sees a regular dashboard with whatever name you set there).
- **Group order priority** — comma-separated group ids in priority order. The resolver picks the first group in this list that the user belongs to.

![Create template modal](../../screenshots/tutorials/admin/02-template-create.png)
![Create template modal](/screenshots/tutorials/admin/02-template-create.png)

Optional fields:

Expand All @@ -53,13 +53,13 @@ Optional fields:

Saving creates the template row. Click **Edit layout** on the new template — MyDash opens a regular dashboard editor scoped to the template. Add widgets, position them, configure them — exactly like editing a personal dashboard.

![Edit template layout](../../screenshots/tutorials/admin/02-template-edit.png)
![Edit template layout](/screenshots/tutorials/admin/02-template-edit.png)

### 5. Verify with a test user

`occ user:add testuser` (or pick an existing member of the assigned group). Log in as that user and open MyDash. The first visit clones the template into a personal dashboard named **My Dashboard** (default) — visible in **MY DASHBOARDS** in the sidebar.

![Test user lands on cloned template](../../screenshots/tutorials/admin/02-test-user-view.png)
![Test user lands on cloned template](/screenshots/tutorials/admin/02-test-user-view.png)

## Behaviour notes

Expand Down
6 changes: 3 additions & 3 deletions docs/tutorials/admin/03-group-defaults.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,19 +24,19 @@ Mark an existing dashboard as the default for a Nextcloud group, and verify memb

Open MyDash as the admin and navigate to the group dashboard. Open its cog menu.

![Group dashboard cog menu](../../screenshots/tutorials/admin/03-group-cog.png)
![Group dashboard cog menu](/screenshots/tutorials/admin/03-group-cog.png)

### 2. Click **Set as default for <group>**

This is admin-only. The action issues `POST /api/dashboards/group/<group>/default` with the dashboard's UUID. The service flips the previous group default off and the new one on **in a single transaction** (REQ-DASH-015), so members never see a flash with no default.

![Set as default for group](../../screenshots/tutorials/admin/03-set-group-default.png)
![Set as default for group](/screenshots/tutorials/admin/03-set-group-default.png)

### 3. Verify on a member's view

Log in as a member of the group. Their sidebar's **DEFAULT** section now lists the dashboard you marked.

![Member view — DEFAULT section](../../screenshots/tutorials/admin/03-member-default.png)
![Member view — DEFAULT section](/screenshots/tutorials/admin/03-member-default.png)

## Behaviour notes

Expand Down
6 changes: 3 additions & 3 deletions docs/tutorials/admin/04-restrict-widgets.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Define a role with a widget allow-list, assign it to a group, and verify members

### 1. Open MyDash admin settings → **Roles**

![Roles tab in admin settings](../../screenshots/tutorials/admin/04-roles-tab.png)
![Roles tab in admin settings](/screenshots/tutorials/admin/04-roles-tab.png)

### 2. Click **Create role**

Expand All @@ -37,7 +37,7 @@ Required fields:
- **Group** — Nextcloud group id this role applies to.
- **Allowed widgets** — multi-select of widget IDs (e.g. `recommendations`, `activity`, `tile`, `files`, `text`).

![Create role modal](../../screenshots/tutorials/admin/04-role-create.png)
![Create role modal](/screenshots/tutorials/admin/04-role-create.png)

Leave the allow-list empty to mean "no restriction" (the default for users not in any role).

Expand All @@ -49,7 +49,7 @@ The role row appears in the list. The allow-list is persisted in `oc_mydash_role

As a member of the assigned group, open MyDash and the widget picker:

![Filtered widget picker](../../screenshots/tutorials/admin/04-filtered-picker.png)
![Filtered widget picker](/screenshots/tutorials/admin/04-filtered-picker.png)

Only the allowed widget IDs appear. Existing placements of disallowed widgets keep rendering — the filter only applies to **adding new** widgets.

Expand Down
8 changes: 4 additions & 4 deletions docs/tutorials/admin/05-bulk-operations.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,27 +34,27 @@ Move every dashboard in `eng-old` into `eng`, then delete the now-empty `eng-old

### 1. Open Bulk operations

![Bulk operations panel](../../screenshots/tutorials/admin/05-bulk-panel.png)
![Bulk operations panel](/screenshots/tutorials/admin/05-bulk-panel.png)

### 2. Filter the dashboard list

Filter controls: by group id, by `source`, by date range, by name match. The selected rows update live.

![Filter applied — eng-old dashboards selected](../../screenshots/tutorials/admin/05-bulk-filter.png)
![Filter applied — eng-old dashboards selected](/screenshots/tutorials/admin/05-bulk-filter.png)

### 3. Pick **Move** and the target group

Select the rows (or **Select all matching**), open the action dropdown, pick **Move**, type or pick the target group id (`eng`).

![Move action — target group entered](../../screenshots/tutorials/admin/05-bulk-move-target.png)
![Move action — target group entered](/screenshots/tutorials/admin/05-bulk-move-target.png)

### 4. Confirm

A confirmation dialog summarises what's about to happen — count, source group, target group, the same fields as a `dry-run` query.

The action issues `POST /api/admin/dashboards/bulk-move` with the UUIDs and target group id. Service-side this is a single transaction: all rows or nothing.

![Bulk move confirmation](../../screenshots/tutorials/admin/05-bulk-confirm.png)
![Bulk move confirmation](/screenshots/tutorials/admin/05-bulk-confirm.png)

### 5. Repeat for **Delete** on the empty group

Expand Down
6 changes: 3 additions & 3 deletions docs/tutorials/user/01-first-launch.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ Recognise the parts of the MyDash workspace and know where to find the controls

Or visit `/apps/mydash/` directly. After a moment of loading you land on **My Dashboard** with the default widget bundle already in place:

![First-launch overview](../../screenshots/tutorials/user/01-first-launch-overview.png)
![First-launch overview](/screenshots/tutorials/user/01-first-launch-overview.png)

The bundle ships with three preconfigured tile widgets on the top row — Conduction, Sendent, and Nextcloud — plus a Files widget below.

### 2. Open the dashboard sidebar

Click the **hamburger** button in the top-right to slide out the sidebar:

![Sidebar open](../../screenshots/tutorials/user/02-sidebar-open.png)
![Sidebar open](/screenshots/tutorials/user/02-sidebar-open.png)

The sidebar is your jumping-off point for everything — switching between dashboards, creating new ones, configuring an existing one, and pinning a default.

Expand All @@ -44,7 +44,7 @@ A ★ next to a row marks that dashboard as your **default** — the one MyDash

Each row carries a cog (⚙️) on the right. Click it for the per-dashboard action menu:

![Cog action menu](../../screenshots/tutorials/user/03-cog-menu.png)
![Cog action menu](/screenshots/tutorials/user/03-cog-menu.png)

From here you can edit the layout, configure metadata, add custom widgets, pin as default, and delete. Most of the rest of the user guide is built around these actions.

Expand Down
6 changes: 3 additions & 3 deletions docs/tutorials/user/02-create-dashboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Create a new personal dashboard, give it a name, optionally add a description an

### 1. Open the sidebar and click **+ Add dashboard**

![Add dashboard button](../../screenshots/tutorials/user/02-create-add-button.png)
![Add dashboard button](/screenshots/tutorials/user/02-create-add-button.png)

### 2. Fill in the create modal

Expand All @@ -30,13 +30,13 @@ A configuration modal opens with these fields:
- **Description** — optional. Shown in admin tooling and inside the configuration modal.
- **Icon** — optional. Pick from the registered icon set, or paste a URL for a custom icon (see [Dashboard icons capability](../../features/dashboards.md)).

![Create dashboard modal](../../screenshots/tutorials/user/02-create-modal.png)
![Create dashboard modal](/screenshots/tutorials/user/02-create-modal.png)

### 3. Click **Save**

The new dashboard is auto-activated, appears at the top of **MY DASHBOARDS** in the sidebar, and is bootstrapped with the default widget bundle (three tiles + a Files widget). You can now [add more widgets](03-add-widget.md), [reposition them](04-reposition-resize.md), or [pin this as your default](07-set-default.md).

![New dashboard with default bundle](../../screenshots/tutorials/user/02-create-success.png)
![New dashboard with default bundle](/screenshots/tutorials/user/02-create-success.png)

## Verification

Expand Down
8 changes: 4 additions & 4 deletions docs/tutorials/user/03-add-widget.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@ Add a new widget to your active dashboard.

Open the active dashboard's cog menu and click **Edit dashboard**. The grid shows resize handles on each placement.

![Edit dashboard menu entry](../../screenshots/tutorials/user/03-edit-mode-enter.png)
![Edit dashboard menu entry](/screenshots/tutorials/user/03-edit-mode-enter.png)

### 2. Open the **Add widget** modal

From the cog menu pick **Add custom widget…** for the MyDash custom families, or click the empty-cell **+** marker that appears in edit mode for built-in Nextcloud widgets.

![Widget picker modal](../../screenshots/tutorials/user/03-widget-picker.png)
![Widget picker modal](/screenshots/tutorials/user/03-widget-picker.png)

### 3. Pick a widget type

Expand All @@ -48,13 +48,13 @@ Each custom widget type opens its own form. Some examples:
- **Files** — folder path, view mode (list / grid), optional filters and upload toggle.
- **Link button** — single-link button or list mode with multiple links.

![Per-type configuration form](../../screenshots/tutorials/user/03-widget-form.png)
![Per-type configuration form](/screenshots/tutorials/user/03-widget-form.png)

### 5. Click **Save**

The new placement appears in the grid at the next available cell. You can immediately drag it where you want — see [Reposition & resize widgets](04-reposition-resize.md).

![Newly-added widget on dashboard](../../screenshots/tutorials/user/03-widget-added.png)
![Newly-added widget on dashboard](/screenshots/tutorials/user/03-widget-added.png)

## Verification

Expand Down
10 changes: 5 additions & 5 deletions docs/tutorials/user/04-reposition-resize.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,27 +23,27 @@ Move a widget to a new position and resize it.

Cog menu → **Edit dashboard**. Drag/resize handles appear on every placement; the cog button on the active row flips to **Save dashboard** with a save icon.

![Edit mode active](../../screenshots/tutorials/user/04-edit-mode.png)
![Edit mode active](/screenshots/tutorials/user/04-edit-mode.png)

### 2. Reposition by dragging the title bar

Click and hold anywhere on a widget's header (or its drag handle if the widget overrides the title row). Drop targets light up as you move; release to snap into place. Other widgets reflow around the drop point.

![Mid-drag — drop targets](../../screenshots/tutorials/user/04-dragging.png)
![Mid-drag — drop targets](/screenshots/tutorials/user/04-dragging.png)

![After drop — reflowed layout](../../screenshots/tutorials/user/04-reflowed.png)
![After drop — reflowed layout](/screenshots/tutorials/user/04-reflowed.png)

### 3. Resize from the corner / edge handles

Each widget has a bottom-right corner handle for diagonal resize and edge handles for single-axis resize. Minimum size is 2×2 cells; the registry-defined widget size hints take precedence on first placement but you can resize freely afterwards.

![Resizing a widget](../../screenshots/tutorials/user/04-resizing.png)
![Resizing a widget](/screenshots/tutorials/user/04-resizing.png)

### 4. Save the layout

Click **Save dashboard** in the top-right (the cog button switches into save mode while editing). MyDash issues a single `PUT /api/dashboard/{id}` with the new layout.

![Save layout](../../screenshots/tutorials/user/04-save-layout.png)
![Save layout](/screenshots/tutorials/user/04-save-layout.png)

:::tip
The grid auto-saves on drop, so the explicit Save button is mostly a confirmation that no other layout changes are pending. If you reload mid-edit you'll see the auto-saved state, not a draft.
Expand Down
Loading
Loading