diff --git a/src/assets/locales/en.json b/src/assets/locales/en.json
index e6714cb9..90ecb318 100644
--- a/src/assets/locales/en.json
+++ b/src/assets/locales/en.json
@@ -112,6 +112,7 @@
"pagetitle": "{{title}} - sudo-flix",
"register": "Register",
"settings": "Settings",
+ "migration": "Migration",
"jip": "Jip"
}
},
@@ -197,6 +198,27 @@
"show": "Show"
}
},
+ "migration": {
+ "start": {
+ "title": "Migrate your data",
+ "explainer": "If you wish to migrate or backup your data, you can do so using the options below. This will allow you to keep your data when you switch backend servers.",
+ "options": {
+ "or": "or",
+ "direct": {
+ "description": "This will directly migrate your data to the new server. This is the fastest option.
This option allows you to keep your passphrase the same!",
+ "title": "Direct migration",
+ "quality": "Easiest and fastest",
+ "action": "Transfer data"
+ },
+ "download": {
+ "description": "This will download your data to your device. You can then upload it to the new server or just keep it for safekeeping.",
+ "title": "Download data",
+ "quality": "More technical",
+ "action": "Download data"
+ }
+ }
+ }
+ },
"navigation": {
"banner": {
"offline": "Check your internet connection, silly goose! 🦢"
diff --git a/src/components/Icon.tsx b/src/components/Icon.tsx
index dda27f5f..7960cba0 100644
--- a/src/components/Icon.tsx
+++ b/src/components/Icon.tsx
@@ -68,6 +68,8 @@ export enum Icons {
BRUSH = "brush",
UPLOAD = "upload",
WEB = "web",
+ CLOUD_ARROW_UP = "cloud_arrow_up",
+ FILE_ARROW_DOWN = "file_arrow_down",
}
export interface IconProps {
@@ -153,6 +155,8 @@ const iconList: Record = {
`,
+ cloud_arrow_up: ``,
+ file_arrow_down: ``,
};
function ChromeCastButton() {
diff --git a/src/pages/migration/Migration.tsx b/src/pages/migration/Migration.tsx
new file mode 100644
index 00000000..cd390c0f
--- /dev/null
+++ b/src/pages/migration/Migration.tsx
@@ -0,0 +1,65 @@
+import { Trans, useTranslation } from "react-i18next";
+import { useNavigate } from "react-router-dom";
+
+import { Icons } from "@/components/Icon";
+import { Stepper } from "@/components/layout/Stepper";
+import { CenterContainer } from "@/components/layout/ThinContainer";
+import { VerticalLine } from "@/components/layout/VerticalLine";
+import { Heading2, Paragraph } from "@/components/utils/Text";
+import { MinimalPageLayout } from "@/pages/layouts/MinimalPageLayout";
+import { Card, CardContent, Link } from "@/pages/migration/utils";
+import { PageTitle } from "@/pages/parts/util/PageTitle";
+
+export function MigrationPage() {
+ const navigate = useNavigate();
+ const { t } = useTranslation();
+
+ return (
+
+
+
+
+
+ {t("migration.start.title")}
+
+
+ {t("migration.start.explainer")}
+
+
+