diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 24a2f307..a59167d1 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -15,11 +15,12 @@ jobs:
             - run: npm run verify
             - run: npm run lint:ci
             - run: npm run prettier
+            - run: npm run update-translations
             - name: Fail if there are uncommitted changes
               run: |
                   if [[ -n "$(git status --porcelain)" ]]; then
                     echo "Uncommitted changes detected:"
                     git status
-                    git diff
+                    git --no-pager diff
                     exit 1
                   fi
diff --git a/config.json.example b/config.json.example
index 626d2d7b..a813d093 100644
--- a/config.json.example
+++ b/config.json.example
@@ -32,6 +32,7 @@
   "noArgonCrystalDecay": false,
   "noMasteryRankUpCooldown": false,
   "noVendorPurchaseLimits": true,
+  "noKimCooldowns": false,
   "instantResourceExtractorDrones": false,
   "noDojoRoomBuildStage": false,
   "noDecoBuildStage": false,
diff --git a/src/controllers/api/saveDialogueController.ts b/src/controllers/api/saveDialogueController.ts
index 999e0293..7d7d6380 100644
--- a/src/controllers/api/saveDialogueController.ts
+++ b/src/controllers/api/saveDialogueController.ts
@@ -1,4 +1,5 @@
 import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
+import { config } from "@/src/services/configService";
 import { addEmailItem, getInventory, updateCurrency } from "@/src/services/inventoryService";
 import { getAccountIdForRequest } from "@/src/services/loginService";
 import { ICompletedDialogue, IDialogueDatabase } from "@/src/types/inventoryTypes/inventoryTypes";
@@ -24,7 +25,9 @@ export const saveDialogueController: RequestHandler = async (req, res) => {
             throw new Error("bad inventory state");
         }
         const inventoryChanges: IInventoryChanges = {};
-        const tomorrowAt0Utc = (Math.trunc(Date.now() / 86400_000) + 1) * 86400_000;
+        const tomorrowAt0Utc = config.noKimCooldowns
+            ? Date.now()
+            : (Math.trunc(Date.now() / 86400_000) + 1) * 86400_000;
         inventory.DialogueHistory.Dialogues ??= [];
         const dialogue = getDialogue(inventory, request.DialogueName);
         dialogue.Rank = request.Rank;
