diff --git a/web/src/routes/(user)/+layout.svelte b/web/src/routes/(user)/+layout.svelte
index 983d25eced..3e71097096 100644
--- a/web/src/routes/(user)/+layout.svelte
+++ b/web/src/routes/(user)/+layout.svelte
@@ -1,6 +1,6 @@
diff --git a/web/src/lib/components/memory-page/memory-photo-viewer.svelte b/web/src/routes/(user)/memory/[[photos=photos]]/[[assetId=id]]/memory-photo-viewer.svelte
similarity index 100%
rename from web/src/lib/components/memory-page/memory-photo-viewer.svelte
rename to web/src/routes/(user)/memory/[[photos=photos]]/[[assetId=id]]/memory-photo-viewer.svelte
diff --git a/web/src/lib/components/memory-page/memory-video-viewer.svelte b/web/src/routes/(user)/memory/[[photos=photos]]/[[assetId=id]]/memory-video-viewer.svelte
similarity index 100%
rename from web/src/lib/components/memory-page/memory-video-viewer.svelte
rename to web/src/routes/(user)/memory/[[photos=photos]]/[[assetId=id]]/memory-video-viewer.svelte
diff --git a/web/src/lib/components/memory-page/memory-viewer.svelte b/web/src/routes/(user)/memory/[[photos=photos]]/[[assetId=id]]/memory-viewer.svelte
similarity index 99%
rename from web/src/lib/components/memory-page/memory-viewer.svelte
rename to web/src/routes/(user)/memory/[[photos=photos]]/[[assetId=id]]/memory-viewer.svelte
index 0b6f89ec5c..7c0693badb 100644
--- a/web/src/lib/components/memory-page/memory-viewer.svelte
+++ b/web/src/routes/(user)/memory/[[photos=photos]]/[[assetId=id]]/memory-viewer.svelte
@@ -2,8 +2,8 @@
import { afterNavigate, goto } from '$app/navigation';
import { page } from '$app/state';
import { shortcuts } from '$lib/actions/shortcut';
- import MemoryPhotoViewer from '$lib/components/memory-page/memory-photo-viewer.svelte';
- import MemoryVideoViewer from '$lib/components/memory-page/memory-video-viewer.svelte';
+ import MemoryPhotoViewer from './memory-photo-viewer.svelte';
+ import MemoryVideoViewer from './memory-video-viewer.svelte';
import ButtonContextMenu from '$lib/components/shared-components/context-menu/button-context-menu.svelte';
import MenuOption from '$lib/components/shared-components/context-menu/menu-option.svelte';
import ControlAppBar from '$lib/components/shared-components/control-app-bar.svelte';
diff --git a/web/src/routes/(user)/people/+page.svelte b/web/src/routes/(user)/people/+page.svelte
index 0bc2439efe..c6e445f7d8 100644
--- a/web/src/routes/(user)/people/+page.svelte
+++ b/web/src/routes/(user)/people/+page.svelte
@@ -3,9 +3,9 @@
import { page } from '$app/stores';
import { scrollMemory } from '$lib/actions/scroll-memory';
import { shortcut } from '$lib/actions/shortcut';
- import ManagePeopleVisibility from '$lib/components/faces-page/manage-people-visibility.svelte';
- import PeopleCard from '$lib/components/faces-page/people-card.svelte';
- import PeopleInfiniteScroll from '$lib/components/faces-page/people-infinite-scroll.svelte';
+ import ManagePeopleVisibility from './manage-people-visibility.svelte';
+ import PeopleCard from './people-card.svelte';
+ import PeopleInfiniteScroll from './people-infinite-scroll.svelte';
import SearchPeople from '$lib/components/faces-page/people-search.svelte';
import UserPageLayout from '$lib/components/layouts/user-page-layout.svelte';
import OnEvents from '$lib/components/OnEvents.svelte';
diff --git a/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte
index b167f93a08..67b6f3c1ac 100644
--- a/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte
+++ b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte
@@ -5,9 +5,9 @@
import { listNavigation } from '$lib/actions/list-navigation';
import { scrollMemoryClearer } from '$lib/actions/scroll-memory';
import ImageThumbnail from '$lib/components/assets/thumbnail/image-thumbnail.svelte';
- import EditNameInput from '$lib/components/faces-page/edit-name-input.svelte';
- import MergeFaceSelector from '$lib/components/faces-page/merge-face-selector.svelte';
- import UnMergeFaceSelector from '$lib/components/faces-page/unmerge-face-selector.svelte';
+ import EditNameInput from './edit-name-input.svelte';
+ import MergeFaceSelector from './merge-face-selector.svelte';
+ import UnMergeFaceSelector from './unmerge-face-selector.svelte';
import OnEvents from '$lib/components/OnEvents.svelte';
import ButtonContextMenu from '$lib/components/shared-components/context-menu/button-context-menu.svelte';
import MenuOption from '$lib/components/shared-components/context-menu/menu-option.svelte';
diff --git a/web/src/lib/components/faces-page/edit-name-input.svelte b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/edit-name-input.svelte
similarity index 94%
rename from web/src/lib/components/faces-page/edit-name-input.svelte
rename to web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/edit-name-input.svelte
index 36471923f1..5db57444e5 100644
--- a/web/src/lib/components/faces-page/edit-name-input.svelte
+++ b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/edit-name-input.svelte
@@ -3,7 +3,7 @@
import { type PersonResponseDto } from '@immich/sdk';
import { Button } from '@immich/ui';
import { t } from 'svelte-i18n';
- import ImageThumbnail from '../assets/thumbnail/image-thumbnail.svelte';
+ import ImageThumbnail from '$lib/components/assets/thumbnail/image-thumbnail.svelte';
interface Props {
person: PersonResponseDto;
diff --git a/web/src/lib/components/faces-page/face-thumbnail.svelte b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/face-thumbnail.svelte
similarity index 95%
rename from web/src/lib/components/faces-page/face-thumbnail.svelte
rename to web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/face-thumbnail.svelte
index 196777f0af..135b181be1 100644
--- a/web/src/lib/components/faces-page/face-thumbnail.svelte
+++ b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/face-thumbnail.svelte
@@ -1,7 +1,7 @@
diff --git a/web/src/routes/+layout.svelte b/web/src/routes/+layout.svelte
index a4aca07604..31726238f8 100644
--- a/web/src/routes/+layout.svelte
+++ b/web/src/routes/+layout.svelte
@@ -2,12 +2,12 @@
import { afterNavigate, beforeNavigate } from '$app/navigation';
import { page } from '$app/state';
import { getPagesProvider, getSettingsProvider } from '$lib/commands';
- import DownloadPanel from '$lib/components/asset-viewer/download-panel.svelte';
- import ErrorLayout from '$lib/components/layouts/ErrorLayout.svelte';
+ import DownloadPanel from './download-panel.svelte';
+ import ErrorLayout from './ErrorLayout.svelte';
import OnEvents from '$lib/components/OnEvents.svelte';
- import NavigationLoadingBar from '$lib/components/shared-components/navigation-loading-bar.svelte';
- import UploadPanel from '$lib/components/shared-components/upload-panel.svelte';
- import VersionAnnouncement from '$lib/components/VersionAnnouncement.svelte';
+ import NavigationLoadingBar from './navigation-loading-bar.svelte';
+ import UploadPanel from './upload-panel.svelte';
+ import VersionAnnouncement from './VersionAnnouncement.svelte';
import { authManager } from '$lib/managers/auth-manager.svelte';
import { eventManager } from '$lib/managers/event-manager.svelte';
import { serverConfigManager } from '$lib/managers/server-config-manager.svelte';
diff --git a/web/src/lib/components/layouts/ErrorLayout.svelte b/web/src/routes/ErrorLayout.svelte
similarity index 100%
rename from web/src/lib/components/layouts/ErrorLayout.svelte
rename to web/src/routes/ErrorLayout.svelte
diff --git a/web/src/lib/components/VersionAnnouncement.svelte b/web/src/routes/VersionAnnouncement.svelte
similarity index 100%
rename from web/src/lib/components/VersionAnnouncement.svelte
rename to web/src/routes/VersionAnnouncement.svelte
diff --git a/web/src/routes/admin/queues/+page.svelte b/web/src/routes/admin/queues/+page.svelte
index 07f754670a..4546019036 100644
--- a/web/src/routes/admin/queues/+page.svelte
+++ b/web/src/routes/admin/queues/+page.svelte
@@ -1,7 +1,7 @@