diff --git a/mobile/lib/extensions/asyncvalue_extensions.dart b/mobile/lib/extensions/asyncvalue_extensions.dart
index af02ff13c2..f30b5481bd 100644
--- a/mobile/lib/extensions/asyncvalue_extensions.dart
+++ b/mobile/lib/extensions/asyncvalue_extensions.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
-import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
-import 'package:immich_mobile/shared/ui/scaffold_error_body.dart';
+import 'package:immich_mobile/widgets/common/immich_loading_indicator.dart';
+import 'package:immich_mobile/widgets/common/scaffold_error_body.dart';
 import 'package:logging/logging.dart';
 
 extension LogOnError<T> on AsyncValue<T> {
diff --git a/mobile/lib/extensions/maplibrecontroller_extensions.dart b/mobile/lib/extensions/maplibrecontroller_extensions.dart
index 4a2c0341f0..83074be137 100644
--- a/mobile/lib/extensions/maplibrecontroller_extensions.dart
+++ b/mobile/lib/extensions/maplibrecontroller_extensions.dart
@@ -3,7 +3,7 @@ import 'dart:math';
 
 import 'package:flutter/services.dart';
 import 'package:immich_mobile/models/map/map_marker.model.dart';
-import 'package:immich_mobile/modules/map/utils/map_utils.dart';
+import 'package:immich_mobile/utils/map_utils.dart';
 import 'package:maplibre_gl/maplibre_gl.dart';
 
 extension MapMarkers on MaplibreMapController {
diff --git a/mobile/lib/pages/backup/album_preview.page.dart b/mobile/lib/pages/backup/album_preview.page.dart
index e3c2b34b8f..7e1486208e 100644
--- a/mobile/lib/pages/backup/album_preview.page.dart
+++ b/mobile/lib/pages/backup/album_preview.page.dart
@@ -4,7 +4,7 @@ import 'package:auto_route/auto_route.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_hooks/flutter_hooks.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
-import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
+import 'package:immich_mobile/widgets/common/immich_loading_indicator.dart';
 import 'package:photo_manager/photo_manager.dart';
 
 @RoutePage()
diff --git a/mobile/lib/pages/backup/backup_album_selection.page.dart b/mobile/lib/pages/backup/backup_album_selection.page.dart
index d151b4f2cf..3890726fc1 100644
--- a/mobile/lib/pages/backup/backup_album_selection.page.dart
+++ b/mobile/lib/pages/backup/backup_album_selection.page.dart
@@ -6,9 +6,9 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/constants/immich_colors.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/backup/backup.provider.dart';
-import 'package:immich_mobile/modules/backup/ui/album_info_card.dart';
-import 'package:immich_mobile/modules/backup/ui/album_info_list_tile.dart';
-import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
+import 'package:immich_mobile/widgets/backup/album_info_card.dart';
+import 'package:immich_mobile/widgets/backup/album_info_list_tile.dart';
+import 'package:immich_mobile/widgets/common/immich_loading_indicator.dart';
 
 @RoutePage()
 class BackupAlbumSelectionPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/backup/backup_controller.page.dart b/mobile/lib/pages/backup/backup_controller.page.dart
index fb1f7f9c91..4efa59f959 100644
--- a/mobile/lib/pages/backup/backup_controller.page.dart
+++ b/mobile/lib/pages/backup/backup_controller.page.dart
@@ -11,12 +11,12 @@ import 'package:immich_mobile/providers/album/album.provider.dart';
 import 'package:immich_mobile/providers/backup/error_backup_list.provider.dart';
 import 'package:immich_mobile/providers/backup/ios_background_settings.provider.dart';
 import 'package:immich_mobile/providers/backup/manual_upload.provider.dart';
-import 'package:immich_mobile/modules/backup/ui/current_backup_asset_info_box.dart';
+import 'package:immich_mobile/widgets/backup/current_backup_asset_info_box.dart';
 import 'package:immich_mobile/models/backup/backup_state.model.dart';
 import 'package:immich_mobile/providers/backup/backup.provider.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/providers/websocket.provider.dart';
-import 'package:immich_mobile/modules/backup/ui/backup_info_card.dart';
+import 'package:immich_mobile/widgets/backup/backup_info_card.dart';
 
 @RoutePage()
 class BackupControllerPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/backup/backup_options.page.dart b/mobile/lib/pages/backup/backup_options.page.dart
index cf8b65c15c..9a639c844e 100644
--- a/mobile/lib/pages/backup/backup_options.page.dart
+++ b/mobile/lib/pages/backup/backup_options.page.dart
@@ -1,7 +1,7 @@
 import 'package:auto_route/auto_route.dart';
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
-import 'package:immich_mobile/modules/settings/widgets/backup_settings/backup_settings.dart';
+import 'package:immich_mobile/widgets/settings/backup_settings/backup_settings.dart';
 
 @RoutePage()
 class BackupOptionsPage extends StatelessWidget {
diff --git a/mobile/lib/pages/common/activities.page.dart b/mobile/lib/pages/common/activities.page.dart
index 4dc0f5252b..9678058111 100644
--- a/mobile/lib/pages/common/activities.page.dart
+++ b/mobile/lib/pages/common/activities.page.dart
@@ -7,9 +7,9 @@ import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/models/activities/activity.model.dart';
 import 'package:immich_mobile/providers/activity.provider.dart';
-import 'package:immich_mobile/modules/activities/widgets/activity_text_field.dart';
-import 'package:immich_mobile/modules/activities/widgets/activity_tile.dart';
-import 'package:immich_mobile/modules/activities/widgets/dismissible_activity.dart';
+import 'package:immich_mobile/widgets/activities/activity_text_field.dart';
+import 'package:immich_mobile/widgets/activities/activity_tile.dart';
+import 'package:immich_mobile/widgets/activities/dismissible_activity.dart';
 import 'package:immich_mobile/providers/album/current_album.provider.dart';
 import 'package:immich_mobile/providers/asset_viewer/current_asset.provider.dart';
 import 'package:immich_mobile/providers/user.provider.dart';
diff --git a/mobile/lib/pages/common/album_additional_shared_user_selection.page.dart b/mobile/lib/pages/common/album_additional_shared_user_selection.page.dart
index 31426907c1..33c4708dd2 100644
--- a/mobile/lib/pages/common/album_additional_shared_user_selection.page.dart
+++ b/mobile/lib/pages/common/album_additional_shared_user_selection.page.dart
@@ -8,7 +8,7 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/album/suggested_shared_users.provider.dart';
 import 'package:immich_mobile/entities/album.entity.dart';
 import 'package:immich_mobile/entities/user.entity.dart';
-import 'package:immich_mobile/shared/ui/user_circle_avatar.dart';
+import 'package:immich_mobile/widgets/common/user_circle_avatar.dart';
 
 @RoutePage<List<String>?>()
 class AlbumAdditionalSharedUserSelectionPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/common/album_asset_selection.page.dart b/mobile/lib/pages/common/album_asset_selection.page.dart
index 19e9f705a1..e82627f106 100644
--- a/mobile/lib/pages/common/album_asset_selection.page.dart
+++ b/mobile/lib/pages/common/album_asset_selection.page.dart
@@ -7,8 +7,8 @@ import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/models/albums/asset_selection_page_result.model.dart';
 import 'package:immich_mobile/providers/asset_viewer/render_list.provider.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/immich_asset_grid.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/immich_asset_grid.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:isar/isar.dart';
 
diff --git a/mobile/lib/pages/common/album_options.page.dart b/mobile/lib/pages/common/album_options.page.dart
index 339fe3922c..fe1cd2f777 100644
--- a/mobile/lib/pages/common/album_options.page.dart
+++ b/mobile/lib/pages/common/album_options.page.dart
@@ -11,8 +11,8 @@ import 'package:immich_mobile/utils/immich_loading_overlay.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/album.entity.dart';
 import 'package:immich_mobile/entities/user.entity.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
-import 'package:immich_mobile/shared/ui/user_circle_avatar.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/user_circle_avatar.dart';
 
 @RoutePage()
 class AlbumOptionsPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/common/album_shared_user_selection.page.dart b/mobile/lib/pages/common/album_shared_user_selection.page.dart
index aff93d9b2d..387894c063 100644
--- a/mobile/lib/pages/common/album_shared_user_selection.page.dart
+++ b/mobile/lib/pages/common/album_shared_user_selection.page.dart
@@ -11,7 +11,7 @@ import 'package:immich_mobile/providers/album/suggested_shared_users.provider.da
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/entities/user.entity.dart';
-import 'package:immich_mobile/shared/ui/user_circle_avatar.dart';
+import 'package:immich_mobile/widgets/common/user_circle_avatar.dart';
 
 @RoutePage<List<String>>()
 class AlbumSharedUserSelectionPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/common/album_viewer.page.dart b/mobile/lib/pages/common/album_viewer.page.dart
index 3a2773b584..a7cb8c218a 100644
--- a/mobile/lib/pages/common/album_viewer.page.dart
+++ b/mobile/lib/pages/common/album_viewer.page.dart
@@ -14,18 +14,18 @@ import 'package:immich_mobile/providers/album/current_album.provider.dart';
 import 'package:immich_mobile/providers/album/shared_album.provider.dart';
 import 'package:immich_mobile/utils/immich_loading_overlay.dart';
 import 'package:immich_mobile/services/album.service.dart';
-import 'package:immich_mobile/modules/album/ui/album_action_outlined_button.dart';
-import 'package:immich_mobile/modules/album/ui/album_viewer_editable_title.dart';
+import 'package:immich_mobile/widgets/album/album_action_outlined_button.dart';
+import 'package:immich_mobile/widgets/album/album_viewer_editable_title.dart';
 import 'package:immich_mobile/providers/multiselect.provider.dart';
 import 'package:immich_mobile/providers/authentication.provider.dart';
-import 'package:immich_mobile/modules/album/ui/album_viewer_appbar.dart';
+import 'package:immich_mobile/widgets/album/album_viewer_appbar.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/album.entity.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/asset.provider.dart';
-import 'package:immich_mobile/shared/ui/asset_grid/multiselect_grid.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
-import 'package:immich_mobile/shared/ui/user_circle_avatar.dart';
+import 'package:immich_mobile/widgets/asset_grid/multiselect_grid.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/user_circle_avatar.dart';
 
 @RoutePage()
 class AlbumViewerPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/common/create_album.page.dart b/mobile/lib/pages/common/create_album.page.dart
index 06c30ed2ab..885d65b9f0 100644
--- a/mobile/lib/pages/common/create_album.page.dart
+++ b/mobile/lib/pages/common/create_album.page.dart
@@ -7,9 +7,9 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/models/albums/asset_selection_page_result.model.dart';
 import 'package:immich_mobile/providers/album/album.provider.dart';
 import 'package:immich_mobile/providers/album/album_title.provider.dart';
-import 'package:immich_mobile/modules/album/ui/album_action_outlined_button.dart';
-import 'package:immich_mobile/modules/album/ui/album_title_text_field.dart';
-import 'package:immich_mobile/modules/album/ui/shared_album_thumbnail_image.dart';
+import 'package:immich_mobile/widgets/album/album_action_outlined_button.dart';
+import 'package:immich_mobile/widgets/album/album_title_text_field.dart';
+import 'package:immich_mobile/widgets/album/shared_album_thumbnail_image.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/asset.provider.dart';
diff --git a/mobile/lib/pages/common/gallery_viewer.page.dart b/mobile/lib/pages/common/gallery_viewer.page.dart
index b71bbbc6fc..52ae695997 100644
--- a/mobile/lib/pages/common/gallery_viewer.page.dart
+++ b/mobile/lib/pages/common/gallery_viewer.page.dart
@@ -13,20 +13,20 @@ import 'package:immich_mobile/providers/asset_viewer/asset_stack.provider.dart';
 import 'package:immich_mobile/providers/asset_viewer/current_asset.provider.dart';
 import 'package:immich_mobile/providers/asset_viewer/show_controls.provider.dart';
 import 'package:immich_mobile/providers/asset_viewer/video_player_value_provider.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/advanced_bottom_sheet.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/bottom_gallery_bar.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/exif_sheet/exif_bottom_sheet.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/gallery_app_bar.dart';
+import 'package:immich_mobile/widgets/asset_viewer/advanced_bottom_sheet.dart';
+import 'package:immich_mobile/widgets/asset_viewer/bottom_gallery_bar.dart';
+import 'package:immich_mobile/widgets/asset_viewer/exif_sheet/exif_bottom_sheet.dart';
+import 'package:immich_mobile/widgets/asset_viewer/gallery_app_bar.dart';
 import 'package:immich_mobile/providers/app_settings.provider.dart';
 import 'package:immich_mobile/pages/common/video_viewer.page.dart';
 import 'package:immich_mobile/services/app_settings.service.dart';
 import 'package:immich_mobile/providers/haptic_feedback.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_image.dart';
-import 'package:immich_mobile/shared/ui/immich_thumbnail.dart';
-import 'package:immich_mobile/shared/ui/photo_view/photo_view_gallery.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/photo_view_computed_scale.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/photo_view_scale_state.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/utils/photo_view_hero_attributes.dart';
+import 'package:immich_mobile/widgets/common/immich_image.dart';
+import 'package:immich_mobile/widgets/common/immich_thumbnail.dart';
+import 'package:immich_mobile/widgets/photo_view/photo_view_gallery.dart';
+import 'package:immich_mobile/widgets/photo_view/src/photo_view_computed_scale.dart';
+import 'package:immich_mobile/widgets/photo_view/src/photo_view_scale_state.dart';
+import 'package:immich_mobile/widgets/photo_view/src/utils/photo_view_hero_attributes.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:isar/isar.dart';
 import 'package:openapi/api.dart' show ThumbnailFormat;
diff --git a/mobile/lib/pages/common/settings.page.dart b/mobile/lib/pages/common/settings.page.dart
index c5e55a800c..e20b06c24a 100644
--- a/mobile/lib/pages/common/settings.page.dart
+++ b/mobile/lib/pages/common/settings.page.dart
@@ -3,13 +3,13 @@ import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_hooks/flutter_hooks.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
-import 'package:immich_mobile/modules/settings/widgets/advanced_settings.dart';
-import 'package:immich_mobile/modules/settings/widgets/asset_list_settings/asset_list_settings.dart';
-import 'package:immich_mobile/modules/settings/widgets/backup_settings/backup_settings.dart';
-import 'package:immich_mobile/modules/settings/widgets/image_viewer_quality_setting.dart';
-import 'package:immich_mobile/modules/settings/widgets/language_settings.dart';
-import 'package:immich_mobile/modules/settings/widgets/notification_setting.dart';
-import 'package:immich_mobile/modules/settings/widgets/preference_settings/preference_setting.dart';
+import 'package:immich_mobile/widgets/settings/advanced_settings.dart';
+import 'package:immich_mobile/widgets/settings/asset_list_settings/asset_list_settings.dart';
+import 'package:immich_mobile/widgets/settings/backup_settings/backup_settings.dart';
+import 'package:immich_mobile/widgets/settings/image_viewer_quality_setting.dart';
+import 'package:immich_mobile/widgets/settings/language_settings.dart';
+import 'package:immich_mobile/widgets/settings/notification_setting.dart';
+import 'package:immich_mobile/widgets/settings/preference_settings/preference_setting.dart';
 import 'package:immich_mobile/routing/router.dart';
 
 enum SettingSection {
diff --git a/mobile/lib/pages/common/video_viewer.page.dart b/mobile/lib/pages/common/video_viewer.page.dart
index a2a1dd8f1b..d52836de41 100644
--- a/mobile/lib/pages/common/video_viewer.page.dart
+++ b/mobile/lib/pages/common/video_viewer.page.dart
@@ -6,9 +6,9 @@ import 'package:immich_mobile/providers/asset_viewer/show_controls.provider.dart
 import 'package:immich_mobile/providers/asset_viewer/video_player_controller_provider.dart';
 import 'package:immich_mobile/providers/asset_viewer/video_player_controls_provider.dart';
 import 'package:immich_mobile/providers/asset_viewer/video_player_value_provider.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/video_player.dart';
+import 'package:immich_mobile/widgets/asset_viewer/video_player.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
-import 'package:immich_mobile/shared/ui/delayed_loading_indicator.dart';
+import 'package:immich_mobile/widgets/common/delayed_loading_indicator.dart';
 import 'package:wakelock_plus/wakelock_plus.dart';
 
 @RoutePage()
diff --git a/mobile/lib/pages/library/archive.page.dart b/mobile/lib/pages/library/archive.page.dart
index fce3cadf39..9051a99d48 100644
--- a/mobile/lib/pages/library/archive.page.dart
+++ b/mobile/lib/pages/library/archive.page.dart
@@ -4,7 +4,7 @@ import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/providers/archive.provider.dart';
 import 'package:immich_mobile/providers/multiselect.provider.dart';
-import 'package:immich_mobile/shared/ui/asset_grid/multiselect_grid.dart';
+import 'package:immich_mobile/widgets/asset_grid/multiselect_grid.dart';
 
 @RoutePage()
 class ArchivePage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/library/favorite.page.dart b/mobile/lib/pages/library/favorite.page.dart
index f56360f13e..cc867525ac 100644
--- a/mobile/lib/pages/library/favorite.page.dart
+++ b/mobile/lib/pages/library/favorite.page.dart
@@ -4,7 +4,7 @@ import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/providers/favorite_provider.dart';
 import 'package:immich_mobile/providers/multiselect.provider.dart';
-import 'package:immich_mobile/shared/ui/asset_grid/multiselect_grid.dart';
+import 'package:immich_mobile/widgets/asset_grid/multiselect_grid.dart';
 
 @RoutePage()
 class FavoritesPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/library/library.page.dart b/mobile/lib/pages/library/library.page.dart
index 5f089f70ff..be98440349 100644
--- a/mobile/lib/pages/library/library.page.dart
+++ b/mobile/lib/pages/library/library.page.dart
@@ -6,10 +6,10 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/album/album.provider.dart';
 import 'package:immich_mobile/providers/album/album_sort_by_options.provider.dart';
-import 'package:immich_mobile/modules/album/ui/album_thumbnail_card.dart';
+import 'package:immich_mobile/widgets/album/album_thumbnail_card.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/providers/server_info.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_app_bar.dart';
+import 'package:immich_mobile/widgets/common/immich_app_bar.dart';
 
 @RoutePage()
 class LibraryPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/library/trash.page.dart b/mobile/lib/pages/library/trash.page.dart
index 893e653f39..931c1eef6b 100644
--- a/mobile/lib/pages/library/trash.page.dart
+++ b/mobile/lib/pages/library/trash.page.dart
@@ -6,13 +6,13 @@ import 'package:fluttertoast/fluttertoast.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/immich_asset_grid.dart';
-import 'package:immich_mobile/modules/home/ui/delete_dialog.dart';
+import 'package:immich_mobile/widgets/asset_grid/immich_asset_grid.dart';
+import 'package:immich_mobile/widgets/asset_grid/delete_dialog.dart';
 import 'package:immich_mobile/providers/trash.provider.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/server_info.provider.dart';
-import 'package:immich_mobile/shared/ui/confirm_dialog.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/confirm_dialog.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 import 'package:immich_mobile/utils/immich_loading_overlay.dart';
 
 @RoutePage()
diff --git a/mobile/lib/pages/login/change_password.page.dart b/mobile/lib/pages/login/change_password.page.dart
index b475658d1a..b05397ee38 100644
--- a/mobile/lib/pages/login/change_password.page.dart
+++ b/mobile/lib/pages/login/change_password.page.dart
@@ -1,7 +1,7 @@
 import 'package:auto_route/auto_route.dart';
 import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
-import 'package:immich_mobile/modules/login/ui/change_password_form.dart';
+import 'package:immich_mobile/widgets/forms/change_password_form.dart';
 
 @RoutePage()
 class ChangePasswordPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/login/login.page.dart b/mobile/lib/pages/login/login.page.dart
index 8593c1ee36..c84f692822 100644
--- a/mobile/lib/pages/login/login.page.dart
+++ b/mobile/lib/pages/login/login.page.dart
@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
 import 'package:flutter_hooks/flutter_hooks.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
-import 'package:immich_mobile/modules/login/ui/login_form.dart';
+import 'package:immich_mobile/widgets/forms/login_form.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:package_info_plus/package_info_plus.dart';
 
diff --git a/mobile/lib/pages/onboarding/permission_onboarding.page.dart b/mobile/lib/pages/onboarding/permission_onboarding.page.dart
index 38b67387aa..8d2c049c50 100644
--- a/mobile/lib/pages/onboarding/permission_onboarding.page.dart
+++ b/mobile/lib/pages/onboarding/permission_onboarding.page.dart
@@ -5,8 +5,8 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/gallery_permission.provider.dart';
 import 'package:immich_mobile/routing/router.dart';
-import 'package:immich_mobile/shared/ui/immich_logo.dart';
-import 'package:immich_mobile/shared/ui/immich_title_text.dart';
+import 'package:immich_mobile/widgets/common/immich_logo.dart';
+import 'package:immich_mobile/widgets/common/immich_title_text.dart';
 import 'package:permission_handler/permission_handler.dart';
 
 @RoutePage()
diff --git a/mobile/lib/pages/photos/memory.page.dart b/mobile/lib/pages/photos/memory.page.dart
index 07b2836574..daa291503c 100644
--- a/mobile/lib/pages/photos/memory.page.dart
+++ b/mobile/lib/pages/photos/memory.page.dart
@@ -4,13 +4,13 @@ import 'package:flutter/services.dart';
 import 'package:flutter_hooks/flutter_hooks.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/models/memories/memory.model.dart';
-import 'package:immich_mobile/modules/memories/ui/memory_bottom_info.dart';
-import 'package:immich_mobile/modules/memories/ui/memory_card.dart';
-import 'package:immich_mobile/modules/memories/ui/memory_epilogue.dart';
-import 'package:immich_mobile/modules/memories/ui/memory_progress_indicator.dart';
+import 'package:immich_mobile/widgets/memories/memory_bottom_info.dart';
+import 'package:immich_mobile/widgets/memories/memory_card.dart';
+import 'package:immich_mobile/widgets/memories/memory_epilogue.dart';
+import 'package:immich_mobile/widgets/memories/memory_progress_indicator.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/haptic_feedback.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_image.dart';
+import 'package:immich_mobile/widgets/common/immich_image.dart';
 
 @RoutePage()
 class MemoryPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/photos/photos.page.dart b/mobile/lib/pages/photos/photos.page.dart
index ed44214fec..2ef738aaf1 100644
--- a/mobile/lib/pages/photos/photos.page.dart
+++ b/mobile/lib/pages/photos/photos.page.dart
@@ -9,14 +9,14 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/album/album.provider.dart';
 import 'package:immich_mobile/providers/album/shared_album.provider.dart';
 import 'package:immich_mobile/providers/multiselect.provider.dart';
-import 'package:immich_mobile/modules/memories/ui/memory_lane.dart';
+import 'package:immich_mobile/widgets/memories/memory_lane.dart';
 import 'package:immich_mobile/providers/asset.provider.dart';
 import 'package:immich_mobile/providers/server_info.provider.dart';
 import 'package:immich_mobile/providers/user.provider.dart';
 import 'package:immich_mobile/providers/websocket.provider.dart';
-import 'package:immich_mobile/shared/ui/asset_grid/multiselect_grid.dart';
-import 'package:immich_mobile/shared/ui/immich_app_bar.dart';
-import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
+import 'package:immich_mobile/widgets/asset_grid/multiselect_grid.dart';
+import 'package:immich_mobile/widgets/common/immich_app_bar.dart';
+import 'package:immich_mobile/widgets/common/immich_loading_indicator.dart';
 
 @RoutePage()
 class PhotosPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/search/all_motion_videos.page.dart b/mobile/lib/pages/search/all_motion_videos.page.dart
index d2bb867ab7..adccdc4e01 100644
--- a/mobile/lib/pages/search/all_motion_videos.page.dart
+++ b/mobile/lib/pages/search/all_motion_videos.page.dart
@@ -3,7 +3,7 @@ import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/immich_asset_grid.dart';
+import 'package:immich_mobile/widgets/asset_grid/immich_asset_grid.dart';
 import 'package:immich_mobile/providers/search/all_motion_photos.provider.dart';
 
 @RoutePage()
diff --git a/mobile/lib/pages/search/all_people.page.dart b/mobile/lib/pages/search/all_people.page.dart
index f3ffd30c76..8699eff1c1 100644
--- a/mobile/lib/pages/search/all_people.page.dart
+++ b/mobile/lib/pages/search/all_people.page.dart
@@ -5,7 +5,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
 import 'package:immich_mobile/models/search/search_curated_content.model.dart';
 import 'package:immich_mobile/providers/search/people.provider.dart';
-import 'package:immich_mobile/modules/search/ui/explore_grid.dart';
+import 'package:immich_mobile/widgets/search/explore_grid.dart';
 
 @RoutePage()
 class AllPeoplePage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/search/all_places.page.dart b/mobile/lib/pages/search/all_places.page.dart
index ac821cd403..4f848f3fa8 100644
--- a/mobile/lib/pages/search/all_places.page.dart
+++ b/mobile/lib/pages/search/all_places.page.dart
@@ -5,7 +5,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
 import 'package:immich_mobile/models/search/search_curated_content.model.dart';
 import 'package:immich_mobile/providers/search/search_page_state.provider.dart';
-import 'package:immich_mobile/modules/search/ui/explore_grid.dart';
+import 'package:immich_mobile/widgets/search/explore_grid.dart';
 
 @RoutePage()
 class AllPlacesPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/search/all_videos.page.dart b/mobile/lib/pages/search/all_videos.page.dart
index 0734a4dbdd..add70261a2 100644
--- a/mobile/lib/pages/search/all_videos.page.dart
+++ b/mobile/lib/pages/search/all_videos.page.dart
@@ -3,7 +3,7 @@ import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/providers/search/all_video_assets.provider.dart';
-import 'package:immich_mobile/shared/ui/asset_grid/multiselect_grid.dart';
+import 'package:immich_mobile/widgets/asset_grid/multiselect_grid.dart';
 
 @RoutePage()
 class AllVideosPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/search/map/map.page.dart b/mobile/lib/pages/search/map/map.page.dart
index 6ea4fbb669..1cfa7ada0e 100644
--- a/mobile/lib/pages/search/map/map.page.dart
+++ b/mobile/lib/pages/search/map/map.page.dart
@@ -15,16 +15,16 @@ import 'package:immich_mobile/models/map/map_event.model.dart';
 import 'package:immich_mobile/models/map/map_marker.model.dart';
 import 'package:immich_mobile/providers/map/map_marker.provider.dart';
 import 'package:immich_mobile/providers/map/map_state.provider.dart';
-import 'package:immich_mobile/modules/map/utils/map_utils.dart';
-import 'package:immich_mobile/modules/map/widgets/map_app_bar.dart';
-import 'package:immich_mobile/modules/map/widgets/map_asset_grid.dart';
-import 'package:immich_mobile/modules/map/widgets/map_bottom_sheet.dart';
-import 'package:immich_mobile/modules/map/widgets/map_theme_override.dart';
-import 'package:immich_mobile/modules/map/widgets/positioned_asset_marker_icon.dart';
+import 'package:immich_mobile/utils/map_utils.dart';
+import 'package:immich_mobile/widgets/map/map_app_bar.dart';
+import 'package:immich_mobile/widgets/map/map_asset_grid.dart';
+import 'package:immich_mobile/widgets/map/map_bottom_sheet.dart';
+import 'package:immich_mobile/widgets/map/map_theme_override.dart';
+import 'package:immich_mobile/widgets/map/positioned_asset_marker_icon.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/db.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 import 'package:immich_mobile/utils/immich_loading_overlay.dart';
 import 'package:immich_mobile/utils/debounce.dart';
 import 'package:maplibre_gl/maplibre_gl.dart';
diff --git a/mobile/lib/pages/search/map/map_location_picker.page.dart b/mobile/lib/pages/search/map/map_location_picker.page.dart
index b41c1184c1..47f4d3d0eb 100644
--- a/mobile/lib/pages/search/map/map_location_picker.page.dart
+++ b/mobile/lib/pages/search/map/map_location_picker.page.dart
@@ -8,9 +8,9 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/extensions/maplibrecontroller_extensions.dart';
-import 'package:immich_mobile/modules/map/widgets/map_theme_override.dart';
+import 'package:immich_mobile/widgets/map/map_theme_override.dart';
 import 'package:maplibre_gl/maplibre_gl.dart';
-import 'package:immich_mobile/modules/map/utils/map_utils.dart';
+import 'package:immich_mobile/utils/map_utils.dart';
 
 @RoutePage<LatLng?>()
 class MapLocationPickerPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/search/person_result.page.dart b/mobile/lib/pages/search/person_result.page.dart
index 526fd7e5f3..ec3f0f31ef 100644
--- a/mobile/lib/pages/search/person_result.page.dart
+++ b/mobile/lib/pages/search/person_result.page.dart
@@ -5,9 +5,9 @@ import 'package:flutter_hooks/flutter_hooks.dart' hide Store;
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/search/people.provider.dart';
-import 'package:immich_mobile/modules/search/ui/person_name_edit_form.dart';
+import 'package:immich_mobile/widgets/search/person_name_edit_form.dart';
 import 'package:immich_mobile/entities/store.entity.dart';
-import 'package:immich_mobile/shared/ui/asset_grid/multiselect_grid.dart';
+import 'package:immich_mobile/widgets/asset_grid/multiselect_grid.dart';
 import 'package:immich_mobile/utils/image_url_builder.dart';
 
 @RoutePage()
diff --git a/mobile/lib/pages/search/recently_added.page.dart b/mobile/lib/pages/search/recently_added.page.dart
index f8fe67d110..d52841c4f4 100644
--- a/mobile/lib/pages/search/recently_added.page.dart
+++ b/mobile/lib/pages/search/recently_added.page.dart
@@ -3,7 +3,7 @@ import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/immich_asset_grid.dart';
+import 'package:immich_mobile/widgets/asset_grid/immich_asset_grid.dart';
 import 'package:immich_mobile/providers/search/recently_added_asset.provider.dart';
 
 @RoutePage()
diff --git a/mobile/lib/pages/search/search.page.dart b/mobile/lib/pages/search/search.page.dart
index ca68da727a..637bff42fc 100644
--- a/mobile/lib/pages/search/search.page.dart
+++ b/mobile/lib/pages/search/search.page.dart
@@ -10,15 +10,15 @@ import 'package:immich_mobile/models/search/search_curated_content.model.dart';
 import 'package:immich_mobile/models/search/search_filter.model.dart';
 import 'package:immich_mobile/providers/search/people.provider.dart';
 import 'package:immich_mobile/providers/search/search_page_state.provider.dart';
-import 'package:immich_mobile/modules/search/ui/curated_people_row.dart';
-import 'package:immich_mobile/modules/search/ui/curated_places_row.dart';
-import 'package:immich_mobile/modules/search/ui/person_name_edit_form.dart';
-import 'package:immich_mobile/modules/search/ui/search_row_title.dart';
+import 'package:immich_mobile/widgets/search/curated_people_row.dart';
+import 'package:immich_mobile/widgets/search/curated_places_row.dart';
+import 'package:immich_mobile/widgets/search/person_name_edit_form.dart';
+import 'package:immich_mobile/widgets/search/search_row_title.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/server_info.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_app_bar.dart';
-import 'package:immich_mobile/shared/ui/scaffold_error_body.dart';
+import 'package:immich_mobile/widgets/common/immich_app_bar.dart';
+import 'package:immich_mobile/widgets/common/scaffold_error_body.dart';
 
 @RoutePage()
 // ignore: must_be_immutable
diff --git a/mobile/lib/pages/search/search_input.page.dart b/mobile/lib/pages/search/search_input.page.dart
index 47096a8f29..3bf6c39189 100644
--- a/mobile/lib/pages/search/search_input.page.dart
+++ b/mobile/lib/pages/search/search_input.page.dart
@@ -7,16 +7,16 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/models/search/search_filter.model.dart';
 import 'package:immich_mobile/providers/search/paginated_search.provider.dart';
-import 'package:immich_mobile/modules/search/ui/search_filter/camera_picker.dart';
-import 'package:immich_mobile/modules/search/ui/search_filter/display_option_picker.dart';
-import 'package:immich_mobile/modules/search/ui/search_filter/filter_bottom_sheet_scaffold.dart';
-import 'package:immich_mobile/modules/search/ui/search_filter/location_picker.dart';
-import 'package:immich_mobile/modules/search/ui/search_filter/media_type_picker.dart';
-import 'package:immich_mobile/modules/search/ui/search_filter/people_picker.dart';
-import 'package:immich_mobile/modules/search/ui/search_filter/search_filter_chip.dart';
-import 'package:immich_mobile/modules/search/ui/search_filter/search_filter_utils.dart';
+import 'package:immich_mobile/widgets/search/search_filter/camera_picker.dart';
+import 'package:immich_mobile/widgets/search/search_filter/display_option_picker.dart';
+import 'package:immich_mobile/widgets/search/search_filter/filter_bottom_sheet_scaffold.dart';
+import 'package:immich_mobile/widgets/search/search_filter/location_picker.dart';
+import 'package:immich_mobile/widgets/search/search_filter/media_type_picker.dart';
+import 'package:immich_mobile/widgets/search/search_filter/people_picker.dart';
+import 'package:immich_mobile/widgets/search/search_filter/search_filter_chip.dart';
+import 'package:immich_mobile/widgets/search/search_filter/search_filter_utils.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
-import 'package:immich_mobile/shared/ui/asset_grid/multiselect_grid.dart';
+import 'package:immich_mobile/widgets/asset_grid/multiselect_grid.dart';
 import 'package:openapi/api.dart';
 
 @RoutePage()
diff --git a/mobile/lib/pages/sharing/partner/partner.page.dart b/mobile/lib/pages/sharing/partner/partner.page.dart
index 83b5370a61..8dd31023c7 100644
--- a/mobile/lib/pages/sharing/partner/partner.page.dart
+++ b/mobile/lib/pages/sharing/partner/partner.page.dart
@@ -6,9 +6,9 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/partner.provider.dart';
 import 'package:immich_mobile/services/partner.service.dart';
 import 'package:immich_mobile/entities/user.entity.dart';
-import 'package:immich_mobile/shared/ui/confirm_dialog.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
-import 'package:immich_mobile/shared/ui/user_avatar.dart';
+import 'package:immich_mobile/widgets/common/confirm_dialog.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/user_avatar.dart';
 
 @RoutePage()
 class PartnerPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/sharing/partner/partner_detail.page.dart b/mobile/lib/pages/sharing/partner/partner_detail.page.dart
index efef6f49c3..a858320b12 100644
--- a/mobile/lib/pages/sharing/partner/partner_detail.page.dart
+++ b/mobile/lib/pages/sharing/partner/partner_detail.page.dart
@@ -6,8 +6,8 @@ import 'package:immich_mobile/providers/multiselect.provider.dart';
 import 'package:immich_mobile/providers/partner.provider.dart';
 import 'package:immich_mobile/entities/user.entity.dart';
 import 'package:immich_mobile/providers/asset.provider.dart';
-import 'package:immich_mobile/shared/ui/asset_grid/multiselect_grid.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/asset_grid/multiselect_grid.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 
 @RoutePage()
 class PartnerDetailPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/sharing/shared_link/shared_link.page.dart b/mobile/lib/pages/sharing/shared_link/shared_link.page.dart
index 572371802f..7ad9943a89 100644
--- a/mobile/lib/pages/sharing/shared_link/shared_link.page.dart
+++ b/mobile/lib/pages/sharing/shared_link/shared_link.page.dart
@@ -7,7 +7,7 @@ import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/models/shared_link/shared_link.model.dart';
 import 'package:immich_mobile/providers/shared_link.provider.dart';
-import 'package:immich_mobile/modules/shared_link/ui/shared_link_item.dart';
+import 'package:immich_mobile/widgets/shared_link/shared_link_item.dart';
 
 @RoutePage()
 class SharedLinkPage extends HookConsumerWidget {
diff --git a/mobile/lib/pages/sharing/shared_link/shared_link_edit.page.dart b/mobile/lib/pages/sharing/shared_link/shared_link_edit.page.dart
index 352bad7c8b..356bd5e945 100644
--- a/mobile/lib/pages/sharing/shared_link/shared_link_edit.page.dart
+++ b/mobile/lib/pages/sharing/shared_link/shared_link_edit.page.dart
@@ -10,7 +10,7 @@ import 'package:immich_mobile/models/shared_link/shared_link.model.dart';
 import 'package:immich_mobile/providers/shared_link.provider.dart';
 import 'package:immich_mobile/services/shared_link.service.dart';
 import 'package:immich_mobile/providers/server_info.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 import 'package:immich_mobile/utils/url_helper.dart';
 
 @RoutePage()
diff --git a/mobile/lib/pages/sharing/sharing.page.dart b/mobile/lib/pages/sharing/sharing.page.dart
index f8de408c2e..23ffbcfbfa 100644
--- a/mobile/lib/pages/sharing/sharing.page.dart
+++ b/mobile/lib/pages/sharing/sharing.page.dart
@@ -6,13 +6,13 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/album/album_sort_by_options.provider.dart';
 import 'package:immich_mobile/providers/album/shared_album.provider.dart';
-import 'package:immich_mobile/modules/album/ui/album_thumbnail_card.dart';
+import 'package:immich_mobile/widgets/album/album_thumbnail_card.dart';
 import 'package:immich_mobile/providers/partner.provider.dart';
-import 'package:immich_mobile/modules/partner/ui/partner_list.dart';
+import 'package:immich_mobile/widgets/partner/partner_list.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/providers/user.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_app_bar.dart';
-import 'package:immich_mobile/shared/ui/immich_thumbnail.dart';
+import 'package:immich_mobile/widgets/common/immich_app_bar.dart';
+import 'package:immich_mobile/widgets/common/immich_thumbnail.dart';
 
 @RoutePage()
 class SharingPage extends HookConsumerWidget {
diff --git a/mobile/lib/providers/album/album.provider.dart b/mobile/lib/providers/album/album.provider.dart
index df162d2db3..8251d5e66b 100644
--- a/mobile/lib/providers/album/album.provider.dart
+++ b/mobile/lib/providers/album/album.provider.dart
@@ -2,7 +2,7 @@ import 'dart:async';
 
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/services/album.service.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/entities/album.entity.dart';
 import 'package:immich_mobile/entities/store.entity.dart';
diff --git a/mobile/lib/providers/archive.provider.dart b/mobile/lib/providers/archive.provider.dart
index 0d51887368..ba4937bd82 100644
--- a/mobile/lib/providers/archive.provider.dart
+++ b/mobile/lib/providers/archive.provider.dart
@@ -1,5 +1,5 @@
 import 'package:hooks_riverpod/hooks_riverpod.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/db.provider.dart';
 import 'package:immich_mobile/providers/user.provider.dart';
diff --git a/mobile/lib/providers/asset.provider.dart b/mobile/lib/providers/asset.provider.dart
index 780fe3fd89..4c12ed2f10 100644
--- a/mobile/lib/providers/asset.provider.dart
+++ b/mobile/lib/providers/asset.provider.dart
@@ -7,7 +7,7 @@ import 'package:immich_mobile/entities/user.entity.dart';
 import 'package:immich_mobile/providers/db.provider.dart';
 import 'package:immich_mobile/providers/user.provider.dart';
 import 'package:immich_mobile/services/asset.service.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/services/sync.service.dart';
 import 'package:immich_mobile/services/user.service.dart';
diff --git a/mobile/lib/providers/asset_viewer/image_viewer_page_state.provider.dart b/mobile/lib/providers/asset_viewer/image_viewer_page_state.provider.dart
index 0ebde1c7a4..9463d247ab 100644
--- a/mobile/lib/providers/asset_viewer/image_viewer_page_state.provider.dart
+++ b/mobile/lib/providers/asset_viewer/image_viewer_page_state.provider.dart
@@ -8,8 +8,8 @@ import 'package:immich_mobile/models/asset_viewer/asset_viewer_page_state.model.
 import 'package:immich_mobile/services/image_viewer.service.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/services/share.service.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
-import 'package:immich_mobile/shared/ui/share_dialog.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/share_dialog.dart';
 
 class ImageViewerStateNotifier extends StateNotifier<AssetViewerPageState> {
   final ImageViewerService _imageViewerService;
diff --git a/mobile/lib/providers/asset_viewer/render_list.provider.dart b/mobile/lib/providers/asset_viewer/render_list.provider.dart
index 43a79dd049..a0b3bba210 100644
--- a/mobile/lib/providers/asset_viewer/render_list.provider.dart
+++ b/mobile/lib/providers/asset_viewer/render_list.provider.dart
@@ -1,5 +1,5 @@
 import 'package:hooks_riverpod/hooks_riverpod.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
 import 'package:immich_mobile/providers/app_settings.provider.dart';
 import 'package:immich_mobile/services/app_settings.service.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
diff --git a/mobile/lib/providers/backup/backup_verification.provider.dart b/mobile/lib/providers/backup/backup_verification.provider.dart
index 92f012e908..894b807ec8 100644
--- a/mobile/lib/providers/backup/backup_verification.provider.dart
+++ b/mobile/lib/providers/backup/backup_verification.provider.dart
@@ -6,8 +6,8 @@ import 'package:immich_mobile/providers/backup/backup.provider.dart';
 import 'package:immich_mobile/services/backup_verification.service.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/asset.provider.dart';
-import 'package:immich_mobile/shared/ui/confirm_dialog.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/confirm_dialog.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 import 'package:riverpod_annotation/riverpod_annotation.dart';
 import 'package:wakelock_plus/wakelock_plus.dart';
 
diff --git a/mobile/lib/providers/backup/manual_upload.provider.dart b/mobile/lib/providers/backup/manual_upload.provider.dart
index f10d4ca399..1de7f7a788 100644
--- a/mobile/lib/providers/backup/manual_upload.provider.dart
+++ b/mobile/lib/providers/backup/manual_upload.provider.dart
@@ -20,7 +20,7 @@ import 'package:immich_mobile/services/app_settings.service.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/app_life_cycle.provider.dart';
 import 'package:immich_mobile/services/local_notification.service.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 import 'package:immich_mobile/utils/backup_progress.dart';
 import 'package:logging/logging.dart';
 import 'package:permission_handler/permission_handler.dart';
diff --git a/mobile/lib/providers/favorite_provider.dart b/mobile/lib/providers/favorite_provider.dart
index c0314ddeb9..340fd01080 100644
--- a/mobile/lib/providers/favorite_provider.dart
+++ b/mobile/lib/providers/favorite_provider.dart
@@ -1,5 +1,5 @@
 import 'package:hooks_riverpod/hooks_riverpod.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/db.provider.dart';
 import 'package:immich_mobile/providers/user.provider.dart';
diff --git a/mobile/lib/providers/search/all_video_assets.provider.dart b/mobile/lib/providers/search/all_video_assets.provider.dart
index e69724d38b..b0daf6b984 100644
--- a/mobile/lib/providers/search/all_video_assets.provider.dart
+++ b/mobile/lib/providers/search/all_video_assets.provider.dart
@@ -1,5 +1,5 @@
 import 'package:hooks_riverpod/hooks_riverpod.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/db.provider.dart';
 import 'package:immich_mobile/utils/renderlist_generator.dart';
diff --git a/mobile/lib/providers/search/paginated_search.provider.dart b/mobile/lib/providers/search/paginated_search.provider.dart
index 3eea1e19a5..abf711f0ad 100644
--- a/mobile/lib/providers/search/paginated_search.provider.dart
+++ b/mobile/lib/providers/search/paginated_search.provider.dart
@@ -1,5 +1,5 @@
 import 'package:immich_mobile/providers/asset_viewer/render_list.provider.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
 import 'package:immich_mobile/models/search/search_filter.model.dart';
 import 'package:immich_mobile/services/search.service.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
diff --git a/mobile/lib/providers/search/people.provider.dart b/mobile/lib/providers/search/people.provider.dart
index f34b3a5e8c..753b9f19bb 100644
--- a/mobile/lib/providers/search/people.provider.dart
+++ b/mobile/lib/providers/search/people.provider.dart
@@ -1,4 +1,4 @@
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
 import 'package:immich_mobile/services/person.service.dart';
 import 'package:immich_mobile/providers/app_settings.provider.dart';
 import 'package:immich_mobile/services/app_settings.service.dart';
diff --git a/mobile/lib/providers/trash.provider.dart b/mobile/lib/providers/trash.provider.dart
index bc387cb09d..45ab1a5185 100644
--- a/mobile/lib/providers/trash.provider.dart
+++ b/mobile/lib/providers/trash.provider.dart
@@ -1,5 +1,5 @@
 import 'package:hooks_riverpod/hooks_riverpod.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
 import 'package:immich_mobile/services/trash.service.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/asset.provider.dart';
diff --git a/mobile/lib/utils/immich_loading_overlay.dart b/mobile/lib/utils/immich_loading_overlay.dart
index c600d2a724..fcc47b1542 100644
--- a/mobile/lib/utils/immich_loading_overlay.dart
+++ b/mobile/lib/utils/immich_loading_overlay.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_hooks/flutter_hooks.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
-import 'package:immich_mobile/shared/ui/delayed_loading_indicator.dart';
+import 'package:immich_mobile/widgets/common/delayed_loading_indicator.dart';
 
 final _loadingEntry = OverlayEntry(
   builder: (context) => SizedBox.square(
diff --git a/mobile/lib/modules/map/utils/map_utils.dart b/mobile/lib/utils/map_utils.dart
similarity index 98%
rename from mobile/lib/modules/map/utils/map_utils.dart
rename to mobile/lib/utils/map_utils.dart
index d11e3b22d2..33d2d3cfa0 100644
--- a/mobile/lib/modules/map/utils/map_utils.dart
+++ b/mobile/lib/utils/map_utils.dart
@@ -1,7 +1,7 @@
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:immich_mobile/models/map/map_marker.model.dart';
-import 'package:immich_mobile/shared/ui/confirm_dialog.dart';
+import 'package:immich_mobile/widgets/common/confirm_dialog.dart';
 import 'package:geolocator/geolocator.dart';
 import 'package:logging/logging.dart';
 import 'package:maplibre_gl/maplibre_gl.dart';
diff --git a/mobile/lib/utils/renderlist_generator.dart b/mobile/lib/utils/renderlist_generator.dart
index 9605d00af3..a601ef068d 100644
--- a/mobile/lib/utils/renderlist_generator.dart
+++ b/mobile/lib/utils/renderlist_generator.dart
@@ -1,5 +1,5 @@
 import 'package:hooks_riverpod/hooks_riverpod.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
 import 'package:immich_mobile/providers/app_settings.provider.dart';
 import 'package:immich_mobile/services/app_settings.service.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
diff --git a/mobile/lib/utils/selection_handlers.dart b/mobile/lib/utils/selection_handlers.dart
index 83ad4853b1..2bf0c276c7 100644
--- a/mobile/lib/utils/selection_handlers.dart
+++ b/mobile/lib/utils/selection_handlers.dart
@@ -8,10 +8,10 @@ import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/asset.provider.dart';
 import 'package:immich_mobile/services/asset.service.dart';
 import 'package:immich_mobile/services/share.service.dart';
-import 'package:immich_mobile/shared/ui/date_time_picker.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
-import 'package:immich_mobile/shared/ui/location_picker.dart';
-import 'package:immich_mobile/shared/ui/share_dialog.dart';
+import 'package:immich_mobile/widgets/common/date_time_picker.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/location_picker.dart';
+import 'package:immich_mobile/widgets/common/share_dialog.dart';
 import 'package:maplibre_gl/maplibre_gl.dart';
 
 void handleShareAssets(
diff --git a/mobile/lib/modules/activities/widgets/activity_text_field.dart b/mobile/lib/widgets/activities/activity_text_field.dart
similarity index 97%
rename from mobile/lib/modules/activities/widgets/activity_text_field.dart
rename to mobile/lib/widgets/activities/activity_text_field.dart
index 0e17d8c8ba..5ada7d795b 100644
--- a/mobile/lib/modules/activities/widgets/activity_text_field.dart
+++ b/mobile/lib/widgets/activities/activity_text_field.dart
@@ -6,7 +6,7 @@ import 'package:immich_mobile/providers/activity.provider.dart';
 import 'package:immich_mobile/providers/album/current_album.provider.dart';
 import 'package:immich_mobile/providers/asset_viewer/current_asset.provider.dart';
 import 'package:immich_mobile/providers/user.provider.dart';
-import 'package:immich_mobile/shared/ui/user_circle_avatar.dart';
+import 'package:immich_mobile/widgets/common/user_circle_avatar.dart';
 
 class ActivityTextField extends HookConsumerWidget {
   final bool isEnabled;
diff --git a/mobile/lib/modules/activities/widgets/activity_tile.dart b/mobile/lib/widgets/activities/activity_tile.dart
similarity index 98%
rename from mobile/lib/modules/activities/widgets/activity_tile.dart
rename to mobile/lib/widgets/activities/activity_tile.dart
index 1a13c5a9e1..1c89a39b46 100644
--- a/mobile/lib/modules/activities/widgets/activity_tile.dart
+++ b/mobile/lib/widgets/activities/activity_tile.dart
@@ -5,7 +5,7 @@ import 'package:immich_mobile/extensions/datetime_extensions.dart';
 import 'package:immich_mobile/models/activities/activity.model.dart';
 import 'package:immich_mobile/providers/image/immich_remote_thumbnail_provider.dart';
 import 'package:immich_mobile/providers/asset_viewer/current_asset.provider.dart';
-import 'package:immich_mobile/shared/ui/user_circle_avatar.dart';
+import 'package:immich_mobile/widgets/common/user_circle_avatar.dart';
 
 class ActivityTile extends HookConsumerWidget {
   final Activity activity;
diff --git a/mobile/lib/modules/activities/widgets/dismissible_activity.dart b/mobile/lib/widgets/activities/dismissible_activity.dart
similarity index 93%
rename from mobile/lib/modules/activities/widgets/dismissible_activity.dart
rename to mobile/lib/widgets/activities/dismissible_activity.dart
index 15e85f7144..c4c4115608 100644
--- a/mobile/lib/modules/activities/widgets/dismissible_activity.dart
+++ b/mobile/lib/widgets/activities/dismissible_activity.dart
@@ -1,6 +1,6 @@
 import 'package:flutter/material.dart';
-import 'package:immich_mobile/modules/activities/widgets/activity_tile.dart';
-import 'package:immich_mobile/shared/ui/confirm_dialog.dart';
+import 'package:immich_mobile/widgets/activities/activity_tile.dart';
+import 'package:immich_mobile/widgets/common/confirm_dialog.dart';
 
 /// Wraps an [ActivityTile] and makes it dismissible
 class DismissibleActivity extends StatelessWidget {
diff --git a/mobile/lib/modules/album/ui/add_to_album_bottom_sheet.dart b/mobile/lib/widgets/album/add_to_album_bottom_sheet.dart
similarity index 95%
rename from mobile/lib/modules/album/ui/add_to_album_bottom_sheet.dart
rename to mobile/lib/widgets/album/add_to_album_bottom_sheet.dart
index 8d7db56a7b..46fa0b1fe8 100644
--- a/mobile/lib/modules/album/ui/add_to_album_bottom_sheet.dart
+++ b/mobile/lib/widgets/album/add_to_album_bottom_sheet.dart
@@ -7,12 +7,12 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/album/album.provider.dart';
 import 'package:immich_mobile/providers/album/shared_album.provider.dart';
 import 'package:immich_mobile/services/album.service.dart';
-import 'package:immich_mobile/modules/album/ui/add_to_album_sliverlist.dart';
+import 'package:immich_mobile/widgets/album/add_to_album_sliverlist.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/album.entity.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
-import 'package:immich_mobile/shared/ui/drag_sheet.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/drag_sheet.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 
 class AddToAlbumBottomSheet extends HookConsumerWidget {
   /// The asset to add to an album
diff --git a/mobile/lib/modules/album/ui/add_to_album_sliverlist.dart b/mobile/lib/widgets/album/add_to_album_sliverlist.dart
similarity index 96%
rename from mobile/lib/modules/album/ui/add_to_album_sliverlist.dart
rename to mobile/lib/widgets/album/add_to_album_sliverlist.dart
index 2986c50ad6..6df443c795 100644
--- a/mobile/lib/modules/album/ui/add_to_album_sliverlist.dart
+++ b/mobile/lib/widgets/album/add_to_album_sliverlist.dart
@@ -2,7 +2,7 @@ import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/providers/album/album_sort_by_options.provider.dart';
-import 'package:immich_mobile/modules/album/ui/album_thumbnail_listtile.dart';
+import 'package:immich_mobile/widgets/album/album_thumbnail_listtile.dart';
 import 'package:immich_mobile/entities/album.entity.dart';
 
 class AddToAlbumSliverList extends HookConsumerWidget {
diff --git a/mobile/lib/modules/album/ui/album_action_outlined_button.dart b/mobile/lib/widgets/album/album_action_outlined_button.dart
similarity index 100%
rename from mobile/lib/modules/album/ui/album_action_outlined_button.dart
rename to mobile/lib/widgets/album/album_action_outlined_button.dart
diff --git a/mobile/lib/modules/album/ui/album_thumbnail_card.dart b/mobile/lib/widgets/album/album_thumbnail_card.dart
similarity index 98%
rename from mobile/lib/modules/album/ui/album_thumbnail_card.dart
rename to mobile/lib/widgets/album/album_thumbnail_card.dart
index 9287db9e77..737e8b383f 100644
--- a/mobile/lib/modules/album/ui/album_thumbnail_card.dart
+++ b/mobile/lib/widgets/album/album_thumbnail_card.dart
@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/entities/album.entity.dart';
 import 'package:immich_mobile/entities/store.entity.dart';
-import 'package:immich_mobile/shared/ui/immich_thumbnail.dart';
+import 'package:immich_mobile/widgets/common/immich_thumbnail.dart';
 
 class AlbumThumbnailCard extends StatelessWidget {
   final Function()? onTap;
diff --git a/mobile/lib/modules/album/ui/album_thumbnail_listtile.dart b/mobile/lib/widgets/album/album_thumbnail_listtile.dart
similarity index 100%
rename from mobile/lib/modules/album/ui/album_thumbnail_listtile.dart
rename to mobile/lib/widgets/album/album_thumbnail_listtile.dart
diff --git a/mobile/lib/modules/album/ui/album_title_text_field.dart b/mobile/lib/widgets/album/album_title_text_field.dart
similarity index 100%
rename from mobile/lib/modules/album/ui/album_title_text_field.dart
rename to mobile/lib/widgets/album/album_title_text_field.dart
diff --git a/mobile/lib/modules/album/ui/album_viewer_appbar.dart b/mobile/lib/widgets/album/album_viewer_appbar.dart
similarity index 99%
rename from mobile/lib/modules/album/ui/album_viewer_appbar.dart
rename to mobile/lib/widgets/album/album_viewer_appbar.dart
index a85674f8f7..5521f50e35 100644
--- a/mobile/lib/modules/album/ui/album_viewer_appbar.dart
+++ b/mobile/lib/widgets/album/album_viewer_appbar.dart
@@ -11,7 +11,7 @@ import 'package:immich_mobile/providers/album/shared_album.provider.dart';
 import 'package:immich_mobile/utils/immich_loading_overlay.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/album.entity.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 
 class AlbumViewerAppbar extends HookConsumerWidget
     implements PreferredSizeWidget {
diff --git a/mobile/lib/modules/album/ui/album_viewer_editable_title.dart b/mobile/lib/widgets/album/album_viewer_editable_title.dart
similarity index 100%
rename from mobile/lib/modules/album/ui/album_viewer_editable_title.dart
rename to mobile/lib/widgets/album/album_viewer_editable_title.dart
diff --git a/mobile/lib/modules/album/ui/shared_album_thumbnail_image.dart b/mobile/lib/widgets/album/shared_album_thumbnail_image.dart
similarity index 90%
rename from mobile/lib/modules/album/ui/shared_album_thumbnail_image.dart
rename to mobile/lib/widgets/album/shared_album_thumbnail_image.dart
index d6ee6beeea..e485763114 100644
--- a/mobile/lib/modules/album/ui/shared_album_thumbnail_image.dart
+++ b/mobile/lib/widgets/album/shared_album_thumbnail_image.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
-import 'package:immich_mobile/shared/ui/immich_thumbnail.dart';
+import 'package:immich_mobile/widgets/common/immich_thumbnail.dart';
 
 class SharedAlbumThumbnailImage extends HookConsumerWidget {
   final Asset asset;
diff --git a/mobile/lib/modules/home/ui/asset_grid/asset_drag_region.dart b/mobile/lib/widgets/asset_grid/asset_drag_region.dart
similarity index 100%
rename from mobile/lib/modules/home/ui/asset_grid/asset_drag_region.dart
rename to mobile/lib/widgets/asset_grid/asset_drag_region.dart
diff --git a/mobile/lib/modules/home/ui/asset_grid/asset_grid_data_structure.dart b/mobile/lib/widgets/asset_grid/asset_grid_data_structure.dart
similarity index 100%
rename from mobile/lib/modules/home/ui/asset_grid/asset_grid_data_structure.dart
rename to mobile/lib/widgets/asset_grid/asset_grid_data_structure.dart
diff --git a/mobile/lib/modules/home/ui/control_bottom_app_bar.dart b/mobile/lib/widgets/asset_grid/control_bottom_app_bar.dart
similarity index 95%
rename from mobile/lib/modules/home/ui/control_bottom_app_bar.dart
rename to mobile/lib/widgets/asset_grid/control_bottom_app_bar.dart
index 11fec2d4f6..f885e06bc3 100644
--- a/mobile/lib/modules/home/ui/control_bottom_app_bar.dart
+++ b/mobile/lib/widgets/asset_grid/control_bottom_app_bar.dart
@@ -5,12 +5,12 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/album/album.provider.dart';
 import 'package:immich_mobile/providers/album/shared_album.provider.dart';
-import 'package:immich_mobile/modules/album/ui/add_to_album_sliverlist.dart';
+import 'package:immich_mobile/widgets/album/add_to_album_sliverlist.dart';
 import 'package:immich_mobile/models/asset_selection_state.dart';
-import 'package:immich_mobile/modules/home/ui/delete_dialog.dart';
-import 'package:immich_mobile/modules/home/ui/upload_dialog.dart';
+import 'package:immich_mobile/widgets/asset_grid/delete_dialog.dart';
+import 'package:immich_mobile/widgets/asset_grid/upload_dialog.dart';
 import 'package:immich_mobile/providers/server_info.provider.dart';
-import 'package:immich_mobile/shared/ui/drag_sheet.dart';
+import 'package:immich_mobile/widgets/common/drag_sheet.dart';
 import 'package:immich_mobile/entities/album.entity.dart';
 import 'package:immich_mobile/utils/draggable_scroll_controller.dart';
 
diff --git a/mobile/lib/modules/home/ui/delete_dialog.dart b/mobile/lib/widgets/asset_grid/delete_dialog.dart
similarity index 93%
rename from mobile/lib/modules/home/ui/delete_dialog.dart
rename to mobile/lib/widgets/asset_grid/delete_dialog.dart
index 82727e254e..e61f06ca81 100644
--- a/mobile/lib/modules/home/ui/delete_dialog.dart
+++ b/mobile/lib/widgets/asset_grid/delete_dialog.dart
@@ -3,7 +3,7 @@
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
-import 'package:immich_mobile/shared/ui/confirm_dialog.dart';
+import 'package:immich_mobile/widgets/common/confirm_dialog.dart';
 
 class DeleteDialog extends ConfirmDialog {
   const DeleteDialog({super.key, String? alert, required Function onDelete})
diff --git a/mobile/lib/modules/home/ui/asset_grid/disable_multi_select_button.dart b/mobile/lib/widgets/asset_grid/disable_multi_select_button.dart
similarity index 100%
rename from mobile/lib/modules/home/ui/asset_grid/disable_multi_select_button.dart
rename to mobile/lib/widgets/asset_grid/disable_multi_select_button.dart
diff --git a/mobile/lib/modules/home/ui/draggable_scrollbar.dart b/mobile/lib/widgets/asset_grid/draggable_scrollbar.dart
similarity index 100%
rename from mobile/lib/modules/home/ui/draggable_scrollbar.dart
rename to mobile/lib/widgets/asset_grid/draggable_scrollbar.dart
diff --git a/mobile/lib/modules/home/ui/asset_grid/draggable_scrollbar_custom.dart b/mobile/lib/widgets/asset_grid/draggable_scrollbar_custom.dart
similarity index 100%
rename from mobile/lib/modules/home/ui/asset_grid/draggable_scrollbar_custom.dart
rename to mobile/lib/widgets/asset_grid/draggable_scrollbar_custom.dart
diff --git a/mobile/lib/modules/home/ui/asset_grid/group_divider_title.dart b/mobile/lib/widgets/asset_grid/group_divider_title.dart
similarity index 96%
rename from mobile/lib/modules/home/ui/asset_grid/group_divider_title.dart
rename to mobile/lib/widgets/asset_grid/group_divider_title.dart
index a2196cf763..4c1f468343 100644
--- a/mobile/lib/modules/home/ui/asset_grid/group_divider_title.dart
+++ b/mobile/lib/widgets/asset_grid/group_divider_title.dart
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
 import 'package:flutter_hooks/flutter_hooks.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
 import 'package:immich_mobile/providers/app_settings.provider.dart';
 import 'package:immich_mobile/services/app_settings.service.dart';
 import 'package:immich_mobile/providers/haptic_feedback.provider.dart';
diff --git a/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid.dart b/mobile/lib/widgets/asset_grid/immich_asset_grid.dart
similarity index 96%
rename from mobile/lib/modules/home/ui/asset_grid/immich_asset_grid.dart
rename to mobile/lib/widgets/asset_grid/immich_asset_grid.dart
index 140a3dd680..17872852e5 100644
--- a/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid.dart
+++ b/mobile/lib/widgets/asset_grid/immich_asset_grid.dart
@@ -7,8 +7,8 @@ import 'package:flutter_hooks/flutter_hooks.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
 import 'package:immich_mobile/providers/asset_viewer/render_list.provider.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/immich_asset_grid_view.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/immich_asset_grid_view.dart';
 import 'package:immich_mobile/providers/app_settings.provider.dart';
 import 'package:immich_mobile/services/app_settings.service.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
diff --git a/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid_view.dart b/mobile/lib/widgets/asset_grid/immich_asset_grid_view.dart
similarity index 98%
rename from mobile/lib/modules/home/ui/asset_grid/immich_asset_grid_view.dart
rename to mobile/lib/widgets/asset_grid/immich_asset_grid_view.dart
index c0dcafe4ae..9eebe8c1dc 100644
--- a/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid_view.dart
+++ b/mobile/lib/widgets/asset_grid/immich_asset_grid_view.dart
@@ -10,12 +10,12 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/extensions/collection_extensions.dart';
 import 'package:immich_mobile/providers/asset_viewer/scroll_notifier.provider.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_drag_region.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/thumbnail_image.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/thumbnail_placeholder.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_drag_region.dart';
+import 'package:immich_mobile/widgets/asset_grid/thumbnail_image.dart';
+import 'package:immich_mobile/widgets/asset_grid/thumbnail_placeholder.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 import 'package:fluttertoast/fluttertoast.dart';
-import 'package:immich_mobile/modules/home/ui/control_bottom_app_bar.dart';
+import 'package:immich_mobile/widgets/asset_grid/control_bottom_app_bar.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/asset_viewer/scroll_to_date_notifier.provider.dart';
diff --git a/mobile/lib/shared/ui/asset_grid/multiselect_grid.dart b/mobile/lib/widgets/asset_grid/multiselect_grid.dart
similarity index 97%
rename from mobile/lib/shared/ui/asset_grid/multiselect_grid.dart
rename to mobile/lib/widgets/asset_grid/multiselect_grid.dart
index beb5712bd2..23ee771627 100644
--- a/mobile/lib/shared/ui/asset_grid/multiselect_grid.dart
+++ b/mobile/lib/widgets/asset_grid/multiselect_grid.dart
@@ -15,16 +15,16 @@ import 'package:immich_mobile/services/asset_stack.service.dart';
 import 'package:immich_mobile/providers/backup/manual_upload.provider.dart';
 import 'package:immich_mobile/models/asset_selection_state.dart';
 import 'package:immich_mobile/providers/multiselect.provider.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/immich_asset_grid.dart';
-import 'package:immich_mobile/modules/home/ui/control_bottom_app_bar.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/immich_asset_grid.dart';
+import 'package:immich_mobile/widgets/asset_grid/control_bottom_app_bar.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/album.entity.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/asset.provider.dart';
 import 'package:immich_mobile/providers/user.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/immich_loading_indicator.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 import 'package:immich_mobile/utils/immich_loading_overlay.dart';
 import 'package:immich_mobile/utils/selection_handlers.dart';
 
diff --git a/mobile/lib/modules/home/ui/asset_grid/thumbnail_image.dart b/mobile/lib/widgets/asset_grid/thumbnail_image.dart
similarity index 99%
rename from mobile/lib/modules/home/ui/asset_grid/thumbnail_image.dart
rename to mobile/lib/widgets/asset_grid/thumbnail_image.dart
index 0a974f8dfc..04ccf41ad3 100644
--- a/mobile/lib/modules/home/ui/asset_grid/thumbnail_image.dart
+++ b/mobile/lib/widgets/asset_grid/thumbnail_image.dart
@@ -5,7 +5,7 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/haptic_feedback.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_thumbnail.dart';
+import 'package:immich_mobile/widgets/common/immich_thumbnail.dart';
 import 'package:immich_mobile/utils/storage_indicator.dart';
 import 'package:isar/isar.dart';
 
diff --git a/mobile/lib/modules/home/ui/asset_grid/thumbnail_placeholder.dart b/mobile/lib/widgets/asset_grid/thumbnail_placeholder.dart
similarity index 100%
rename from mobile/lib/modules/home/ui/asset_grid/thumbnail_placeholder.dart
rename to mobile/lib/widgets/asset_grid/thumbnail_placeholder.dart
diff --git a/mobile/lib/modules/home/ui/upload_dialog.dart b/mobile/lib/widgets/asset_grid/upload_dialog.dart
similarity index 83%
rename from mobile/lib/modules/home/ui/upload_dialog.dart
rename to mobile/lib/widgets/asset_grid/upload_dialog.dart
index 6b237ae16d..d104b25cd7 100644
--- a/mobile/lib/modules/home/ui/upload_dialog.dart
+++ b/mobile/lib/widgets/asset_grid/upload_dialog.dart
@@ -1,4 +1,4 @@
-import 'package:immich_mobile/shared/ui/confirm_dialog.dart';
+import 'package:immich_mobile/widgets/common/confirm_dialog.dart';
 
 class UploadDialog extends ConfirmDialog {
   final Function onUpload;
diff --git a/mobile/lib/modules/asset_viewer/ui/advanced_bottom_sheet.dart b/mobile/lib/widgets/asset_viewer/advanced_bottom_sheet.dart
similarity index 100%
rename from mobile/lib/modules/asset_viewer/ui/advanced_bottom_sheet.dart
rename to mobile/lib/widgets/asset_viewer/advanced_bottom_sheet.dart
diff --git a/mobile/lib/modules/asset_viewer/ui/animated_play_pause.dart b/mobile/lib/widgets/asset_viewer/animated_play_pause.dart
similarity index 100%
rename from mobile/lib/modules/asset_viewer/ui/animated_play_pause.dart
rename to mobile/lib/widgets/asset_viewer/animated_play_pause.dart
diff --git a/mobile/lib/modules/asset_viewer/ui/bottom_gallery_bar.dart b/mobile/lib/widgets/asset_viewer/bottom_gallery_bar.dart
similarity index 98%
rename from mobile/lib/modules/asset_viewer/ui/bottom_gallery_bar.dart
rename to mobile/lib/widgets/asset_viewer/bottom_gallery_bar.dart
index 9d44288157..30b880bc8b 100644
--- a/mobile/lib/modules/asset_viewer/ui/bottom_gallery_bar.dart
+++ b/mobile/lib/widgets/asset_viewer/bottom_gallery_bar.dart
@@ -10,14 +10,14 @@ import 'package:immich_mobile/providers/asset_viewer/asset_stack.provider.dart';
 import 'package:immich_mobile/providers/asset_viewer/image_viewer_page_state.provider.dart';
 import 'package:immich_mobile/providers/asset_viewer/show_controls.provider.dart';
 import 'package:immich_mobile/services/asset_stack.service.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/video_controls.dart';
-import 'package:immich_mobile/modules/home/ui/delete_dialog.dart';
+import 'package:immich_mobile/widgets/asset_viewer/video_controls.dart';
+import 'package:immich_mobile/widgets/asset_grid/delete_dialog.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/asset.provider.dart';
 import 'package:immich_mobile/providers/server_info.provider.dart';
 import 'package:immich_mobile/providers/user.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 
 class BottomGalleryBar extends ConsumerWidget {
   final Asset asset;
diff --git a/mobile/lib/modules/asset_viewer/ui/center_play_button.dart b/mobile/lib/widgets/asset_viewer/center_play_button.dart
similarity index 94%
rename from mobile/lib/modules/asset_viewer/ui/center_play_button.dart
rename to mobile/lib/widgets/asset_viewer/center_play_button.dart
index 237d09c142..6d7aead9d1 100644
--- a/mobile/lib/modules/asset_viewer/ui/center_play_button.dart
+++ b/mobile/lib/widgets/asset_viewer/center_play_button.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/animated_play_pause.dart';
+import 'package:immich_mobile/widgets/asset_viewer/animated_play_pause.dart';
 
 class CenterPlayButton extends StatelessWidget {
   const CenterPlayButton({
diff --git a/mobile/lib/modules/asset_viewer/ui/custom_video_player_controls.dart b/mobile/lib/widgets/asset_viewer/custom_video_player_controls.dart
similarity index 95%
rename from mobile/lib/modules/asset_viewer/ui/custom_video_player_controls.dart
rename to mobile/lib/widgets/asset_viewer/custom_video_player_controls.dart
index 7e7c71de60..2e1e7f8e64 100644
--- a/mobile/lib/modules/asset_viewer/ui/custom_video_player_controls.dart
+++ b/mobile/lib/widgets/asset_viewer/custom_video_player_controls.dart
@@ -4,8 +4,8 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/providers/asset_viewer/show_controls.provider.dart';
 import 'package:immich_mobile/providers/asset_viewer/video_player_controls_provider.dart';
 import 'package:immich_mobile/providers/asset_viewer/video_player_value_provider.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/center_play_button.dart';
-import 'package:immich_mobile/shared/ui/delayed_loading_indicator.dart';
+import 'package:immich_mobile/widgets/asset_viewer/center_play_button.dart';
+import 'package:immich_mobile/widgets/common/delayed_loading_indicator.dart';
 import 'package:immich_mobile/shared/ui/hooks/timer_hook.dart';
 
 class CustomVideoPlayerControls extends HookConsumerWidget {
diff --git a/mobile/lib/modules/asset_viewer/ui/description_input.dart b/mobile/lib/widgets/asset_viewer/description_input.dart
similarity index 98%
rename from mobile/lib/modules/asset_viewer/ui/description_input.dart
rename to mobile/lib/widgets/asset_viewer/description_input.dart
index 713f06da10..bd67bf1d34 100644
--- a/mobile/lib/modules/asset_viewer/ui/description_input.dart
+++ b/mobile/lib/widgets/asset_viewer/description_input.dart
@@ -6,7 +6,7 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/asset_viewer/asset_description.provider.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/user.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 import 'package:logging/logging.dart';
 
 class DescriptionInput extends HookConsumerWidget {
diff --git a/mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_bottom_sheet.dart b/mobile/lib/widgets/asset_viewer/exif_sheet/exif_bottom_sheet.dart
similarity index 92%
rename from mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_bottom_sheet.dart
rename to mobile/lib/widgets/asset_viewer/exif_sheet/exif_bottom_sheet.dart
index 34b11ebd2c..dc9002258f 100644
--- a/mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_bottom_sheet.dart
+++ b/mobile/lib/widgets/asset_viewer/exif_sheet/exif_bottom_sheet.dart
@@ -4,11 +4,11 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/asset_extensions.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/extensions/duration_extensions.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/description_input.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/exif_sheet/exif_detail.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/exif_sheet/exif_image_properties.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/exif_sheet/exif_location.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/exif_sheet/exif_people.dart';
+import 'package:immich_mobile/widgets/asset_viewer/description_input.dart';
+import 'package:immich_mobile/widgets/asset_viewer/exif_sheet/exif_detail.dart';
+import 'package:immich_mobile/widgets/asset_viewer/exif_sheet/exif_image_properties.dart';
+import 'package:immich_mobile/widgets/asset_viewer/exif_sheet/exif_location.dart';
+import 'package:immich_mobile/widgets/asset_viewer/exif_sheet/exif_people.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/entities/exif_info.entity.dart';
 import 'package:immich_mobile/providers/asset.provider.dart';
diff --git a/mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_detail.dart b/mobile/lib/widgets/asset_viewer/exif_sheet/exif_detail.dart
similarity index 95%
rename from mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_detail.dart
rename to mobile/lib/widgets/asset_viewer/exif_sheet/exif_detail.dart
index 5caa672c84..acd0d2d202 100644
--- a/mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_detail.dart
+++ b/mobile/lib/widgets/asset_viewer/exif_sheet/exif_detail.dart
@@ -1,7 +1,7 @@
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/exif_sheet/exif_image_properties.dart';
+import 'package:immich_mobile/widgets/asset_viewer/exif_sheet/exif_image_properties.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/entities/exif_info.entity.dart';
 
diff --git a/mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_image_properties.dart b/mobile/lib/widgets/asset_viewer/exif_sheet/exif_image_properties.dart
similarity index 100%
rename from mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_image_properties.dart
rename to mobile/lib/widgets/asset_viewer/exif_sheet/exif_image_properties.dart
diff --git a/mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_location.dart b/mobile/lib/widgets/asset_viewer/exif_sheet/exif_location.dart
similarity index 97%
rename from mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_location.dart
rename to mobile/lib/widgets/asset_viewer/exif_sheet/exif_location.dart
index 300b445b2a..713a75c06e 100644
--- a/mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_location.dart
+++ b/mobile/lib/widgets/asset_viewer/exif_sheet/exif_location.dart
@@ -1,7 +1,7 @@
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/exif_sheet/exif_map.dart';
+import 'package:immich_mobile/widgets/asset_viewer/exif_sheet/exif_map.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/entities/exif_info.entity.dart';
 
diff --git a/mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_map.dart b/mobile/lib/widgets/asset_viewer/exif_sheet/exif_map.dart
similarity index 97%
rename from mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_map.dart
rename to mobile/lib/widgets/asset_viewer/exif_sheet/exif_map.dart
index 5a6e4960ea..a2a78b103c 100644
--- a/mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_map.dart
+++ b/mobile/lib/widgets/asset_viewer/exif_sheet/exif_map.dart
@@ -1,7 +1,7 @@
 import 'dart:io';
 
 import 'package:flutter/material.dart';
-import 'package:immich_mobile/modules/map/widgets/map_thumbnail.dart';
+import 'package:immich_mobile/widgets/map/map_thumbnail.dart';
 import 'package:immich_mobile/entities/exif_info.entity.dart';
 import 'package:maplibre_gl/maplibre_gl.dart';
 import 'package:url_launcher/url_launcher.dart';
diff --git a/mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_people.dart b/mobile/lib/widgets/asset_viewer/exif_sheet/exif_people.dart
similarity index 95%
rename from mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_people.dart
rename to mobile/lib/widgets/asset_viewer/exif_sheet/exif_people.dart
index f59f43fee0..532a74dd2a 100644
--- a/mobile/lib/modules/asset_viewer/ui/exif_sheet/exif_people.dart
+++ b/mobile/lib/widgets/asset_viewer/exif_sheet/exif_people.dart
@@ -7,8 +7,8 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/asset_viewer/asset_people.provider.dart';
 import 'package:immich_mobile/models/search/search_curated_content.model.dart';
-import 'package:immich_mobile/modules/search/ui/curated_people_row.dart';
-import 'package:immich_mobile/modules/search/ui/person_name_edit_form.dart';
+import 'package:immich_mobile/widgets/search/curated_people_row.dart';
+import 'package:immich_mobile/widgets/search/person_name_edit_form.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 
diff --git a/mobile/lib/modules/asset_viewer/ui/gallery_app_bar.dart b/mobile/lib/widgets/asset_viewer/gallery_app_bar.dart
similarity index 93%
rename from mobile/lib/modules/asset_viewer/ui/gallery_app_bar.dart
rename to mobile/lib/widgets/asset_viewer/gallery_app_bar.dart
index b0ce21cd5a..9bd6ff1102 100644
--- a/mobile/lib/modules/asset_viewer/ui/gallery_app_bar.dart
+++ b/mobile/lib/widgets/asset_viewer/gallery_app_bar.dart
@@ -3,19 +3,19 @@ import 'package:flutter/material.dart';
 import 'package:fluttertoast/fluttertoast.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/providers/album/current_album.provider.dart';
-import 'package:immich_mobile/modules/album/ui/add_to_album_bottom_sheet.dart';
+import 'package:immich_mobile/widgets/album/add_to_album_bottom_sheet.dart';
 import 'package:immich_mobile/providers/asset_viewer/image_viewer_page_state.provider.dart';
 import 'package:immich_mobile/providers/asset_viewer/show_controls.provider.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/top_control_app_bar.dart';
+import 'package:immich_mobile/widgets/asset_viewer/top_control_app_bar.dart';
 import 'package:immich_mobile/providers/backup/manual_upload.provider.dart';
 import 'package:immich_mobile/providers/trash.provider.dart';
-import 'package:immich_mobile/modules/home/ui/upload_dialog.dart';
+import 'package:immich_mobile/widgets/asset_grid/upload_dialog.dart';
 import 'package:immich_mobile/providers/partner.provider.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/asset.provider.dart';
 import 'package:immich_mobile/providers/user.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 
 class GalleryAppBar extends ConsumerWidget {
   final Asset asset;
diff --git a/mobile/lib/modules/asset_viewer/hooks/chewiew_controller_hook.dart b/mobile/lib/widgets/asset_viewer/hooks/chewiew_controller_hook.dart
similarity index 100%
rename from mobile/lib/modules/asset_viewer/hooks/chewiew_controller_hook.dart
rename to mobile/lib/widgets/asset_viewer/hooks/chewiew_controller_hook.dart
diff --git a/mobile/lib/modules/asset_viewer/ui/top_control_app_bar.dart b/mobile/lib/widgets/asset_viewer/top_control_app_bar.dart
similarity index 100%
rename from mobile/lib/modules/asset_viewer/ui/top_control_app_bar.dart
rename to mobile/lib/widgets/asset_viewer/top_control_app_bar.dart
diff --git a/mobile/lib/modules/asset_viewer/ui/video_controls.dart b/mobile/lib/widgets/asset_viewer/video_controls.dart
similarity index 100%
rename from mobile/lib/modules/asset_viewer/ui/video_controls.dart
rename to mobile/lib/widgets/asset_viewer/video_controls.dart
diff --git a/mobile/lib/modules/asset_viewer/ui/video_player.dart b/mobile/lib/widgets/asset_viewer/video_player.dart
similarity index 89%
rename from mobile/lib/modules/asset_viewer/ui/video_player.dart
rename to mobile/lib/widgets/asset_viewer/video_player.dart
index 1f856e7d0f..56cb22ea74 100644
--- a/mobile/lib/modules/asset_viewer/ui/video_player.dart
+++ b/mobile/lib/widgets/asset_viewer/video_player.dart
@@ -1,8 +1,8 @@
 import 'package:chewie/chewie.dart';
 import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
-import 'package:immich_mobile/modules/asset_viewer/hooks/chewiew_controller_hook.dart';
-import 'package:immich_mobile/modules/asset_viewer/ui/custom_video_player_controls.dart';
+import 'package:immich_mobile/widgets/asset_viewer/hooks/chewiew_controller_hook.dart';
+import 'package:immich_mobile/widgets/asset_viewer/custom_video_player_controls.dart';
 import 'package:video_player/video_player.dart';
 
 class VideoPlayerViewer extends HookConsumerWidget {
diff --git a/mobile/lib/modules/backup/ui/album_info_card.dart b/mobile/lib/widgets/backup/album_info_card.dart
similarity index 99%
rename from mobile/lib/modules/backup/ui/album_info_card.dart
rename to mobile/lib/widgets/backup/album_info_card.dart
index 3a4c533d87..e9349bd69e 100644
--- a/mobile/lib/modules/backup/ui/album_info_card.dart
+++ b/mobile/lib/widgets/backup/album_info_card.dart
@@ -8,7 +8,7 @@ import 'package:immich_mobile/models/backup/available_album.model.dart';
 import 'package:immich_mobile/providers/backup/backup.provider.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/providers/haptic_feedback.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 
 class AlbumInfoCard extends HookConsumerWidget {
   final AvailableAlbum album;
diff --git a/mobile/lib/modules/backup/ui/album_info_list_tile.dart b/mobile/lib/widgets/backup/album_info_list_tile.dart
similarity index 98%
rename from mobile/lib/modules/backup/ui/album_info_list_tile.dart
rename to mobile/lib/widgets/backup/album_info_list_tile.dart
index 0eef22a445..2e10fe0b75 100644
--- a/mobile/lib/modules/backup/ui/album_info_list_tile.dart
+++ b/mobile/lib/widgets/backup/album_info_list_tile.dart
@@ -8,7 +8,7 @@ import 'package:immich_mobile/models/backup/available_album.model.dart';
 import 'package:immich_mobile/providers/backup/backup.provider.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/providers/haptic_feedback.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 
 class AlbumInfoListTile extends HookConsumerWidget {
   final AvailableAlbum album;
diff --git a/mobile/lib/modules/backup/ui/backup_info_card.dart b/mobile/lib/widgets/backup/backup_info_card.dart
similarity index 100%
rename from mobile/lib/modules/backup/ui/backup_info_card.dart
rename to mobile/lib/widgets/backup/backup_info_card.dart
diff --git a/mobile/lib/modules/backup/ui/current_backup_asset_info_box.dart b/mobile/lib/widgets/backup/current_backup_asset_info_box.dart
similarity index 100%
rename from mobile/lib/modules/backup/ui/current_backup_asset_info_box.dart
rename to mobile/lib/widgets/backup/current_backup_asset_info_box.dart
diff --git a/mobile/lib/modules/backup/ui/ios_debug_info_tile.dart b/mobile/lib/widgets/backup/ios_debug_info_tile.dart
similarity index 100%
rename from mobile/lib/modules/backup/ui/ios_debug_info_tile.dart
rename to mobile/lib/widgets/backup/ios_debug_info_tile.dart
diff --git a/mobile/lib/shared/ui/app_bar_dialog/app_bar_dialog.dart b/mobile/lib/widgets/common/app_bar_dialog/app_bar_dialog.dart
similarity index 97%
rename from mobile/lib/shared/ui/app_bar_dialog/app_bar_dialog.dart
rename to mobile/lib/widgets/common/app_bar_dialog/app_bar_dialog.dart
index a8d121d76f..75d3966b97 100644
--- a/mobile/lib/shared/ui/app_bar_dialog/app_bar_dialog.dart
+++ b/mobile/lib/widgets/common/app_bar_dialog/app_bar_dialog.dart
@@ -12,9 +12,9 @@ import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/providers/asset.provider.dart';
 import 'package:immich_mobile/providers/user.provider.dart';
 import 'package:immich_mobile/providers/websocket.provider.dart';
-import 'package:immich_mobile/shared/ui/app_bar_dialog/app_bar_profile_info.dart';
-import 'package:immich_mobile/shared/ui/app_bar_dialog/app_bar_server_info.dart';
-import 'package:immich_mobile/shared/ui/confirm_dialog.dart';
+import 'package:immich_mobile/widgets/common/app_bar_dialog/app_bar_profile_info.dart';
+import 'package:immich_mobile/widgets/common/app_bar_dialog/app_bar_server_info.dart';
+import 'package:immich_mobile/widgets/common/confirm_dialog.dart';
 import 'package:immich_mobile/utils/bytes_units.dart';
 import 'package:url_launcher/url_launcher.dart';
 
diff --git a/mobile/lib/shared/ui/app_bar_dialog/app_bar_profile_info.dart b/mobile/lib/widgets/common/app_bar_dialog/app_bar_profile_info.dart
similarity index 96%
rename from mobile/lib/shared/ui/app_bar_dialog/app_bar_profile_info.dart
rename to mobile/lib/widgets/common/app_bar_dialog/app_bar_profile_info.dart
index 6d390f8fc0..5e768f3241 100644
--- a/mobile/lib/shared/ui/app_bar_dialog/app_bar_profile_info.dart
+++ b/mobile/lib/widgets/common/app_bar_dialog/app_bar_profile_info.dart
@@ -5,10 +5,10 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/upload_profile_image.provider.dart';
 import 'package:immich_mobile/entities/store.entity.dart';
 import 'package:immich_mobile/providers/user.provider.dart';
-import 'package:immich_mobile/shared/ui/user_circle_avatar.dart';
+import 'package:immich_mobile/widgets/common/user_circle_avatar.dart';
 import 'package:immich_mobile/models/authentication/authentication_state.model.dart';
 import 'package:immich_mobile/providers/authentication.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
+import 'package:immich_mobile/widgets/common/immich_loading_indicator.dart';
 
 class AppBarProfileInfoBox extends HookConsumerWidget {
   const AppBarProfileInfoBox({
diff --git a/mobile/lib/shared/ui/app_bar_dialog/app_bar_server_info.dart b/mobile/lib/widgets/common/app_bar_dialog/app_bar_server_info.dart
similarity index 100%
rename from mobile/lib/shared/ui/app_bar_dialog/app_bar_server_info.dart
rename to mobile/lib/widgets/common/app_bar_dialog/app_bar_server_info.dart
diff --git a/mobile/lib/shared/ui/confirm_dialog.dart b/mobile/lib/widgets/common/confirm_dialog.dart
similarity index 100%
rename from mobile/lib/shared/ui/confirm_dialog.dart
rename to mobile/lib/widgets/common/confirm_dialog.dart
diff --git a/mobile/lib/shared/ui/date_time_picker.dart b/mobile/lib/widgets/common/date_time_picker.dart
similarity index 100%
rename from mobile/lib/shared/ui/date_time_picker.dart
rename to mobile/lib/widgets/common/date_time_picker.dart
diff --git a/mobile/lib/shared/ui/delayed_loading_indicator.dart b/mobile/lib/widgets/common/delayed_loading_indicator.dart
similarity index 93%
rename from mobile/lib/shared/ui/delayed_loading_indicator.dart
rename to mobile/lib/widgets/common/delayed_loading_indicator.dart
index e009b660c9..e54762bb9f 100644
--- a/mobile/lib/shared/ui/delayed_loading_indicator.dart
+++ b/mobile/lib/widgets/common/delayed_loading_indicator.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
+import 'package:immich_mobile/widgets/common/immich_loading_indicator.dart';
 
 class DelayedLoadingIndicator extends StatelessWidget {
   /// The delay to avoid showing the loading indicator
diff --git a/mobile/lib/shared/ui/drag_sheet.dart b/mobile/lib/widgets/common/drag_sheet.dart
similarity index 100%
rename from mobile/lib/shared/ui/drag_sheet.dart
rename to mobile/lib/widgets/common/drag_sheet.dart
diff --git a/mobile/lib/shared/ui/fade_in_placeholder_image.dart b/mobile/lib/widgets/common/fade_in_placeholder_image.dart
similarity index 91%
rename from mobile/lib/shared/ui/fade_in_placeholder_image.dart
rename to mobile/lib/widgets/common/fade_in_placeholder_image.dart
index e0620ea4f0..2be32fa8ba 100644
--- a/mobile/lib/shared/ui/fade_in_placeholder_image.dart
+++ b/mobile/lib/widgets/common/fade_in_placeholder_image.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import 'package:immich_mobile/shared/ui/transparent_image.dart';
+import 'package:immich_mobile/widgets/common/transparent_image.dart';
 
 class FadeInPlaceholderImage extends StatelessWidget {
   final Widget placeholder;
diff --git a/mobile/lib/shared/ui/immich_app_bar.dart b/mobile/lib/widgets/common/immich_app_bar.dart
similarity index 97%
rename from mobile/lib/shared/ui/immich_app_bar.dart
rename to mobile/lib/widgets/common/immich_app_bar.dart
index e3e5926f68..a3b3a19f34 100644
--- a/mobile/lib/shared/ui/immich_app_bar.dart
+++ b/mobile/lib/widgets/common/immich_app_bar.dart
@@ -6,8 +6,8 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/entities/store.entity.dart';
 import 'package:immich_mobile/providers/immich_logo_provider.dart';
-import 'package:immich_mobile/shared/ui/app_bar_dialog/app_bar_dialog.dart';
-import 'package:immich_mobile/shared/ui/user_circle_avatar.dart';
+import 'package:immich_mobile/widgets/common/app_bar_dialog/app_bar_dialog.dart';
+import 'package:immich_mobile/widgets/common/user_circle_avatar.dart';
 
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/models/backup/backup_state.model.dart';
diff --git a/mobile/lib/shared/ui/immich_image.dart b/mobile/lib/widgets/common/immich_image.dart
similarity index 97%
rename from mobile/lib/shared/ui/immich_image.dart
rename to mobile/lib/widgets/common/immich_image.dart
index e4e21ea9b8..5946dee453 100644
--- a/mobile/lib/shared/ui/immich_image.dart
+++ b/mobile/lib/widgets/common/immich_image.dart
@@ -3,7 +3,7 @@ import 'package:flutter/services.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/image/immich_local_image_provider.dart';
 import 'package:immich_mobile/providers/image/immich_remote_image_provider.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/thumbnail_placeholder.dart';
+import 'package:immich_mobile/widgets/asset_grid/thumbnail_placeholder.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/entities/store.entity.dart';
 import 'package:octo_image/octo_image.dart';
diff --git a/mobile/lib/shared/ui/immich_loading_indicator.dart b/mobile/lib/widgets/common/immich_loading_indicator.dart
similarity index 100%
rename from mobile/lib/shared/ui/immich_loading_indicator.dart
rename to mobile/lib/widgets/common/immich_loading_indicator.dart
diff --git a/mobile/lib/shared/ui/immich_logo.dart b/mobile/lib/widgets/common/immich_logo.dart
similarity index 100%
rename from mobile/lib/shared/ui/immich_logo.dart
rename to mobile/lib/widgets/common/immich_logo.dart
diff --git a/mobile/lib/shared/ui/immich_thumbnail.dart b/mobile/lib/widgets/common/immich_thumbnail.dart
similarity index 94%
rename from mobile/lib/shared/ui/immich_thumbnail.dart
rename to mobile/lib/widgets/common/immich_thumbnail.dart
index d258d77bf2..0f15c0a11f 100644
--- a/mobile/lib/shared/ui/immich_thumbnail.dart
+++ b/mobile/lib/widgets/common/immich_thumbnail.dart
@@ -6,8 +6,8 @@ import 'package:immich_mobile/providers/image/immich_local_thumbnail_provider.da
 import 'package:immich_mobile/providers/image/immich_remote_thumbnail_provider.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/shared/ui/hooks/blurhash_hook.dart';
-import 'package:immich_mobile/shared/ui/immich_image.dart';
-import 'package:immich_mobile/shared/ui/thumbhash_placeholder.dart';
+import 'package:immich_mobile/widgets/common/immich_image.dart';
+import 'package:immich_mobile/widgets/common/thumbhash_placeholder.dart';
 import 'package:octo_image/octo_image.dart';
 
 class ImmichThumbnail extends HookWidget {
diff --git a/mobile/lib/shared/ui/immich_title_text.dart b/mobile/lib/widgets/common/immich_title_text.dart
similarity index 100%
rename from mobile/lib/shared/ui/immich_title_text.dart
rename to mobile/lib/widgets/common/immich_title_text.dart
diff --git a/mobile/lib/shared/ui/immich_toast.dart b/mobile/lib/widgets/common/immich_toast.dart
similarity index 100%
rename from mobile/lib/shared/ui/immich_toast.dart
rename to mobile/lib/widgets/common/immich_toast.dart
diff --git a/mobile/lib/shared/ui/location_picker.dart b/mobile/lib/widgets/common/location_picker.dart
similarity index 99%
rename from mobile/lib/shared/ui/location_picker.dart
rename to mobile/lib/widgets/common/location_picker.dart
index ed68c05b24..425bdb15bf 100644
--- a/mobile/lib/shared/ui/location_picker.dart
+++ b/mobile/lib/widgets/common/location_picker.dart
@@ -5,7 +5,7 @@ import 'package:flutter/services.dart';
 import 'package:flutter_hooks/flutter_hooks.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/extensions/string_extensions.dart';
-import 'package:immich_mobile/modules/map/widgets/map_thumbnail.dart';
+import 'package:immich_mobile/widgets/map/map_thumbnail.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:maplibre_gl/maplibre_gl.dart';
 
diff --git a/mobile/lib/shared/ui/scaffold_error_body.dart b/mobile/lib/widgets/common/scaffold_error_body.dart
similarity index 100%
rename from mobile/lib/shared/ui/scaffold_error_body.dart
rename to mobile/lib/widgets/common/scaffold_error_body.dart
diff --git a/mobile/lib/shared/ui/share_dialog.dart b/mobile/lib/widgets/common/share_dialog.dart
similarity index 100%
rename from mobile/lib/shared/ui/share_dialog.dart
rename to mobile/lib/widgets/common/share_dialog.dart
diff --git a/mobile/lib/shared/ui/thumbhash_placeholder.dart b/mobile/lib/widgets/common/thumbhash_placeholder.dart
similarity index 88%
rename from mobile/lib/shared/ui/thumbhash_placeholder.dart
rename to mobile/lib/widgets/common/thumbhash_placeholder.dart
index 0ec64d3760..1f303c67c8 100644
--- a/mobile/lib/shared/ui/thumbhash_placeholder.dart
+++ b/mobile/lib/widgets/common/thumbhash_placeholder.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/thumbnail_placeholder.dart';
-import 'package:immich_mobile/shared/ui/fade_in_placeholder_image.dart';
+import 'package:immich_mobile/widgets/asset_grid/thumbnail_placeholder.dart';
+import 'package:immich_mobile/widgets/common/fade_in_placeholder_image.dart';
 import 'package:octo_image/octo_image.dart';
 
 /// Simple set to show [OctoPlaceholder.circularProgressIndicator] as
diff --git a/mobile/lib/shared/ui/transparent_image.dart b/mobile/lib/widgets/common/transparent_image.dart
similarity index 100%
rename from mobile/lib/shared/ui/transparent_image.dart
rename to mobile/lib/widgets/common/transparent_image.dart
diff --git a/mobile/lib/shared/ui/user_avatar.dart b/mobile/lib/widgets/common/user_avatar.dart
similarity index 100%
rename from mobile/lib/shared/ui/user_avatar.dart
rename to mobile/lib/widgets/common/user_avatar.dart
diff --git a/mobile/lib/shared/ui/user_circle_avatar.dart b/mobile/lib/widgets/common/user_circle_avatar.dart
similarity index 96%
rename from mobile/lib/shared/ui/user_circle_avatar.dart
rename to mobile/lib/widgets/common/user_circle_avatar.dart
index 4656271741..1f8529a80a 100644
--- a/mobile/lib/shared/ui/user_circle_avatar.dart
+++ b/mobile/lib/widgets/common/user_circle_avatar.dart
@@ -5,7 +5,7 @@ import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/entities/store.entity.dart';
 import 'package:immich_mobile/entities/user.entity.dart';
-import 'package:immich_mobile/shared/ui/transparent_image.dart';
+import 'package:immich_mobile/widgets/common/transparent_image.dart';
 
 // ignore: must_be_immutable
 class UserCircleAvatar extends ConsumerWidget {
diff --git a/mobile/lib/modules/login/ui/change_password_form.dart b/mobile/lib/widgets/forms/change_password_form.dart
similarity index 99%
rename from mobile/lib/modules/login/ui/change_password_form.dart
rename to mobile/lib/widgets/forms/change_password_form.dart
index 87f7cab886..0d1ac539dc 100644
--- a/mobile/lib/modules/login/ui/change_password_form.dart
+++ b/mobile/lib/widgets/forms/change_password_form.dart
@@ -10,7 +10,7 @@ import 'package:immich_mobile/providers/backup/manual_upload.provider.dart';
 import 'package:immich_mobile/providers/authentication.provider.dart';
 import 'package:immich_mobile/providers/asset.provider.dart';
 import 'package:immich_mobile/providers/websocket.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 
 class ChangePasswordForm extends HookConsumerWidget {
   const ChangePasswordForm({super.key});
diff --git a/mobile/lib/modules/login/ui/login_form.dart b/mobile/lib/widgets/forms/login_form.dart
similarity index 99%
rename from mobile/lib/modules/login/ui/login_form.dart
rename to mobile/lib/widgets/forms/login_form.dart
index 6ac3156bfc..854121a9c2 100644
--- a/mobile/lib/modules/login/ui/login_form.dart
+++ b/mobile/lib/widgets/forms/login_form.dart
@@ -15,9 +15,9 @@ import 'package:immich_mobile/providers/asset.provider.dart';
 import 'package:immich_mobile/providers/authentication.provider.dart';
 import 'package:immich_mobile/providers/backup/backup.provider.dart';
 import 'package:immich_mobile/providers/server_info.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_logo.dart';
-import 'package:immich_mobile/shared/ui/immich_title_text.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/immich_logo.dart';
+import 'package:immich_mobile/widgets/common/immich_title_text.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 import 'package:immich_mobile/utils/url_helper.dart';
 import 'package:openapi/api.dart';
 import 'package:permission_handler/permission_handler.dart';
diff --git a/mobile/lib/modules/map/widgets/map_app_bar.dart b/mobile/lib/widgets/map/map_app_bar.dart
similarity index 98%
rename from mobile/lib/modules/map/widgets/map_app_bar.dart
rename to mobile/lib/widgets/map/map_app_bar.dart
index dbce81895b..b9d11b0996 100644
--- a/mobile/lib/modules/map/widgets/map_app_bar.dart
+++ b/mobile/lib/widgets/map/map_app_bar.dart
@@ -6,7 +6,7 @@ import 'package:flutter_hooks/flutter_hooks.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/map/map_state.provider.dart';
-import 'package:immich_mobile/modules/map/widgets/map_settings_sheet.dart';
+import 'package:immich_mobile/widgets/map/map_settings_sheet.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/utils/immich_loading_overlay.dart';
 import 'package:immich_mobile/utils/selection_handlers.dart';
diff --git a/mobile/lib/modules/map/widgets/map_asset_grid.dart b/mobile/lib/widgets/map/map_asset_grid.dart
similarity index 97%
rename from mobile/lib/modules/map/widgets/map_asset_grid.dart
rename to mobile/lib/widgets/map/map_asset_grid.dart
index ac2fdc6a17..7205feefa4 100644
--- a/mobile/lib/modules/map/widgets/map_asset_grid.dart
+++ b/mobile/lib/widgets/map/map_asset_grid.dart
@@ -7,12 +7,12 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/extensions/collection_extensions.dart';
 import 'package:immich_mobile/providers/asset_viewer/render_list.provider.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/immich_asset_grid.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/immich_asset_grid.dart';
 import 'package:immich_mobile/models/map/map_event.model.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/providers/db.provider.dart';
-import 'package:immich_mobile/shared/ui/drag_sheet.dart';
+import 'package:immich_mobile/widgets/common/drag_sheet.dart';
 import 'package:immich_mobile/utils/color_filter_generator.dart';
 import 'package:immich_mobile/utils/throttle.dart';
 import 'package:logging/logging.dart';
diff --git a/mobile/lib/modules/map/widgets/map_bottom_sheet.dart b/mobile/lib/widgets/map/map_bottom_sheet.dart
similarity index 97%
rename from mobile/lib/modules/map/widgets/map_bottom_sheet.dart
rename to mobile/lib/widgets/map/map_bottom_sheet.dart
index ca35115162..d52a426469 100644
--- a/mobile/lib/modules/map/widgets/map_bottom_sheet.dart
+++ b/mobile/lib/widgets/map/map_bottom_sheet.dart
@@ -3,7 +3,7 @@ import 'package:flutter_hooks/flutter_hooks.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/models/map/map_event.model.dart';
-import 'package:immich_mobile/modules/map/widgets/map_asset_grid.dart';
+import 'package:immich_mobile/widgets/map/map_asset_grid.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/utils/draggable_scroll_controller.dart';
 
diff --git a/mobile/lib/modules/map/widgets/map_settings/map_settings_list_tile.dart b/mobile/lib/widgets/map/map_settings/map_settings_list_tile.dart
similarity index 100%
rename from mobile/lib/modules/map/widgets/map_settings/map_settings_list_tile.dart
rename to mobile/lib/widgets/map/map_settings/map_settings_list_tile.dart
diff --git a/mobile/lib/modules/map/widgets/map_settings/map_settings_time_dropdown.dart b/mobile/lib/widgets/map/map_settings/map_settings_time_dropdown.dart
similarity index 100%
rename from mobile/lib/modules/map/widgets/map_settings/map_settings_time_dropdown.dart
rename to mobile/lib/widgets/map/map_settings/map_settings_time_dropdown.dart
diff --git a/mobile/lib/modules/map/widgets/map_settings/map_theme_picker.dart b/mobile/lib/widgets/map/map_settings/map_theme_picker.dart
similarity index 97%
rename from mobile/lib/modules/map/widgets/map_settings/map_theme_picker.dart
rename to mobile/lib/widgets/map/map_settings/map_theme_picker.dart
index fed119c97e..19298df076 100644
--- a/mobile/lib/modules/map/widgets/map_settings/map_theme_picker.dart
+++ b/mobile/lib/widgets/map/map_settings/map_theme_picker.dart
@@ -1,7 +1,7 @@
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
-import 'package:immich_mobile/modules/map/widgets/map_thumbnail.dart';
+import 'package:immich_mobile/widgets/map/map_thumbnail.dart';
 import 'package:maplibre_gl/maplibre_gl.dart';
 
 class MapThemePicker extends StatelessWidget {
diff --git a/mobile/lib/modules/map/widgets/map_settings_sheet.dart b/mobile/lib/widgets/map/map_settings_sheet.dart
similarity index 89%
rename from mobile/lib/modules/map/widgets/map_settings_sheet.dart
rename to mobile/lib/widgets/map/map_settings_sheet.dart
index 76a2b1ce64..78d8aec75f 100644
--- a/mobile/lib/modules/map/widgets/map_settings_sheet.dart
+++ b/mobile/lib/widgets/map/map_settings_sheet.dart
@@ -1,9 +1,9 @@
 import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/providers/map/map_state.provider.dart';
-import 'package:immich_mobile/modules/map/widgets/map_settings/map_settings_list_tile.dart';
-import 'package:immich_mobile/modules/map/widgets/map_settings/map_settings_time_dropdown.dart';
-import 'package:immich_mobile/modules/map/widgets/map_settings/map_theme_picker.dart';
+import 'package:immich_mobile/widgets/map/map_settings/map_settings_list_tile.dart';
+import 'package:immich_mobile/widgets/map/map_settings/map_settings_time_dropdown.dart';
+import 'package:immich_mobile/widgets/map/map_settings/map_theme_picker.dart';
 
 class MapSettingsSheet extends HookConsumerWidget {
   const MapSettingsSheet({super.key});
diff --git a/mobile/lib/modules/map/widgets/map_theme_override.dart b/mobile/lib/widgets/map/map_theme_override.dart
similarity index 100%
rename from mobile/lib/modules/map/widgets/map_theme_override.dart
rename to mobile/lib/widgets/map/map_theme_override.dart
diff --git a/mobile/lib/modules/map/widgets/map_thumbnail.dart b/mobile/lib/widgets/map/map_thumbnail.dart
similarity index 95%
rename from mobile/lib/modules/map/widgets/map_thumbnail.dart
rename to mobile/lib/widgets/map/map_thumbnail.dart
index b162d2896c..d02c016791 100644
--- a/mobile/lib/modules/map/widgets/map_thumbnail.dart
+++ b/mobile/lib/widgets/map/map_thumbnail.dart
@@ -5,8 +5,8 @@ import 'package:flutter_hooks/flutter_hooks.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
 import 'package:immich_mobile/extensions/maplibrecontroller_extensions.dart';
-import 'package:immich_mobile/modules/map/widgets/map_theme_override.dart';
-import 'package:immich_mobile/modules/map/widgets/positioned_asset_marker_icon.dart';
+import 'package:immich_mobile/widgets/map/map_theme_override.dart';
+import 'package:immich_mobile/widgets/map/positioned_asset_marker_icon.dart';
 import 'package:maplibre_gl/maplibre_gl.dart';
 
 /// A non-interactive thumbnail of a map in the given coordinates with optional markers
diff --git a/mobile/lib/modules/map/widgets/positioned_asset_marker_icon.dart b/mobile/lib/widgets/map/positioned_asset_marker_icon.dart
similarity index 100%
rename from mobile/lib/modules/map/widgets/positioned_asset_marker_icon.dart
rename to mobile/lib/widgets/map/positioned_asset_marker_icon.dart
diff --git a/mobile/lib/modules/memories/ui/memory_bottom_info.dart b/mobile/lib/widgets/memories/memory_bottom_info.dart
similarity index 100%
rename from mobile/lib/modules/memories/ui/memory_bottom_info.dart
rename to mobile/lib/widgets/memories/memory_bottom_info.dart
diff --git a/mobile/lib/modules/memories/ui/memory_card.dart b/mobile/lib/widgets/memories/memory_card.dart
similarity index 98%
rename from mobile/lib/modules/memories/ui/memory_card.dart
rename to mobile/lib/widgets/memories/memory_card.dart
index bc4f3e230d..df64b2fddb 100644
--- a/mobile/lib/modules/memories/ui/memory_card.dart
+++ b/mobile/lib/widgets/memories/memory_card.dart
@@ -6,7 +6,7 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/pages/common/video_viewer.page.dart';
 import 'package:immich_mobile/shared/ui/hooks/blurhash_hook.dart';
-import 'package:immich_mobile/shared/ui/immich_image.dart';
+import 'package:immich_mobile/widgets/common/immich_image.dart';
 
 class MemoryCard extends StatelessWidget {
   final Asset asset;
diff --git a/mobile/lib/modules/memories/ui/memory_epilogue.dart b/mobile/lib/widgets/memories/memory_epilogue.dart
similarity index 100%
rename from mobile/lib/modules/memories/ui/memory_epilogue.dart
rename to mobile/lib/widgets/memories/memory_epilogue.dart
diff --git a/mobile/lib/modules/memories/ui/memory_lane.dart b/mobile/lib/widgets/memories/memory_lane.dart
similarity index 96%
rename from mobile/lib/modules/memories/ui/memory_lane.dart
rename to mobile/lib/widgets/memories/memory_lane.dart
index 94b11793b6..4d4fa8c4e0 100644
--- a/mobile/lib/modules/memories/ui/memory_lane.dart
+++ b/mobile/lib/widgets/memories/memory_lane.dart
@@ -1,11 +1,11 @@
 import 'package:auto_route/auto_route.dart';
 import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/thumbnail_placeholder.dart';
+import 'package:immich_mobile/widgets/asset_grid/thumbnail_placeholder.dart';
 import 'package:immich_mobile/providers/memory.provider.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/providers/haptic_feedback.provider.dart';
-import 'package:immich_mobile/shared/ui/immich_image.dart';
+import 'package:immich_mobile/widgets/common/immich_image.dart';
 
 class MemoryLane extends HookConsumerWidget {
   const MemoryLane({super.key});
diff --git a/mobile/lib/modules/memories/ui/memory_progress_indicator.dart b/mobile/lib/widgets/memories/memory_progress_indicator.dart
similarity index 100%
rename from mobile/lib/modules/memories/ui/memory_progress_indicator.dart
rename to mobile/lib/widgets/memories/memory_progress_indicator.dart
diff --git a/mobile/lib/modules/partner/ui/partner_list.dart b/mobile/lib/widgets/partner/partner_list.dart
similarity index 95%
rename from mobile/lib/modules/partner/ui/partner_list.dart
rename to mobile/lib/widgets/partner/partner_list.dart
index e6c8ab82d5..53a27c48ab 100644
--- a/mobile/lib/modules/partner/ui/partner_list.dart
+++ b/mobile/lib/widgets/partner/partner_list.dart
@@ -5,7 +5,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/user.entity.dart';
-import 'package:immich_mobile/shared/ui/user_avatar.dart';
+import 'package:immich_mobile/widgets/common/user_avatar.dart';
 
 class PartnerList extends HookConsumerWidget {
   const PartnerList({super.key, required this.partner});
diff --git a/mobile/lib/shared/ui/photo_view/photo_view.dart b/mobile/lib/widgets/photo_view/photo_view.dart
similarity index 97%
rename from mobile/lib/shared/ui/photo_view/photo_view.dart
rename to mobile/lib/widgets/photo_view/photo_view.dart
index 3d9de54793..55be81a5b3 100644
--- a/mobile/lib/shared/ui/photo_view/photo_view.dart
+++ b/mobile/lib/widgets/photo_view/photo_view.dart
@@ -2,13 +2,13 @@ library photo_view;
 
 import 'package:flutter/material.dart';
 
-import 'package:immich_mobile/shared/ui/photo_view/src/controller/photo_view_controller.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/controller/photo_view_scalestate_controller.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/core/photo_view_core.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/photo_view_computed_scale.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/photo_view_scale_state.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/photo_view_wrappers.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/utils/photo_view_hero_attributes.dart';
+import 'package:immich_mobile/widgets/photo_view/src/controller/photo_view_controller.dart';
+import 'package:immich_mobile/widgets/photo_view/src/controller/photo_view_scalestate_controller.dart';
+import 'package:immich_mobile/widgets/photo_view/src/core/photo_view_core.dart';
+import 'package:immich_mobile/widgets/photo_view/src/photo_view_computed_scale.dart';
+import 'package:immich_mobile/widgets/photo_view/src/photo_view_scale_state.dart';
+import 'package:immich_mobile/widgets/photo_view/src/photo_view_wrappers.dart';
+import 'package:immich_mobile/widgets/photo_view/src/utils/photo_view_hero_attributes.dart';
 
 export 'src/controller/photo_view_controller.dart';
 export 'src/controller/photo_view_scalestate_controller.dart';
diff --git a/mobile/lib/shared/ui/photo_view/photo_view_gallery.dart b/mobile/lib/widgets/photo_view/photo_view_gallery.dart
similarity index 96%
rename from mobile/lib/shared/ui/photo_view/photo_view_gallery.dart
rename to mobile/lib/widgets/photo_view/photo_view_gallery.dart
index 48b2d80779..9594912078 100644
--- a/mobile/lib/shared/ui/photo_view/photo_view_gallery.dart
+++ b/mobile/lib/widgets/photo_view/photo_view_gallery.dart
@@ -2,7 +2,7 @@ library photo_view_gallery;
 
 import 'package:flutter/material.dart';
 import 'package:flutter/widgets.dart';
-import 'package:immich_mobile/shared/ui/photo_view/photo_view.dart'
+import 'package:immich_mobile/widgets/photo_view/photo_view.dart'
     show
         LoadingBuilder,
         PhotoView,
@@ -15,11 +15,11 @@ import 'package:immich_mobile/shared/ui/photo_view/photo_view.dart'
         PhotoViewImageLongPressStartCallback,
         ScaleStateCycle;
 
-import 'package:immich_mobile/shared/ui/photo_view/src/controller/photo_view_controller.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/controller/photo_view_scalestate_controller.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/core/photo_view_gesture_detector.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/photo_view_scale_state.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/utils/photo_view_hero_attributes.dart';
+import 'package:immich_mobile/widgets/photo_view/src/controller/photo_view_controller.dart';
+import 'package:immich_mobile/widgets/photo_view/src/controller/photo_view_scalestate_controller.dart';
+import 'package:immich_mobile/widgets/photo_view/src/core/photo_view_gesture_detector.dart';
+import 'package:immich_mobile/widgets/photo_view/src/photo_view_scale_state.dart';
+import 'package:immich_mobile/widgets/photo_view/src/utils/photo_view_hero_attributes.dart';
 
 /// A type definition for a [Function] that receives a index after a page change in [PhotoViewGallery]
 typedef PhotoViewGalleryPageChangedCallback = void Function(int index);
diff --git a/mobile/lib/shared/ui/photo_view/src/controller/photo_view_controller.dart b/mobile/lib/widgets/photo_view/src/controller/photo_view_controller.dart
similarity index 98%
rename from mobile/lib/shared/ui/photo_view/src/controller/photo_view_controller.dart
rename to mobile/lib/widgets/photo_view/src/controller/photo_view_controller.dart
index 40e707351a..e26708bb41 100644
--- a/mobile/lib/shared/ui/photo_view/src/controller/photo_view_controller.dart
+++ b/mobile/lib/widgets/photo_view/src/controller/photo_view_controller.dart
@@ -1,7 +1,7 @@
 import 'dart:async';
 
 import 'package:flutter/widgets.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/utils/ignorable_change_notifier.dart';
+import 'package:immich_mobile/widgets/photo_view/src/utils/ignorable_change_notifier.dart';
 
 /// The interface in which controllers will be implemented.
 ///
diff --git a/mobile/lib/shared/ui/photo_view/src/controller/photo_view_controller_delegate.dart b/mobile/lib/widgets/photo_view/src/controller/photo_view_controller_delegate.dart
similarity index 96%
rename from mobile/lib/shared/ui/photo_view/src/controller/photo_view_controller_delegate.dart
rename to mobile/lib/widgets/photo_view/src/controller/photo_view_controller_delegate.dart
index 6be06a4a39..968ac652e7 100644
--- a/mobile/lib/shared/ui/photo_view/src/controller/photo_view_controller_delegate.dart
+++ b/mobile/lib/widgets/photo_view/src/controller/photo_view_controller_delegate.dart
@@ -1,12 +1,12 @@
 import 'package:flutter/widgets.dart';
-import 'package:immich_mobile/shared/ui/photo_view/photo_view.dart'
+import 'package:immich_mobile/widgets/photo_view/photo_view.dart'
     show
         PhotoViewControllerBase,
         PhotoViewScaleState,
         PhotoViewScaleStateController,
         ScaleStateCycle;
-import 'package:immich_mobile/shared/ui/photo_view/src/core/photo_view_core.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/utils/photo_view_utils.dart';
+import 'package:immich_mobile/widgets/photo_view/src/core/photo_view_core.dart';
+import 'package:immich_mobile/widgets/photo_view/src/utils/photo_view_utils.dart';
 
 /// A  class to hold internal layout logic to sync both controller states
 ///
diff --git a/mobile/lib/shared/ui/photo_view/src/controller/photo_view_scalestate_controller.dart b/mobile/lib/widgets/photo_view/src/controller/photo_view_scalestate_controller.dart
similarity index 94%
rename from mobile/lib/shared/ui/photo_view/src/controller/photo_view_scalestate_controller.dart
rename to mobile/lib/widgets/photo_view/src/controller/photo_view_scalestate_controller.dart
index a460d3ba9a..16021ceab1 100644
--- a/mobile/lib/shared/ui/photo_view/src/controller/photo_view_scalestate_controller.dart
+++ b/mobile/lib/widgets/photo_view/src/controller/photo_view_scalestate_controller.dart
@@ -2,8 +2,8 @@ import 'dart:async';
 import 'dart:ui';
 
 import 'package:flutter/widgets.dart' show VoidCallback;
-import 'package:immich_mobile/shared/ui/photo_view/src/photo_view_scale_state.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/utils/ignorable_change_notifier.dart';
+import 'package:immich_mobile/widgets/photo_view/src/photo_view_scale_state.dart';
+import 'package:immich_mobile/widgets/photo_view/src/utils/ignorable_change_notifier.dart';
 
 typedef ScaleStateListener = void Function(double prevScale, double nextScale);
 
diff --git a/mobile/lib/shared/ui/photo_view/src/core/photo_view_core.dart b/mobile/lib/widgets/photo_view/src/core/photo_view_core.dart
similarity index 95%
rename from mobile/lib/shared/ui/photo_view/src/core/photo_view_core.dart
rename to mobile/lib/widgets/photo_view/src/core/photo_view_core.dart
index c2edb45e21..0a5cae0fa0 100644
--- a/mobile/lib/shared/ui/photo_view/src/core/photo_view_core.dart
+++ b/mobile/lib/widgets/photo_view/src/core/photo_view_core.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/widgets.dart';
-import 'package:immich_mobile/shared/ui/photo_view/photo_view.dart'
+import 'package:immich_mobile/widgets/photo_view/photo_view.dart'
     show
         PhotoViewScaleState,
         PhotoViewHeroAttributes,
@@ -11,12 +11,12 @@ import 'package:immich_mobile/shared/ui/photo_view/photo_view.dart'
         PhotoViewImageDragUpdateCallback,
         PhotoViewImageLongPressStartCallback,
         ScaleStateCycle;
-import 'package:immich_mobile/shared/ui/photo_view/src/controller/photo_view_controller.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/controller/photo_view_controller_delegate.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/controller/photo_view_scalestate_controller.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/core/photo_view_gesture_detector.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/core/photo_view_hit_corners.dart';
-import 'package:immich_mobile/shared/ui/photo_view/src/utils/photo_view_utils.dart';
+import 'package:immich_mobile/widgets/photo_view/src/controller/photo_view_controller.dart';
+import 'package:immich_mobile/widgets/photo_view/src/controller/photo_view_controller_delegate.dart';
+import 'package:immich_mobile/widgets/photo_view/src/controller/photo_view_scalestate_controller.dart';
+import 'package:immich_mobile/widgets/photo_view/src/core/photo_view_gesture_detector.dart';
+import 'package:immich_mobile/widgets/photo_view/src/core/photo_view_hit_corners.dart';
+import 'package:immich_mobile/widgets/photo_view/src/utils/photo_view_utils.dart';
 
 const _defaultDecoration = BoxDecoration(
   color: Color.fromRGBO(0, 0, 0, 1.0),
diff --git a/mobile/lib/shared/ui/photo_view/src/core/photo_view_gesture_detector.dart b/mobile/lib/widgets/photo_view/src/core/photo_view_gesture_detector.dart
similarity index 100%
rename from mobile/lib/shared/ui/photo_view/src/core/photo_view_gesture_detector.dart
rename to mobile/lib/widgets/photo_view/src/core/photo_view_gesture_detector.dart
diff --git a/mobile/lib/shared/ui/photo_view/src/core/photo_view_hit_corners.dart b/mobile/lib/widgets/photo_view/src/core/photo_view_hit_corners.dart
similarity index 95%
rename from mobile/lib/shared/ui/photo_view/src/core/photo_view_hit_corners.dart
rename to mobile/lib/widgets/photo_view/src/core/photo_view_hit_corners.dart
index 615a61e86b..54a1029f29 100644
--- a/mobile/lib/shared/ui/photo_view/src/core/photo_view_hit_corners.dart
+++ b/mobile/lib/widgets/photo_view/src/core/photo_view_hit_corners.dart
@@ -1,6 +1,6 @@
 import 'package:flutter/widgets.dart';
 
-import 'package:immich_mobile/shared/ui/photo_view/src/controller/photo_view_controller_delegate.dart'
+import 'package:immich_mobile/widgets/photo_view/src/controller/photo_view_controller_delegate.dart'
     show PhotoViewControllerDelegate;
 
 mixin HitCornersDetector on PhotoViewControllerDelegate {
diff --git a/mobile/lib/shared/ui/photo_view/src/photo_view_computed_scale.dart b/mobile/lib/widgets/photo_view/src/photo_view_computed_scale.dart
similarity index 100%
rename from mobile/lib/shared/ui/photo_view/src/photo_view_computed_scale.dart
rename to mobile/lib/widgets/photo_view/src/photo_view_computed_scale.dart
diff --git a/mobile/lib/shared/ui/photo_view/src/photo_view_default_widgets.dart b/mobile/lib/widgets/photo_view/src/photo_view_default_widgets.dart
similarity index 100%
rename from mobile/lib/shared/ui/photo_view/src/photo_view_default_widgets.dart
rename to mobile/lib/widgets/photo_view/src/photo_view_default_widgets.dart
diff --git a/mobile/lib/shared/ui/photo_view/src/photo_view_scale_state.dart b/mobile/lib/widgets/photo_view/src/photo_view_scale_state.dart
similarity index 100%
rename from mobile/lib/shared/ui/photo_view/src/photo_view_scale_state.dart
rename to mobile/lib/widgets/photo_view/src/photo_view_scale_state.dart
diff --git a/mobile/lib/shared/ui/photo_view/src/photo_view_wrappers.dart b/mobile/lib/widgets/photo_view/src/photo_view_wrappers.dart
similarity index 100%
rename from mobile/lib/shared/ui/photo_view/src/photo_view_wrappers.dart
rename to mobile/lib/widgets/photo_view/src/photo_view_wrappers.dart
diff --git a/mobile/lib/shared/ui/photo_view/src/utils/ignorable_change_notifier.dart b/mobile/lib/widgets/photo_view/src/utils/ignorable_change_notifier.dart
similarity index 100%
rename from mobile/lib/shared/ui/photo_view/src/utils/ignorable_change_notifier.dart
rename to mobile/lib/widgets/photo_view/src/utils/ignorable_change_notifier.dart
diff --git a/mobile/lib/shared/ui/photo_view/src/utils/photo_view_hero_attributes.dart b/mobile/lib/widgets/photo_view/src/utils/photo_view_hero_attributes.dart
similarity index 100%
rename from mobile/lib/shared/ui/photo_view/src/utils/photo_view_hero_attributes.dart
rename to mobile/lib/widgets/photo_view/src/utils/photo_view_hero_attributes.dart
diff --git a/mobile/lib/shared/ui/photo_view/src/utils/photo_view_utils.dart b/mobile/lib/widgets/photo_view/src/utils/photo_view_utils.dart
similarity index 96%
rename from mobile/lib/shared/ui/photo_view/src/utils/photo_view_utils.dart
rename to mobile/lib/widgets/photo_view/src/utils/photo_view_utils.dart
index bd581058de..d91e9f51dd 100644
--- a/mobile/lib/shared/ui/photo_view/src/utils/photo_view_utils.dart
+++ b/mobile/lib/widgets/photo_view/src/utils/photo_view_utils.dart
@@ -1,8 +1,8 @@
 import 'dart:math' as math;
 import 'dart:ui' show Size;
 
-import "package:immich_mobile/shared/ui/photo_view/src/photo_view_computed_scale.dart";
-import 'package:immich_mobile/shared/ui/photo_view/src/photo_view_scale_state.dart';
+import "package:immich_mobile/widgets/photo_view/src/photo_view_computed_scale.dart";
+import 'package:immich_mobile/widgets/photo_view/src/photo_view_scale_state.dart';
 
 /// Given a [PhotoViewScaleState], returns a scale value considering [scaleBoundaries].
 double getScaleForScaleState(
diff --git a/mobile/lib/modules/search/ui/curated_people_row.dart b/mobile/lib/widgets/search/curated_people_row.dart
similarity index 97%
rename from mobile/lib/modules/search/ui/curated_people_row.dart
rename to mobile/lib/widgets/search/curated_people_row.dart
index 9d7e11f15f..50a4c3b427 100644
--- a/mobile/lib/modules/search/ui/curated_people_row.dart
+++ b/mobile/lib/widgets/search/curated_people_row.dart
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
 import 'package:easy_localization/easy_localization.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/models/search/search_curated_content.model.dart';
-import 'package:immich_mobile/modules/search/ui/thumbnail_with_info.dart';
+import 'package:immich_mobile/widgets/search/thumbnail_with_info.dart';
 import 'package:immich_mobile/entities/store.entity.dart';
 import 'package:immich_mobile/utils/image_url_builder.dart';
 
diff --git a/mobile/lib/modules/search/ui/curated_places_row.dart b/mobile/lib/widgets/search/curated_places_row.dart
similarity index 95%
rename from mobile/lib/modules/search/ui/curated_places_row.dart
rename to mobile/lib/widgets/search/curated_places_row.dart
index 1b70434f80..49737b9fcf 100644
--- a/mobile/lib/modules/search/ui/curated_places_row.dart
+++ b/mobile/lib/widgets/search/curated_places_row.dart
@@ -1,9 +1,9 @@
 import 'package:auto_route/auto_route.dart';
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
-import 'package:immich_mobile/modules/map/widgets/map_thumbnail.dart';
-import 'package:immich_mobile/modules/search/ui/curated_row.dart';
-import 'package:immich_mobile/modules/search/ui/thumbnail_with_info.dart';
+import 'package:immich_mobile/widgets/map/map_thumbnail.dart';
+import 'package:immich_mobile/widgets/search/curated_row.dart';
+import 'package:immich_mobile/widgets/search/thumbnail_with_info.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/store.entity.dart';
 import 'package:maplibre_gl/maplibre_gl.dart';
diff --git a/mobile/lib/modules/search/ui/curated_row.dart b/mobile/lib/widgets/search/curated_row.dart
similarity index 96%
rename from mobile/lib/modules/search/ui/curated_row.dart
rename to mobile/lib/widgets/search/curated_row.dart
index 5ab682cc46..326faea48c 100644
--- a/mobile/lib/modules/search/ui/curated_row.dart
+++ b/mobile/lib/widgets/search/curated_row.dart
@@ -1,6 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:immich_mobile/models/search/search_curated_content.model.dart';
-import 'package:immich_mobile/modules/search/ui/thumbnail_with_info.dart';
+import 'package:immich_mobile/widgets/search/thumbnail_with_info.dart';
 import 'package:immich_mobile/entities/store.entity.dart';
 
 class CuratedRow extends StatelessWidget {
diff --git a/mobile/lib/modules/search/ui/explore_grid.dart b/mobile/lib/widgets/search/explore_grid.dart
similarity index 97%
rename from mobile/lib/modules/search/ui/explore_grid.dart
rename to mobile/lib/widgets/search/explore_grid.dart
index 9b5850de45..91e903854d 100644
--- a/mobile/lib/modules/search/ui/explore_grid.dart
+++ b/mobile/lib/widgets/search/explore_grid.dart
@@ -2,7 +2,7 @@ import 'package:auto_route/auto_route.dart';
 import 'package:flutter/material.dart';
 import 'package:immich_mobile/models/search/search_curated_content.model.dart';
 import 'package:immich_mobile/models/search/search_filter.model.dart';
-import 'package:immich_mobile/modules/search/ui/thumbnail_with_info.dart';
+import 'package:immich_mobile/widgets/search/thumbnail_with_info.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 import 'package:immich_mobile/entities/store.entity.dart';
diff --git a/mobile/lib/modules/search/ui/person_name_edit_form.dart b/mobile/lib/widgets/search/person_name_edit_form.dart
similarity index 100%
rename from mobile/lib/modules/search/ui/person_name_edit_form.dart
rename to mobile/lib/widgets/search/person_name_edit_form.dart
diff --git a/mobile/lib/modules/search/ui/search_filter/camera_picker.dart b/mobile/lib/widgets/search/search_filter/camera_picker.dart
similarity index 100%
rename from mobile/lib/modules/search/ui/search_filter/camera_picker.dart
rename to mobile/lib/widgets/search/search_filter/camera_picker.dart
diff --git a/mobile/lib/modules/search/ui/search_filter/display_option_picker.dart b/mobile/lib/widgets/search/search_filter/display_option_picker.dart
similarity index 100%
rename from mobile/lib/modules/search/ui/search_filter/display_option_picker.dart
rename to mobile/lib/widgets/search/search_filter/display_option_picker.dart
diff --git a/mobile/lib/modules/search/ui/search_filter/filter_bottom_sheet_scaffold.dart b/mobile/lib/widgets/search/search_filter/filter_bottom_sheet_scaffold.dart
similarity index 100%
rename from mobile/lib/modules/search/ui/search_filter/filter_bottom_sheet_scaffold.dart
rename to mobile/lib/widgets/search/search_filter/filter_bottom_sheet_scaffold.dart
diff --git a/mobile/lib/modules/search/ui/search_filter/location_picker.dart b/mobile/lib/widgets/search/search_filter/location_picker.dart
similarity index 100%
rename from mobile/lib/modules/search/ui/search_filter/location_picker.dart
rename to mobile/lib/widgets/search/search_filter/location_picker.dart
diff --git a/mobile/lib/modules/search/ui/search_filter/media_type_picker.dart b/mobile/lib/widgets/search/search_filter/media_type_picker.dart
similarity index 100%
rename from mobile/lib/modules/search/ui/search_filter/media_type_picker.dart
rename to mobile/lib/widgets/search/search_filter/media_type_picker.dart
diff --git a/mobile/lib/modules/search/ui/search_filter/people_picker.dart b/mobile/lib/widgets/search/search_filter/people_picker.dart
similarity index 100%
rename from mobile/lib/modules/search/ui/search_filter/people_picker.dart
rename to mobile/lib/widgets/search/search_filter/people_picker.dart
diff --git a/mobile/lib/modules/search/ui/search_filter/search_filter_chip.dart b/mobile/lib/widgets/search/search_filter/search_filter_chip.dart
similarity index 100%
rename from mobile/lib/modules/search/ui/search_filter/search_filter_chip.dart
rename to mobile/lib/widgets/search/search_filter/search_filter_chip.dart
diff --git a/mobile/lib/modules/search/ui/search_filter/search_filter_utils.dart b/mobile/lib/widgets/search/search_filter/search_filter_utils.dart
similarity index 100%
rename from mobile/lib/modules/search/ui/search_filter/search_filter_utils.dart
rename to mobile/lib/widgets/search/search_filter/search_filter_utils.dart
diff --git a/mobile/lib/modules/search/ui/search_row_title.dart b/mobile/lib/widgets/search/search_row_title.dart
similarity index 100%
rename from mobile/lib/modules/search/ui/search_row_title.dart
rename to mobile/lib/widgets/search/search_row_title.dart
diff --git a/mobile/lib/modules/search/ui/thumbnail_with_info.dart b/mobile/lib/widgets/search/thumbnail_with_info.dart
similarity index 100%
rename from mobile/lib/modules/search/ui/thumbnail_with_info.dart
rename to mobile/lib/widgets/search/thumbnail_with_info.dart
diff --git a/mobile/lib/modules/settings/widgets/advanced_settings.dart b/mobile/lib/widgets/settings/advanced_settings.dart
similarity index 85%
rename from mobile/lib/modules/settings/widgets/advanced_settings.dart
rename to mobile/lib/widgets/settings/advanced_settings.dart
index 5866103afc..e79c50bc81 100644
--- a/mobile/lib/modules/settings/widgets/advanced_settings.dart
+++ b/mobile/lib/widgets/settings/advanced_settings.dart
@@ -2,11 +2,11 @@ import 'dart:io';
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_hooks/flutter_hooks.dart' hide Store;
-import 'package:immich_mobile/modules/settings/widgets/local_storage_settings.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_slider_list_tile.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_sub_page_scaffold.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_switch_list_tile.dart';
-import 'package:immich_mobile/modules/settings/utils/app_settings_update_hook.dart';
+import 'package:immich_mobile/widgets/settings/local_storage_settings.dart';
+import 'package:immich_mobile/widgets/settings/settings_slider_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/settings_sub_page_scaffold.dart';
+import 'package:immich_mobile/widgets/settings/settings_switch_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/utils/app_settings_update_hook.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/services/app_settings.service.dart';
 import 'package:immich_mobile/providers/user.provider.dart';
diff --git a/mobile/lib/modules/settings/widgets/asset_list_settings/asset_list_group_settings.dart b/mobile/lib/widgets/settings/asset_list_settings/asset_list_group_settings.dart
similarity index 84%
rename from mobile/lib/modules/settings/widgets/asset_list_settings/asset_list_group_settings.dart
rename to mobile/lib/widgets/settings/asset_list_settings/asset_list_group_settings.dart
index 7e079a12ed..8e63e61e1c 100644
--- a/mobile/lib/modules/settings/widgets/asset_list_settings/asset_list_group_settings.dart
+++ b/mobile/lib/widgets/settings/asset_list_settings/asset_list_group_settings.dart
@@ -1,12 +1,12 @@
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
 import 'package:immich_mobile/providers/app_settings.provider.dart';
 import 'package:immich_mobile/services/app_settings.service.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_radio_list_tile.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_sub_title.dart';
-import 'package:immich_mobile/modules/settings/utils/app_settings_update_hook.dart';
+import 'package:immich_mobile/widgets/settings/settings_radio_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/settings_sub_title.dart';
+import 'package:immich_mobile/widgets/settings/utils/app_settings_update_hook.dart';
 
 class GroupSettings extends HookConsumerWidget {
   const GroupSettings({
diff --git a/mobile/lib/modules/settings/widgets/asset_list_settings/asset_list_layout_settings.dart b/mobile/lib/widgets/settings/asset_list_settings/asset_list_layout_settings.dart
similarity index 81%
rename from mobile/lib/modules/settings/widgets/asset_list_settings/asset_list_layout_settings.dart
rename to mobile/lib/widgets/settings/asset_list_settings/asset_list_layout_settings.dart
index dd0cdc2197..1224b14d15 100644
--- a/mobile/lib/modules/settings/widgets/asset_list_settings/asset_list_layout_settings.dart
+++ b/mobile/lib/widgets/settings/asset_list_settings/asset_list_layout_settings.dart
@@ -3,10 +3,10 @@ import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/providers/app_settings.provider.dart';
 import 'package:immich_mobile/services/app_settings.service.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_slider_list_tile.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_sub_title.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_switch_list_tile.dart';
-import 'package:immich_mobile/modules/settings/utils/app_settings_update_hook.dart';
+import 'package:immich_mobile/widgets/settings/settings_slider_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/settings_sub_title.dart';
+import 'package:immich_mobile/widgets/settings/settings_switch_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/utils/app_settings_update_hook.dart';
 
 class LayoutSettings extends HookConsumerWidget {
   const LayoutSettings({
diff --git a/mobile/lib/modules/settings/widgets/asset_list_settings/asset_list_settings.dart b/mobile/lib/widgets/settings/asset_list_settings/asset_list_settings.dart
similarity index 75%
rename from mobile/lib/modules/settings/widgets/asset_list_settings/asset_list_settings.dart
rename to mobile/lib/widgets/settings/asset_list_settings/asset_list_settings.dart
index 1377a3d3cb..9545533d95 100644
--- a/mobile/lib/modules/settings/widgets/asset_list_settings/asset_list_settings.dart
+++ b/mobile/lib/widgets/settings/asset_list_settings/asset_list_settings.dart
@@ -3,10 +3,10 @@ import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/providers/app_settings.provider.dart';
 import 'package:immich_mobile/services/app_settings.service.dart';
-import 'package:immich_mobile/modules/settings/widgets/asset_list_settings/asset_list_group_settings.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_sub_page_scaffold.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_switch_list_tile.dart';
-import 'package:immich_mobile/modules/settings/utils/app_settings_update_hook.dart';
+import 'package:immich_mobile/widgets/settings/asset_list_settings/asset_list_group_settings.dart';
+import 'package:immich_mobile/widgets/settings/settings_sub_page_scaffold.dart';
+import 'package:immich_mobile/widgets/settings/settings_switch_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/utils/app_settings_update_hook.dart';
 import 'asset_list_layout_settings.dart';
 
 class AssetListSettings extends HookConsumerWidget {
diff --git a/mobile/lib/modules/settings/widgets/backup_settings/background_settings.dart b/mobile/lib/widgets/settings/backup_settings/background_settings.dart
similarity index 96%
rename from mobile/lib/modules/settings/widgets/backup_settings/background_settings.dart
rename to mobile/lib/widgets/settings/backup_settings/background_settings.dart
index 2d598614cd..a772aaaf5d 100644
--- a/mobile/lib/modules/settings/widgets/backup_settings/background_settings.dart
+++ b/mobile/lib/widgets/settings/backup_settings/background_settings.dart
@@ -7,10 +7,10 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/backup/backup.provider.dart';
 import 'package:immich_mobile/providers/backup/ios_background_settings.provider.dart';
-import 'package:immich_mobile/modules/backup/ui/ios_debug_info_tile.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_button_list_tile.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_slider_list_tile.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_switch_list_tile.dart';
+import 'package:immich_mobile/widgets/backup/ios_debug_info_tile.dart';
+import 'package:immich_mobile/widgets/settings/settings_button_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/settings_slider_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/settings_switch_list_tile.dart';
 import 'package:permission_handler/permission_handler.dart';
 import 'package:url_launcher/url_launcher.dart';
 
diff --git a/mobile/lib/modules/settings/widgets/backup_settings/backup_settings.dart b/mobile/lib/widgets/settings/backup_settings/backup_settings.dart
similarity index 78%
rename from mobile/lib/modules/settings/widgets/backup_settings/backup_settings.dart
rename to mobile/lib/widgets/settings/backup_settings/backup_settings.dart
index 5a1212e280..19e031b082 100644
--- a/mobile/lib/modules/settings/widgets/backup_settings/backup_settings.dart
+++ b/mobile/lib/widgets/settings/backup_settings/backup_settings.dart
@@ -4,13 +4,13 @@ import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/providers/backup/backup_verification.provider.dart';
 import 'package:immich_mobile/services/app_settings.service.dart';
-import 'package:immich_mobile/modules/settings/widgets/backup_settings/background_settings.dart';
-import 'package:immich_mobile/modules/settings/widgets/backup_settings/foreground_settings.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_button_list_tile.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_sub_page_scaffold.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_switch_list_tile.dart';
-import 'package:immich_mobile/modules/settings/utils/app_settings_update_hook.dart';
-import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
+import 'package:immich_mobile/widgets/settings/backup_settings/background_settings.dart';
+import 'package:immich_mobile/widgets/settings/backup_settings/foreground_settings.dart';
+import 'package:immich_mobile/widgets/settings/settings_button_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/settings_sub_page_scaffold.dart';
+import 'package:immich_mobile/widgets/settings/settings_switch_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/utils/app_settings_update_hook.dart';
+import 'package:immich_mobile/widgets/common/immich_loading_indicator.dart';
 
 class BackupSettings extends HookConsumerWidget {
   const BackupSettings({
diff --git a/mobile/lib/modules/settings/widgets/backup_settings/foreground_settings.dart b/mobile/lib/widgets/settings/backup_settings/foreground_settings.dart
similarity index 93%
rename from mobile/lib/modules/settings/widgets/backup_settings/foreground_settings.dart
rename to mobile/lib/widgets/settings/backup_settings/foreground_settings.dart
index 70fc6f7eb6..fc3b32b203 100644
--- a/mobile/lib/modules/settings/widgets/backup_settings/foreground_settings.dart
+++ b/mobile/lib/widgets/settings/backup_settings/foreground_settings.dart
@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/backup/backup.provider.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_button_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/settings_button_list_tile.dart';
 
 class ForegroundBackupSettings extends ConsumerWidget {
   const ForegroundBackupSettings({super.key});
diff --git a/mobile/lib/modules/settings/widgets/image_viewer_quality_setting.dart b/mobile/lib/widgets/settings/image_viewer_quality_setting.dart
similarity index 84%
rename from mobile/lib/modules/settings/widgets/image_viewer_quality_setting.dart
rename to mobile/lib/widgets/settings/image_viewer_quality_setting.dart
index 0e50b1c507..af39249e4b 100644
--- a/mobile/lib/modules/settings/widgets/image_viewer_quality_setting.dart
+++ b/mobile/lib/widgets/settings/image_viewer_quality_setting.dart
@@ -3,9 +3,9 @@ import 'package:flutter/material.dart';
 import 'package:flutter_hooks/flutter_hooks.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/services/app_settings.service.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_sub_page_scaffold.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_switch_list_tile.dart';
-import 'package:immich_mobile/modules/settings/utils/app_settings_update_hook.dart';
+import 'package:immich_mobile/widgets/settings/settings_sub_page_scaffold.dart';
+import 'package:immich_mobile/widgets/settings/settings_switch_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/utils/app_settings_update_hook.dart';
 
 class ImageViewerQualitySetting extends HookWidget {
   const ImageViewerQualitySetting({
diff --git a/mobile/lib/modules/settings/widgets/language_settings.dart b/mobile/lib/widgets/settings/language_settings.dart
similarity index 100%
rename from mobile/lib/modules/settings/widgets/language_settings.dart
rename to mobile/lib/widgets/settings/language_settings.dart
diff --git a/mobile/lib/modules/settings/widgets/local_storage_settings.dart b/mobile/lib/widgets/settings/local_storage_settings.dart
similarity index 100%
rename from mobile/lib/modules/settings/widgets/local_storage_settings.dart
rename to mobile/lib/widgets/settings/local_storage_settings.dart
diff --git a/mobile/lib/modules/settings/widgets/notification_setting.dart b/mobile/lib/widgets/settings/notification_setting.dart
similarity index 90%
rename from mobile/lib/modules/settings/widgets/notification_setting.dart
rename to mobile/lib/widgets/settings/notification_setting.dart
index 379ad50083..c07a80c97a 100644
--- a/mobile/lib/modules/settings/widgets/notification_setting.dart
+++ b/mobile/lib/widgets/settings/notification_setting.dart
@@ -4,11 +4,11 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
 import 'package:immich_mobile/providers/notification_permission.provider.dart';
 import 'package:immich_mobile/services/app_settings.service.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_button_list_tile.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_slider_list_tile.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_sub_page_scaffold.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_switch_list_tile.dart';
-import 'package:immich_mobile/modules/settings/utils/app_settings_update_hook.dart';
+import 'package:immich_mobile/widgets/settings/settings_button_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/settings_slider_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/settings_sub_page_scaffold.dart';
+import 'package:immich_mobile/widgets/settings/settings_switch_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/utils/app_settings_update_hook.dart';
 import 'package:permission_handler/permission_handler.dart';
 
 class NotificationSetting extends HookConsumerWidget {
diff --git a/mobile/lib/modules/settings/widgets/preference_settings/haptic_setting.dart b/mobile/lib/widgets/settings/preference_settings/haptic_setting.dart
similarity index 82%
rename from mobile/lib/modules/settings/widgets/preference_settings/haptic_setting.dart
rename to mobile/lib/widgets/settings/preference_settings/haptic_setting.dart
index d66d48f2c2..7935002c05 100644
--- a/mobile/lib/modules/settings/widgets/preference_settings/haptic_setting.dart
+++ b/mobile/lib/widgets/settings/preference_settings/haptic_setting.dart
@@ -3,9 +3,9 @@ import 'package:flutter/material.dart';
 import 'package:flutter_hooks/flutter_hooks.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/services/app_settings.service.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_sub_title.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_switch_list_tile.dart';
-import 'package:immich_mobile/modules/settings/utils/app_settings_update_hook.dart';
+import 'package:immich_mobile/widgets/settings/settings_sub_title.dart';
+import 'package:immich_mobile/widgets/settings/settings_switch_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/utils/app_settings_update_hook.dart';
 
 class HapticSetting extends HookConsumerWidget {
   const HapticSetting({
diff --git a/mobile/lib/modules/settings/widgets/preference_settings/preference_setting.dart b/mobile/lib/widgets/settings/preference_settings/preference_setting.dart
similarity index 55%
rename from mobile/lib/modules/settings/widgets/preference_settings/preference_setting.dart
rename to mobile/lib/widgets/settings/preference_settings/preference_setting.dart
index c1d9b19460..62508df6e2 100644
--- a/mobile/lib/modules/settings/widgets/preference_settings/preference_setting.dart
+++ b/mobile/lib/widgets/settings/preference_settings/preference_setting.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
-import 'package:immich_mobile/modules/settings/widgets/preference_settings/haptic_setting.dart';
-import 'package:immich_mobile/modules/settings/widgets/preference_settings/theme_setting.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_sub_page_scaffold.dart';
+import 'package:immich_mobile/widgets/settings/preference_settings/haptic_setting.dart';
+import 'package:immich_mobile/widgets/settings/preference_settings/theme_setting.dart';
+import 'package:immich_mobile/widgets/settings/settings_sub_page_scaffold.dart';
 
 class PreferenceSetting extends StatelessWidget {
   const PreferenceSetting({
diff --git a/mobile/lib/modules/settings/widgets/preference_settings/theme_setting.dart b/mobile/lib/widgets/settings/preference_settings/theme_setting.dart
similarity index 92%
rename from mobile/lib/modules/settings/widgets/preference_settings/theme_setting.dart
rename to mobile/lib/widgets/settings/preference_settings/theme_setting.dart
index 5939c2803f..7bec8fdd45 100644
--- a/mobile/lib/modules/settings/widgets/preference_settings/theme_setting.dart
+++ b/mobile/lib/widgets/settings/preference_settings/theme_setting.dart
@@ -3,9 +3,9 @@ import 'package:flutter/material.dart';
 import 'package:flutter_hooks/flutter_hooks.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/services/app_settings.service.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_sub_title.dart';
-import 'package:immich_mobile/modules/settings/widgets/settings_switch_list_tile.dart';
-import 'package:immich_mobile/modules/settings/utils/app_settings_update_hook.dart';
+import 'package:immich_mobile/widgets/settings/settings_sub_title.dart';
+import 'package:immich_mobile/widgets/settings/settings_switch_list_tile.dart';
+import 'package:immich_mobile/widgets/settings/utils/app_settings_update_hook.dart';
 import 'package:immich_mobile/utils/immich_app_theme.dart';
 
 class ThemeSetting extends HookConsumerWidget {
diff --git a/mobile/lib/modules/settings/widgets/settings_button_list_tile.dart b/mobile/lib/widgets/settings/settings_button_list_tile.dart
similarity index 100%
rename from mobile/lib/modules/settings/widgets/settings_button_list_tile.dart
rename to mobile/lib/widgets/settings/settings_button_list_tile.dart
diff --git a/mobile/lib/modules/settings/widgets/settings_radio_list_tile.dart b/mobile/lib/widgets/settings/settings_radio_list_tile.dart
similarity index 100%
rename from mobile/lib/modules/settings/widgets/settings_radio_list_tile.dart
rename to mobile/lib/widgets/settings/settings_radio_list_tile.dart
diff --git a/mobile/lib/modules/settings/widgets/settings_slider_list_tile.dart b/mobile/lib/widgets/settings/settings_slider_list_tile.dart
similarity index 100%
rename from mobile/lib/modules/settings/widgets/settings_slider_list_tile.dart
rename to mobile/lib/widgets/settings/settings_slider_list_tile.dart
diff --git a/mobile/lib/modules/settings/widgets/settings_sub_page_scaffold.dart b/mobile/lib/widgets/settings/settings_sub_page_scaffold.dart
similarity index 100%
rename from mobile/lib/modules/settings/widgets/settings_sub_page_scaffold.dart
rename to mobile/lib/widgets/settings/settings_sub_page_scaffold.dart
diff --git a/mobile/lib/modules/settings/widgets/settings_sub_title.dart b/mobile/lib/widgets/settings/settings_sub_title.dart
similarity index 100%
rename from mobile/lib/modules/settings/widgets/settings_sub_title.dart
rename to mobile/lib/widgets/settings/settings_sub_title.dart
diff --git a/mobile/lib/modules/settings/widgets/settings_switch_list_tile.dart b/mobile/lib/widgets/settings/settings_switch_list_tile.dart
similarity index 100%
rename from mobile/lib/modules/settings/widgets/settings_switch_list_tile.dart
rename to mobile/lib/widgets/settings/settings_switch_list_tile.dart
diff --git a/mobile/lib/modules/settings/utils/app_settings_update_hook.dart b/mobile/lib/widgets/settings/utils/app_settings_update_hook.dart
similarity index 100%
rename from mobile/lib/modules/settings/utils/app_settings_update_hook.dart
rename to mobile/lib/widgets/settings/utils/app_settings_update_hook.dart
diff --git a/mobile/lib/modules/shared_link/ui/shared_link_item.dart b/mobile/lib/widgets/shared_link/shared_link_item.dart
similarity index 98%
rename from mobile/lib/modules/shared_link/ui/shared_link_item.dart
rename to mobile/lib/widgets/shared_link/shared_link_item.dart
index c79a2d17bc..86c0890cd2 100644
--- a/mobile/lib/modules/shared_link/ui/shared_link_item.dart
+++ b/mobile/lib/widgets/shared_link/shared_link_item.dart
@@ -6,13 +6,13 @@ import 'package:flutter/services.dart';
 import 'package:fluttertoast/fluttertoast.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/extensions/build_context_extensions.dart';
-import 'package:immich_mobile/modules/search/ui/thumbnail_with_info.dart';
+import 'package:immich_mobile/widgets/search/thumbnail_with_info.dart';
 import 'package:immich_mobile/models/shared_link/shared_link.model.dart';
 import 'package:immich_mobile/providers/shared_link.provider.dart';
 import 'package:immich_mobile/routing/router.dart';
 import 'package:immich_mobile/providers/server_info.provider.dart';
-import 'package:immich_mobile/shared/ui/confirm_dialog.dart';
-import 'package:immich_mobile/shared/ui/immich_toast.dart';
+import 'package:immich_mobile/widgets/common/confirm_dialog.dart';
+import 'package:immich_mobile/widgets/common/immich_toast.dart';
 import 'package:immich_mobile/utils/image_url_builder.dart';
 import 'package:immich_mobile/utils/url_helper.dart';
 
diff --git a/mobile/test/mock_http_override.dart b/mobile/test/mock_http_override.dart
index f247e377a2..c25fb79b50 100644
--- a/mobile/test/mock_http_override.dart
+++ b/mobile/test/mock_http_override.dart
@@ -1,6 +1,6 @@
 import 'dart:io';
 
-import 'package:immich_mobile/shared/ui/transparent_image.dart';
+import 'package:immich_mobile/widgets/common/transparent_image.dart';
 import 'package:mocktail/mocktail.dart';
 
 /// Mocks the http client to always return a transparent image for all the requests. Only useful in widget
diff --git a/mobile/test/modules/activity/activities_page_test.dart b/mobile/test/modules/activity/activities_page_test.dart
index cd227a8075..9f410b2e26 100644
--- a/mobile/test/modules/activity/activities_page_test.dart
+++ b/mobile/test/modules/activity/activities_page_test.dart
@@ -6,8 +6,8 @@ import 'package:flutter_test/flutter_test.dart';
 import 'package:immich_mobile/models/activities/activity.model.dart';
 import 'package:immich_mobile/providers/activity.provider.dart';
 import 'package:immich_mobile/pages/common/activities.page.dart';
-import 'package:immich_mobile/modules/activities/widgets/activity_text_field.dart';
-import 'package:immich_mobile/modules/activities/widgets/dismissible_activity.dart';
+import 'package:immich_mobile/widgets/activities/activity_text_field.dart';
+import 'package:immich_mobile/widgets/activities/dismissible_activity.dart';
 import 'package:immich_mobile/providers/album/current_album.provider.dart';
 import 'package:immich_mobile/providers/asset_viewer/current_asset.provider.dart';
 import 'package:immich_mobile/entities/album.entity.dart';
diff --git a/mobile/test/modules/activity/activity_text_field_test.dart b/mobile/test/modules/activity/activity_text_field_test.dart
index 64f2170eef..84c98fd3ff 100644
--- a/mobile/test/modules/activity/activity_text_field_test.dart
+++ b/mobile/test/modules/activity/activity_text_field_test.dart
@@ -4,11 +4,11 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_test/flutter_test.dart';
 import 'package:immich_mobile/providers/activity.provider.dart';
-import 'package:immich_mobile/modules/activities/widgets/activity_text_field.dart';
+import 'package:immich_mobile/widgets/activities/activity_text_field.dart';
 import 'package:immich_mobile/providers/album/current_album.provider.dart';
 import 'package:immich_mobile/entities/store.entity.dart';
 import 'package:immich_mobile/providers/user.provider.dart';
-import 'package:immich_mobile/shared/ui/user_circle_avatar.dart';
+import 'package:immich_mobile/widgets/common/user_circle_avatar.dart';
 import 'package:isar/isar.dart';
 import 'package:mocktail/mocktail.dart';
 import 'package:riverpod_annotation/riverpod_annotation.dart';
diff --git a/mobile/test/modules/activity/activity_tile_test.dart b/mobile/test/modules/activity/activity_tile_test.dart
index 31c6a7a5de..d6fd0d5efd 100644
--- a/mobile/test/modules/activity/activity_tile_test.dart
+++ b/mobile/test/modules/activity/activity_tile_test.dart
@@ -5,10 +5,10 @@ import 'package:flutter/material.dart';
 import 'package:flutter_test/flutter_test.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/models/activities/activity.model.dart';
-import 'package:immich_mobile/modules/activities/widgets/activity_tile.dart';
+import 'package:immich_mobile/widgets/activities/activity_tile.dart';
 import 'package:immich_mobile/providers/asset_viewer/current_asset.provider.dart';
 import 'package:immich_mobile/entities/store.entity.dart';
-import 'package:immich_mobile/shared/ui/user_circle_avatar.dart';
+import 'package:immich_mobile/widgets/common/user_circle_avatar.dart';
 import 'package:isar/isar.dart';
 
 import '../../fixtures/asset.stub.dart';
diff --git a/mobile/test/modules/activity/dismissible_activity_test.dart b/mobile/test/modules/activity/dismissible_activity_test.dart
index 5e500b9150..fabdace13f 100644
--- a/mobile/test/modules/activity/dismissible_activity_test.dart
+++ b/mobile/test/modules/activity/dismissible_activity_test.dart
@@ -3,10 +3,10 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_test/flutter_test.dart';
 import 'package:immich_mobile/models/activities/activity.model.dart';
-import 'package:immich_mobile/modules/activities/widgets/activity_tile.dart';
-import 'package:immich_mobile/modules/activities/widgets/dismissible_activity.dart';
+import 'package:immich_mobile/widgets/activities/activity_tile.dart';
+import 'package:immich_mobile/widgets/activities/dismissible_activity.dart';
 import 'package:immich_mobile/providers/asset_viewer/current_asset.provider.dart';
-import 'package:immich_mobile/shared/ui/confirm_dialog.dart';
+import 'package:immich_mobile/widgets/common/confirm_dialog.dart';
 import 'package:riverpod_annotation/riverpod_annotation.dart';
 
 import '../../fixtures/user.stub.dart';
diff --git a/mobile/test/modules/home/asset_grid_data_structure_test.dart b/mobile/test/modules/home/asset_grid_data_structure_test.dart
index e4f0948f5e..f12b9b2190 100644
--- a/mobile/test/modules/home/asset_grid_data_structure_test.dart
+++ b/mobile/test/modules/home/asset_grid_data_structure_test.dart
@@ -1,5 +1,5 @@
 import 'package:flutter_test/flutter_test.dart';
-import 'package:immich_mobile/modules/home/ui/asset_grid/asset_grid_data_structure.dart';
+import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
 import 'package:immich_mobile/entities/asset.entity.dart';
 
 void main() {
diff --git a/mobile/test/modules/map/map_theme_override_test.dart b/mobile/test/modules/map/map_theme_override_test.dart
index 5ca63b9eef..831b46c343 100644
--- a/mobile/test/modules/map/map_theme_override_test.dart
+++ b/mobile/test/modules/map/map_theme_override_test.dart
@@ -5,7 +5,7 @@ import 'package:flutter_test/flutter_test.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/models/map/map_state.model.dart';
 import 'package:immich_mobile/providers/map/map_state.provider.dart';
-import 'package:immich_mobile/modules/map/widgets/map_theme_override.dart';
+import 'package:immich_mobile/widgets/map/map_theme_override.dart';
 
 import '../../test_utils.dart';
 import '../../widget_tester_extensions.dart';