Your server has been suspended. Please
@@ -103,8 +95,8 @@
+
+
diff --git a/apps/frontend/src/components/ui/servers/marketing/MedalServerCountdown.vue b/apps/frontend/src/components/ui/servers/marketing/MedalServerCountdown.vue
new file mode 100644
index 000000000..fb0b06131
--- /dev/null
+++ b/apps/frontend/src/components/ui/servers/marketing/MedalServerCountdown.vue
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/components/ui/servers/marketing/MedalServerListing.vue b/apps/frontend/src/components/ui/servers/marketing/MedalServerListing.vue
new file mode 100644
index 000000000..d25b3eb62
--- /dev/null
+++ b/apps/frontend/src/components/ui/servers/marketing/MedalServerListing.vue
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+ Your server's hardware is currently being upgraded and will be back online shortly.
+
+
+
+ Your server has been cancelled. Please
+ update your billing information or contact Modrinth Support for more information.
+
+
+
+
+
+ Your server has been suspended:
+ {{ suspension_reason }}. Please update your billing information or contact Modrinth Support
+ for more information.
+
+
+
+
+
+ Your server has been suspended. Please
+ update your billing information or contact Modrinth Support for more information.
+
+
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/composables/featureFlags.ts b/apps/frontend/src/composables/featureFlags.ts
index df4c5d057..1a604cc98 100644
--- a/apps/frontend/src/composables/featureFlags.ts
+++ b/apps/frontend/src/composables/featureFlags.ts
@@ -25,6 +25,7 @@ export const DEFAULT_FEATURE_FLAGS = validateValues({
// Feature toggles
projectTypesPrimaryNav: false,
+ enableMedalPromotion: true,
hidePlusPromoInUserMenu: false,
oldProjectCards: true,
newProjectCards: false,
diff --git a/apps/frontend/src/pages/servers/index.vue b/apps/frontend/src/pages/servers/index.vue
index 2ac52cbe8..98d5336f8 100644
--- a/apps/frontend/src/pages/servers/index.vue
+++ b/apps/frontend/src/pages/servers/index.vue
@@ -516,12 +516,11 @@
-
+
There's a server for everyone
@@ -551,6 +550,8 @@
+
+
{
}
};
-const planQuery = () => {
- if (route.query.plan) {
- document.getElementById("plan").scrollIntoView();
- selectProduct(route.query.plan);
+const planQuery = async () => {
+ if ("plan" in route.query) {
+ await nextTick();
+ const planElement = document.getElementById("plan");
+ if (planElement) {
+ planElement.scrollIntoView({ behavior: "smooth" });
+ await selectProduct(route.query.plan);
+ }
}
};
diff --git a/apps/frontend/src/pages/servers/manage/[id].vue b/apps/frontend/src/pages/servers/manage/[id].vue
index 83f0961d0..c1a92c7d6 100644
--- a/apps/frontend/src/pages/servers/manage/[id].vue
+++ b/apps/frontend/src/pages/servers/manage/[id].vue
@@ -290,6 +290,8 @@
+
+
+
@@ -115,6 +120,7 @@ import { ButtonStyled, CopyCode } from "@modrinth/ui";
import type { Server, ModrinthServersFetchError } from "@modrinth/utils";
import { reloadNuxtApp } from "#app";
import { useServersFetch } from "~/composables/servers/servers-fetch.ts";
+import MedalServerListing from "~/components/ui/servers/marketing/MedalServerListing.vue";
definePageMeta({
middleware: "auth",
diff --git a/packages/assets/generated-icons.ts b/packages/assets/generated-icons.ts
index f01044155..a46160383 100644
--- a/packages/assets/generated-icons.ts
+++ b/packages/assets/generated-icons.ts
@@ -33,6 +33,7 @@ import _ChevronRightIcon from './icons/chevron-right.svg?component'
import _ClearIcon from './icons/clear.svg?component'
import _ClientIcon from './icons/client.svg?component'
import _ClipboardCopyIcon from './icons/clipboard-copy.svg?component'
+import _ClockIcon from './icons/clock.svg?component'
import _CloudIcon from './icons/cloud.svg?component'
import _CodeIcon from './icons/code.svg?component'
import _CoffeeIcon from './icons/coffee.svg?component'
@@ -138,6 +139,7 @@ import _ReplyIcon from './icons/reply.svg?component'
import _ReportIcon from './icons/report.svg?component'
import _RestoreIcon from './icons/restore.svg?component'
import _RightArrowIcon from './icons/right-arrow.svg?component'
+import _RocketIcon from './icons/rocket.svg?component'
import _RotateClockwiseIcon from './icons/rotate-clockwise.svg?component'
import _RotateCounterClockwiseIcon from './icons/rotate-counter-clockwise.svg?component'
import _RssIcon from './icons/rss.svg?component'
@@ -226,6 +228,7 @@ export const ChevronRightIcon = _ChevronRightIcon
export const ClearIcon = _ClearIcon
export const ClientIcon = _ClientIcon
export const ClipboardCopyIcon = _ClipboardCopyIcon
+export const ClockIcon = _ClockIcon
export const CloudIcon = _CloudIcon
export const CodeIcon = _CodeIcon
export const CoffeeIcon = _CoffeeIcon
@@ -331,6 +334,7 @@ export const ReplyIcon = _ReplyIcon
export const ReportIcon = _ReportIcon
export const RestoreIcon = _RestoreIcon
export const RightArrowIcon = _RightArrowIcon
+export const RocketIcon = _RocketIcon
export const RotateClockwiseIcon = _RotateClockwiseIcon
export const RotateCounterClockwiseIcon = _RotateCounterClockwiseIcon
export const RssIcon = _RssIcon
diff --git a/packages/assets/icons/clock.svg b/packages/assets/icons/clock.svg
new file mode 100644
index 000000000..98c2fac7c
--- /dev/null
+++ b/packages/assets/icons/clock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/assets/icons/rocket.svg b/packages/assets/icons/rocket.svg
new file mode 100644
index 000000000..df6c40f36
--- /dev/null
+++ b/packages/assets/icons/rocket.svg
@@ -0,0 +1 @@
+
\ No newline at end of file