diff --git a/src/services/configService.ts b/src/services/configService.ts
index 7a3f0b1d..c584a1fb 100644
--- a/src/services/configService.ts
+++ b/src/services/configService.ts
@@ -38,6 +38,7 @@ interface IConfig {
     noArgonCrystalDecay?: boolean;
     noMasteryRankUpCooldown?: boolean;
     noVendorPurchaseLimits?: boolean;
+    noKimCooldowns?: boolean;
     instantResourceExtractorDrones?: boolean;
     noDojoRoomBuildStage?: boolean;
     noDojoDecoBuildStage?: boolean;
diff --git a/static/webui/index.html b/static/webui/index.html
index f46be9ab..38eb3e54 100644
--- a/static/webui/index.html
+++ b/static/webui/index.html
@@ -607,6 +607,10 @@
                                         
                                         
                                     
+                                    
+                                        
+                                        
+                                    
                                     
                                         
                                         
diff --git a/static/webui/translations/de.js b/static/webui/translations/de.js
index 807c2e47..95870e31 100644
--- a/static/webui/translations/de.js
+++ b/static/webui/translations/de.js
@@ -137,6 +137,7 @@ dict = {
     cheats_noArgonCrystalDecay: `Argon-Kristalle verschwinden niemals`,
     cheats_noMasteryRankUpCooldown: `Keine Wartezeit beim Meisterschaftsrangaufstieg`,
     cheats_noVendorPurchaseLimits: `Keine Kaufbeschränkungen bei Händlern`,
+    cheats_noKimCooldowns: `[UNTRANSLATED] No KIM Cooldowns`,
     cheats_instantResourceExtractorDrones: `Sofortige Ressourcen-Extraktor-Drohnen`,
     cheats_noDojoRoomBuildStage: `Kein Dojo-Raum-Bauvorgang`,
     cheats_noDojoDecoBuildStage: `Kein Dojo-Deko-Bauvorgang`,
diff --git a/static/webui/translations/en.js b/static/webui/translations/en.js
index 0962ee33..3c9db66f 100644
--- a/static/webui/translations/en.js
+++ b/static/webui/translations/en.js
@@ -136,6 +136,7 @@ dict = {
     cheats_noArgonCrystalDecay: `No Argon Crystal Decay`,
     cheats_noMasteryRankUpCooldown: `No Mastery Rank Up Cooldown`,
     cheats_noVendorPurchaseLimits: `No Vendor Purchase Limits`,
+    cheats_noKimCooldowns: `No KIM Cooldowns`,
     cheats_instantResourceExtractorDrones: `Instant Resource Extractor Drones`,
     cheats_noDojoRoomBuildStage: `No Dojo Room Build Stage`,
     cheats_noDojoDecoBuildStage: `No Dojo Deco Build Stage`,
diff --git a/static/webui/translations/es.js b/static/webui/translations/es.js
index 8ca358d8..4656a328 100644
--- a/static/webui/translations/es.js
+++ b/static/webui/translations/es.js
@@ -137,6 +137,7 @@ dict = {
     cheats_noArgonCrystalDecay: `Sin descomposición de cristal de Argón`,
     cheats_noMasteryRankUpCooldown: `Sin tiempo de espera para rango de maestría`,
     cheats_noVendorPurchaseLimits: `Sin límite de compras de vendedores`,
+    cheats_noKimCooldowns: `[UNTRANSLATED] No KIM Cooldowns`,
     cheats_instantResourceExtractorDrones: `Drones de extracción de recursos instantáneos`,
     cheats_noDojoRoomBuildStage: `Sin etapa de construcción de sala del dojo`,
     cheats_noDojoDecoBuildStage: `Sin etapa de construcción de decoraciones del dojo`,
diff --git a/static/webui/translations/fr.js b/static/webui/translations/fr.js
index 77d2bcf4..90188be4 100644
--- a/static/webui/translations/fr.js
+++ b/static/webui/translations/fr.js
@@ -137,6 +137,7 @@ dict = {
     cheats_noArgonCrystalDecay: `[UNTRANSLATED] No Argon Crystal Decay`,
     cheats_noMasteryRankUpCooldown: `[UNTRANSLATED] No Mastery Rank Up Cooldown`,
     cheats_noVendorPurchaseLimits: `[UNTRANSLATED] No Vendor Purchase Limits`,
+    cheats_noKimCooldowns: `[UNTRANSLATED] No KIM Cooldowns`,
     cheats_instantResourceExtractorDrones: `Ressources de drone d'extraction instantannées`,
     cheats_noDojoRoomBuildStage: `No Dojo Room Build Stage`,
     cheats_noDojoDecoBuildStage: `[UNTRANSLATED] No Dojo Deco Build Stage`,
diff --git a/static/webui/translations/ru.js b/static/webui/translations/ru.js
index 20410d9e..8682cca4 100644
--- a/static/webui/translations/ru.js
+++ b/static/webui/translations/ru.js
@@ -137,6 +137,7 @@ dict = {
     cheats_noArgonCrystalDecay: `Без распада аргоновых кристаллов`,
     cheats_noMasteryRankUpCooldown: `Повышение ранга мастерства без кулдауна`,
     cheats_noVendorPurchaseLimits: `Отсутствие лимитов на покупки у вендоров`,
+    cheats_noKimCooldowns: `[UNTRANSLATED] No KIM Cooldowns`,
     cheats_instantResourceExtractorDrones: `Мгновенные Экстракторы Ресурсов`,
     cheats_noDojoRoomBuildStage: `Мгновенное Строительтво Комнат Додзё`,
     cheats_noDojoDecoBuildStage: `Мгновенное Строительтво Декораций Додзё`,
diff --git a/static/webui/translations/zh.js b/static/webui/translations/zh.js
index a793c9ec..2f720067 100644
--- a/static/webui/translations/zh.js
+++ b/static/webui/translations/zh.js
@@ -137,6 +137,7 @@ dict = {
     cheats_noArgonCrystalDecay: `[UNTRANSLATED] No Argon Crystal Decay`,
     cheats_noMasteryRankUpCooldown: `[UNTRANSLATED] No Mastery Rank Up Cooldown`,
     cheats_noVendorPurchaseLimits: `[UNTRANSLATED] No Vendor Purchase Limits`,
+    cheats_noKimCooldowns: `[UNTRANSLATED] No KIM Cooldowns`,
     cheats_instantResourceExtractorDrones: `即时资源采集无人机`,
     cheats_noDojoRoomBuildStage: `无视道场房间建造阶段`,
     cheats_noDojoDecoBuildStage: `[UNTRANSLATED] No Dojo Deco Build Stage`,