diff --git a/package-lock.json b/package-lock.json
index 676539af79e..6511b67a101 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
 	"name": "pokemon-rogue-battle",
-	"version": "1.5.2",
+	"version": "1.5.3",
 	"lockfileVersion": 3,
 	"requires": true,
 	"packages": {
 		"": {
 			"name": "pokemon-rogue-battle",
-			"version": "1.5.2",
+			"version": "1.5.3",
 			"hasInstallScript": true,
 			"dependencies": {
 				"@material/material-color-utilities": "^0.2.7",
diff --git a/package.json b/package.json
index 81f01e1d482..169574efc16 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
 	"name": "pokemon-rogue-battle",
 	"private": true,
-	"version": "1.5.2",
+	"version": "1.5.3",
 	"type": "module",
 	"scripts": {
 		"start": "vite",
diff --git a/src/ui/title-ui-handler.ts b/src/ui/title-ui-handler.ts
index 538f78e877e..32669a8bffa 100644
--- a/src/ui/title-ui-handler.ts
+++ b/src/ui/title-ui-handler.ts
@@ -8,6 +8,7 @@ import { TimedEventDisplay } from "#app/timed-event-manager";
 import { version } from "../../package.json";
 import { pokerogueApi } from "#app/plugins/api/pokerogue-api";
 import { globalScene } from "#app/global-scene";
+import { addWindow } from "./ui-theme";
 
 export default class TitleUiHandler extends OptionSelectUiHandler {
   /** If the stats can not be retrieved, use this fallback value */
@@ -19,6 +20,10 @@ export default class TitleUiHandler extends OptionSelectUiHandler {
   private splashMessageText: Phaser.GameObjects.Text;
   private eventDisplay: TimedEventDisplay;
   private appVersionText: Phaser.GameObjects.Text;
+  // -- start temporary maintenance announcement fields --
+  private announcementText: Phaser.GameObjects.Text;
+  private announcementBg: Phaser.GameObjects.NineSlice;
+  // -- end temporary maintenance announcement fields --
 
   private titleStatsTimer: NodeJS.Timeout | null;
 
@@ -75,6 +80,59 @@ export default class TitleUiHandler extends OptionSelectUiHandler {
     this.appVersionText.setOrigin(0.5, 0.5);
     this.appVersionText.setAngle(0);
     this.titleContainer.add(this.appVersionText);
+
+    // #region Temporary Maintenance Announcement
+    const currentLanguage = i18next.resolvedLanguage ?? "en";
+    const getTimeFormat = (): boolean => {
+      switch (currentLanguage) {
+        case "en":
+        case "es-ES":
+        case "ko":
+        case "zh-TW":
+        default:
+          return true; // 12h
+        case "de":
+        case "fr":
+        case "it":
+        case "ja":
+        case "pt-BR":
+        case "zh-CN":
+          return false; // 24h
+      }
+    };
+    const startDate = new Date(1738994400000);
+    const endDate = new Date(1739167200000);
+    const dateOptions: Intl.DateTimeFormatOptions = {
+      dateStyle: "short",
+      timeStyle: "short",
+      hour12: getTimeFormat(),
+    };
+    const startDateLocalized = new Intl.DateTimeFormat(currentLanguage, dateOptions).format(startDate);
+    const endDateLocalized = new Intl.DateTimeFormat(currentLanguage, dateOptions).format(endDate);
+    const localizedAnnouncementString: { [key: string]: string } = {
+      "en": ` - INFORMATION -\nServer maintenance is scheduled for the following period:\n${startDateLocalized} until ${endDateLocalized}\nEnd date and hour are an estimate.\nMaintenance may end at an earlier or later time.`,
+      "de": `- INFORMATION -\nServerwartung ist für den folgenden Zeitraum geplant:\n${startDateLocalized} bis ${endDateLocalized}\nEnddatum und Uhrzeit sind eine Schätzung.\nDie Wartung kann früher oder später beendet werden.`,
+      "es-ES": ` - INFORMACIÓN -\nUn mantenimiento del servidor está programado para el siguiente período:\nDesde el ${startDateLocalized} hasta el ${endDateLocalized}.\nLa fecha y hora de finalización son aproximadas.\nEl mantenimiento podría finalizar antes o extenderse más de lo previsto.`,
+      "fr": ` - INFORMATION -\nUne maintenance du serveur est prévue sur la période suivante :\nDu ${startDateLocalized} au ${endDateLocalized}\nL’heure de fin est une estimation et peut s’avérer plus en avance ou tardive qu’annoncé.`,
+      "it": ` - ANNUNCIO -\nUna manutenzione del server avrà luogo nel periodo seguente:\nDal ${startDateLocalized} al ${endDateLocalized}\nData e ora di fine manutenzione sono una stima,\npotrebbe terminare in anticipo o più tardi.`,
+      "pt-BR": ` - INFORMATION -\nServer maintenance is scheduled for the following period:\n${startDateLocalized} until ${endDateLocalized}\nEnd date and hour are an estimate.\nMaintenance may end at an earlier or later time.`,
+      "zh-TW": ` - 通知 -\n伺服器預計在以下時間維護:\n${startDateLocalized} 至 ${endDateLocalized}\n維護結束時間是預計時間\n維護可能稍早或稍晚結束。`,
+      "zh-CN": ` - 通知 -\n服务器预计在以下时间维护:\n${startDateLocalized} 至 ${endDateLocalized}\n维护结束时间是预计时间\n维护可能稍早或稍晚结束。`,
+      "ko": ` - 공지사항 -\n아래 기간동안 점검 예정입니다. :\n${startDateLocalized} ~ ${endDateLocalized}\n종료시각은 예상시간입니다.\n점검은 예상했던 것보다 빠르게 혹은 늦게  끝날 수 있습니다.`,
+      "ja": ` - 情報 -\nサーバーメンテナンスの予定は以下の期間:\n${startDateLocalized} から ${endDateLocalized} まで\n終了日・時間は推定です。\nメンテナンスはこの時期より早く終了する場合も\n遅く終了する場合もあります。`,
+    };
+    const announcementString = localizedAnnouncementString[Object.keys(localizedAnnouncementString).find(lang => currentLanguage.includes(lang)) ?? "en"];
+    this.announcementText = addTextObject(logo.x - 148, logo.y + logo.displayHeight + 116, announcementString, TextStyle.MONEY, { fontSize: "76px", wordWrap: { width: 200 * 6 }});
+    this.announcementText.setOrigin(0, 1);
+    this.announcementText.setAngle(0);
+    const heightOffset = currentLanguage === "ja" ? -2 : 12;
+    this.announcementBg = addWindow(this.announcementText.x - 8, this.announcementText.y + 6, this.announcementText.width / 6 + 14, this.announcementText.height / 6 + heightOffset);
+    this.announcementBg.setName("announcement-bg");
+    this.announcementBg.setOrigin(0, 1);
+    this.titleContainer.add(this.announcementText);
+    this.titleContainer.add(this.announcementBg);
+    this.titleContainer.bringToTop(this.announcementText);
+    // #endregion
   }
 
   updateTitleStats(): void {