diff --git a/app/Sorting/SortSet.php b/app/Sorting/SortSet.php
new file mode 100644
index 000000000..42e1e0951
--- /dev/null
+++ b/app/Sorting/SortSet.php
@@ -0,0 +1,35 @@
+sequence);
+ $options = array_map(fn ($val) => SortSetOption::tryFrom($val), $strOptions);
+ return array_filter($options);
+ }
+
+ /**
+ * @param SortSetOption[] $options
+ */
+ public function setOptions(array $options): void
+ {
+ $values = array_map(fn (SortSetOption $opt) => $opt->value, $options);
+ $this->sequence = implode(',', $values);
+ }
+}
diff --git a/database/migrations/2025_01_29_180933_create_sort_sets_table.php b/database/migrations/2025_01_29_180933_create_sort_sets_table.php
new file mode 100644
index 000000000..bf9780c5b
--- /dev/null
+++ b/database/migrations/2025_01_29_180933_create_sort_sets_table.php
@@ -0,0 +1,29 @@
+increments('id');
+ $table->string('name');
+ $table->text('sequence');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('sort_sets');
+ }
+};
diff --git a/lang/en/settings.php b/lang/en/settings.php
index c0b6b692a..b20152bfe 100644
--- a/lang/en/settings.php
+++ b/lang/en/settings.php
@@ -74,6 +74,13 @@ return [
'reg_confirm_restrict_domain_desc' => 'Enter a comma separated list of email domains you would like to restrict registration to. Users will be sent an email to confirm their address before being allowed to interact with the application.
Note that users will be able to change their email addresses after successful registration.',
'reg_confirm_restrict_domain_placeholder' => 'No restriction set',
+ // Sorting Settings
+ 'sorting' => 'Sorting',
+ 'sorting_book_default' => 'Default Book Sort',
+ 'sorting_book_default_desc' => 'Select the default sort set to apply to new books. This won\'t affect existing books, and can be overridden per-book.',
+ 'sorting_sets' => 'Sort Sets',
+ 'sorting_sets_desc' => 'These are predefined sorting operations which can be applied to content in the system.',
+
// Maintenance settings
'maint' => 'Maintenance',
'maint_image_cleanup' => 'Cleanup Images',
diff --git a/resources/views/settings/categories/sorting.blade.php b/resources/views/settings/categories/sorting.blade.php
new file mode 100644
index 000000000..153ea0e3b
--- /dev/null
+++ b/resources/views/settings/categories/sorting.blade.php
@@ -0,0 +1,49 @@
+@extends('settings.layout')
+
+@section('card')
+
{{ trans('settings.sorting_sets_desc') }}
+{{-- TODO--}} +