diff --git a/web/src/lib/components/utilities-page/utilities-menu.svelte b/web/src/lib/components/utilities-page/utilities-menu.svelte
index 7deddc6bee..c3232c227c 100644
--- a/web/src/lib/components/utilities-page/utilities-menu.svelte
+++ b/web/src/lib/components/utilities-page/utilities-menu.svelte
@@ -17,4 +17,14 @@
{$t('review_duplicates')}
+
+
+
+
+ {$t('workflows')}
+
diff --git a/web/src/lib/constants.ts b/web/src/lib/constants.ts
index 3abea669e6..c37ecf08c9 100644
--- a/web/src/lib/constants.ts
+++ b/web/src/lib/constants.ts
@@ -45,6 +45,7 @@ export enum AppRoute {
UTILITIES = '/utilities',
DUPLICATES = '/utilities/duplicates',
+ WORKFLOWS = '/utilities/workflows',
FOLDERS = '/folders',
TAGS = '/tags',
diff --git a/web/src/lib/i18n/en.json b/web/src/lib/i18n/en.json
index e27cc54d52..e11c0c63e3 100644
--- a/web/src/lib/i18n/en.json
+++ b/web/src/lib/i18n/en.json
@@ -1283,6 +1283,7 @@
"week": "Week",
"welcome": "Welcome",
"welcome_to_immich": "Welcome to immich",
+ "workflows": "Workflows",
"year": "Year",
"years_ago": "{years, plural, one {# year} other {# years}} ago",
"yes": "Yes",
diff --git a/web/src/routes/(user)/utilities/workflows/+page.svelte b/web/src/routes/(user)/utilities/workflows/+page.svelte
new file mode 100644
index 0000000000..863004bfaa
--- /dev/null
+++ b/web/src/routes/(user)/utilities/workflows/+page.svelte
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/web/src/routes/(user)/utilities/workflows/+page.ts b/web/src/routes/(user)/utilities/workflows/+page.ts
new file mode 100644
index 0000000000..815f6794bf
--- /dev/null
+++ b/web/src/routes/(user)/utilities/workflows/+page.ts
@@ -0,0 +1,14 @@
+import { authenticate } from '$lib/utils/auth';
+import { getFormatter } from '$lib/utils/i18n';
+import type { PageLoad } from './$types';
+
+export const load = (async () => {
+ await authenticate();
+ const $t = await getFormatter();
+
+ return {
+ meta: {
+ title: $t('workflows'),
+ },
+ };
+}) satisfies PageLoad;