From eed9d23646f4d177c7c0f8c6b747737e03e047cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Mon, 1 Dec 2025 16:58:18 -0600 Subject: [PATCH 01/23] fix: use root node modules --- packages/scripts/src/buildBot.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/scripts/src/buildBot.ts b/packages/scripts/src/buildBot.ts index 527fc7292..38cbf88db 100644 --- a/packages/scripts/src/buildBot.ts +++ b/packages/scripts/src/buildBot.ts @@ -5,7 +5,7 @@ import { argv } from "process"; const projectDir = "../.."; const srcRoot = `${projectDir}/packages/bot`; const distRoot = `${projectDir}/dist/bot`; -const modulesRoot = `${projectDir}/packages/bot/node_modules`; +const modulesRoot = "../../node_modules"; const workers = await readdir(`${srcRoot}/src/workers`); const dev = argv.includes("--dev"); From bfcf183a6e37d7103ae459d8938f2348b5cf45ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Mon, 1 Dec 2025 17:01:19 -0600 Subject: [PATCH 02/23] feat: hide warning --- packages/bot/src/core/discord/localizationObject.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/bot/src/core/discord/localizationObject.ts b/packages/bot/src/core/discord/localizationObject.ts index 2decec43e..637a6d604 100644 --- a/packages/bot/src/core/discord/localizationObject.ts +++ b/packages/bot/src/core/discord/localizationObject.ts @@ -19,9 +19,9 @@ export function localizationObject( (!strict || validNameRegex.test(translation)) && translation.length > 0; if (!isValid) { - console.warn( - `Invalid localization for ${locale} (${path}): ${translation}; skipping...` - ); + // console.warn( + // `Invalid localization for ${locale} (${path}): ${translation}; skipping...` + // ); return localizations; } From e1595833338a21f765ceee27e2181438046fb75e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Mon, 1 Dec 2025 17:02:54 -0600 Subject: [PATCH 03/23] fix: use repos direct --- packages/core/src/blitzkit/getArchivedLatestSeasonNumber.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/blitzkit/getArchivedLatestSeasonNumber.ts b/packages/core/src/blitzkit/getArchivedLatestSeasonNumber.ts index 1b9d60c90..460a81f01 100644 --- a/packages/core/src/blitzkit/getArchivedLatestSeasonNumber.ts +++ b/packages/core/src/blitzkit/getArchivedLatestSeasonNumber.ts @@ -17,7 +17,7 @@ export async function getArchivedLatestSeasonNumber() { if (ratingInfo.detail) { const regionsURL = ( (await fetch( - `https://api.github.com/repos/tresabhi/${assertSecret( + `https://api.github.com/repos/${assertSecret( import.meta.env.PUBLIC_ASSET_REPO )}/git/trees/main` ).then((response) => response.json())) as GitHubTrees From de77e27d506750f354a6958f13edf55fe535687c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Mon, 1 Dec 2025 17:13:26 -0600 Subject: [PATCH 04/23] fix: max 25 seasons --- packages/bot/src/commands/ratingLeaderboard.tsx | 14 +++++++------- packages/scripts/src/buildBot.ts | 7 +++++-- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/bot/src/commands/ratingLeaderboard.tsx b/packages/bot/src/commands/ratingLeaderboard.tsx index 3a9e8eadc..458e70d52 100644 --- a/packages/bot/src/commands/ratingLeaderboard.tsx +++ b/packages/bot/src/commands/ratingLeaderboard.tsx @@ -52,7 +52,7 @@ export const ratingLeaderboardCommand = new Promise( const seasonNumbers = range( FIRST_MINIMAL_ARCHIVED_RATING_SEASON, latestArchivedSeasonNumber + (onGoingSeason ? 1 : 0) + 1 - ); + ).slice(-25); function addOptions(option: SlashCommandSubcommandBuilder) { const { strings } = translator(Locale.EnglishUS); @@ -196,7 +196,7 @@ export const ratingLeaderboardCommand = new Promise( strings.common.leagues as Record )[name] ), - }) satisfies APIApplicationCommandOptionChoice + } satisfies APIApplicationCommandOptionChoice) ) ) .setRequired(true); @@ -219,8 +219,8 @@ export const ratingLeaderboardCommand = new Promise( const season = seasonOption ? parseInt(seasonOption) : onGoingSeason - ? latestArchivedSeasonNumber + 1 - : latestArchivedSeasonNumber; + ? latestArchivedSeasonNumber + 1 + : latestArchivedSeasonNumber; const isCurrentSeason = season === latestArchivedSeasonNumber + 1; let titleName: string; let titleImage: string | undefined; @@ -258,7 +258,7 @@ export const ratingLeaderboardCommand = new Promise( position: player.number, clan: player.clan_tag, nickname: player.nickname, - }) satisfies SimplifiedPlayer + } satisfies SimplifiedPlayer) ) ) : await getArchivedRatingLeaderboard(region, season!).then( @@ -295,7 +295,7 @@ export const ratingLeaderboardCommand = new Promise( .deleted_player, { id: player.id } ), - }) satisfies SimplifiedPlayer + } satisfies SimplifiedPlayer) ); } ); @@ -349,7 +349,7 @@ export const ratingLeaderboardCommand = new Promise( score: player.score, clan: player.clan_tag, nickname: player.nickname, - }) satisfies SimplifiedPlayer + } satisfies SimplifiedPlayer) ) ) : await getArchivedRatingLeaderboard(region, season!).then( diff --git a/packages/scripts/src/buildBot.ts b/packages/scripts/src/buildBot.ts index 38cbf88db..25641a4d3 100644 --- a/packages/scripts/src/buildBot.ts +++ b/packages/scripts/src/buildBot.ts @@ -2,12 +2,15 @@ import { build } from "esbuild"; import { cp, readdir, rm } from "fs/promises"; import { argv } from "process"; +const dev = argv.includes("--dev"); + const projectDir = "../.."; const srcRoot = `${projectDir}/packages/bot`; const distRoot = `${projectDir}/dist/bot`; -const modulesRoot = "../../node_modules"; +const modulesRoot = dev + ? "../../packages/bot/node_modules" + : "../../node_modules"; const workers = await readdir(`${srcRoot}/src/workers`); -const dev = argv.includes("--dev"); await rm(distRoot, { recursive: true, force: true }); From 7708e2c1db1fcd842406a5bd4653ef8e3431a0f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Wed, 3 Dec 2025 17:48:29 -0600 Subject: [PATCH 05/23] feat: add Christmas Garage Guide 2025 and update settings --- .vscode/settings.json | 2 ++ docs/guide/christmas-2025.md | 61 ++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 docs/guide/christmas-2025.md diff --git a/.vscode/settings.json b/.vscode/settings.json index 7304e64d5..e62c3f02c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -65,6 +65,7 @@ "deburr", "decalmask", "decompressor", + "décor", "dedup", "defence", "degressive", @@ -96,6 +97,7 @@ "gameplay", "glsl", "GLTF", + "GSOR", "gtag", "haha", "Herdbreaker", diff --git a/docs/guide/christmas-2025.md b/docs/guide/christmas-2025.md new file mode 100644 index 000000000..3c0f9285b --- /dev/null +++ b/docs/guide/christmas-2025.md @@ -0,0 +1,61 @@ +# Christmas Garage Guide 2025 + +The holiday season has arrived, and this year, the celebrations take over your garage with more than just festive décor. + +![](https://i.imgur.com/HmbDw0x.jpeg) + +## Win Battles, Earn Rewards + +Every victory earns you **3 Hot Coffees**, which you can trade in for Festive Town rewards. + +![](https://i.imgur.com/MXGxejz.jpeg) + +You’ll also be able to claim **2 tank certificates**, one for **tier VII** and one for **tier IX–X** machines. Possible prizes include: + +**Tier VII Certificate Tanks**: [E 25](https://blitzkit.app/tanks/e-25), [CS-52 LIS](https://blitzkit.app/tanks/cs-52-lis), [AMX 13 57](https://blitzkit.app/tanks/amx-13-57), [Steyr WT](https://blitzkit.app/tanks/steyr-wt), [Kunze Panzer](https://blitzkit.app/tanks/kunze-panzer), [Super Hellcat](https://blitzkit.app/tanks/super-hellcat) + +**Tier IX–X Certificate Tanks**: [121B](https://blitzkit.app/tanks/121b), [AMX 30 B](https://blitzkit.app/tanks/amx-30-b), [Obj. 260](https://blitzkit.app/tanks/obj-260), [Char Futur 4](https://blitzkit.app/tanks/char-futur-4), [TL-7-120](https://blitzkit.app/tanks/tl-7-120), [Object 452K](https://blitzkit.app/tanks/object-452k) + +![](https://i.imgur.com/lxr7PE9.png) + +## Upgrade Your Christmas Tree + +Golden tokens let you raise your tree through **four upgrade stages**. A fully upgraded tree grants up to **+25% silver** per battle. + +![](https://i.imgur.com/bcmQE8T.jpeg) + +You’ll also unlock ornament slots, eight in total, on the left-hand side of your screen. + +![](https://i.imgur.com/MMbyYLn.jpeg) + +## Upgrade Your Yuletide Stall + +Your golden tokens can also enhance the **Yuletide Stall**, unlocking rewards at every level. + +![](https://i.imgur.com/AONZN5O.jpeg) + +Here’s how it looks before and after upgrading: + +![](https://i.imgur.com/8fNy0Yj.png) + +## Upgrade Your Shooting Gallery + +Another area to enhance is the **Shooting Gallery**. Upgrading it unlocks new rewards and increases your options for exchanging mastery badges. + +![](https://i.imgur.com/Rj1WNCE.jpeg) + +This is also where you’ll find this year’s Snow Globe replacement, the **Music Box**. + +![](https://i.imgur.com/GAUd2uR.png) + +## The Music Box + +Out with Snow Globes, in with **Music Boxes**. + +![](https://i.imgur.com/sxYV77L.jpeg) + +These offer a chance to earn the brand-new **[GSOR the TANK](https://blitzkit.app/tanks/gsor-the-tank/)** at no cost. + +![](https://i.imgur.com/pGO9lIg.png) + +This year’s Christmas Garage brings a full mix of festive ambience, rewarding progression, and chances at powerful tanks, all wrapped in a set of activities that keep every battle meaningful. Upgrade your locations, collect tokens, and try your luck with Music Boxes to make the most of the event. Dive in, enjoy the celebrations, and make this holiday season your most profitable yet on the battlefield. From b58ca4f594ad74a22890a844e553d235d7f7182d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Wed, 3 Dec 2025 17:49:16 -0600 Subject: [PATCH 06/23] feat: move guide to guides --- docs/{guide => guides}/christmas-2025.md | 0 docs/{guide => guides}/dpm.md | 0 docs/{guide => guides}/embeds.md | 0 docs/{guide => guides}/introduction.md | 0 docs/{guide => guides}/invite.md | 0 docs/{guide => guides}/timezones.md | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename docs/{guide => guides}/christmas-2025.md (100%) rename docs/{guide => guides}/dpm.md (100%) rename docs/{guide => guides}/embeds.md (100%) rename docs/{guide => guides}/introduction.md (100%) rename docs/{guide => guides}/invite.md (100%) rename docs/{guide => guides}/timezones.md (100%) diff --git a/docs/guide/christmas-2025.md b/docs/guides/christmas-2025.md similarity index 100% rename from docs/guide/christmas-2025.md rename to docs/guides/christmas-2025.md diff --git a/docs/guide/dpm.md b/docs/guides/dpm.md similarity index 100% rename from docs/guide/dpm.md rename to docs/guides/dpm.md diff --git a/docs/guide/embeds.md b/docs/guides/embeds.md similarity index 100% rename from docs/guide/embeds.md rename to docs/guides/embeds.md diff --git a/docs/guide/introduction.md b/docs/guides/introduction.md similarity index 100% rename from docs/guide/introduction.md rename to docs/guides/introduction.md diff --git a/docs/guide/invite.md b/docs/guides/invite.md similarity index 100% rename from docs/guide/invite.md rename to docs/guides/invite.md diff --git a/docs/guide/timezones.md b/docs/guides/timezones.md similarity index 100% rename from docs/guide/timezones.md rename to docs/guides/timezones.md From 5484a1507165badde047c88cf32fc572ea72b977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Wed, 3 Dec 2025 17:51:19 -0600 Subject: [PATCH 07/23] fix: standardize import quotes and set maxWidth for PageWrapper --- .../[...locale]/docs/[directory]/[document]/_index.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/website/src/pages/[...locale]/docs/[directory]/[document]/_index.tsx b/packages/website/src/pages/[...locale]/docs/[directory]/[document]/_index.tsx index 921bf79b2..5c1415000 100644 --- a/packages/website/src/pages/[...locale]/docs/[directory]/[document]/_index.tsx +++ b/packages/website/src/pages/[...locale]/docs/[directory]/[document]/_index.tsx @@ -1,5 +1,5 @@ -import { Markdown } from '../../../../../components/Markdown'; -import { PageWrapper } from '../../../../../components/PageWrapper'; +import { Markdown } from "../../../../../components/Markdown"; +import { PageWrapper } from "../../../../../components/PageWrapper"; interface PageProps { content: string; @@ -7,7 +7,7 @@ interface PageProps { export function Page({ content }: PageProps) { return ( - + {content} ); From eca26e1e79af97308ea14cb5c9f87838506684a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Wed, 3 Dec 2025 18:01:05 -0600 Subject: [PATCH 08/23] feat: enhance Christmas Garage Guide 2025 with detailed mechanics and rewards --- docs/guides/christmas-2025.md | 40 ++++++++++++++--------------------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/docs/guides/christmas-2025.md b/docs/guides/christmas-2025.md index 3c0f9285b..7d0de4ef3 100644 --- a/docs/guides/christmas-2025.md +++ b/docs/guides/christmas-2025.md @@ -1,61 +1,53 @@ # Christmas Garage Guide 2025 -The holiday season has arrived, and this year, the celebrations take over your garage with more than just festive décor. +The holiday season has arrived, and this year the celebrations spill directly into your garage, transforming the familiar space into a festive hub filled with activities, rewards, and seasonal flair. Instead of just offering decorations or a visual makeover, this event brings a full set of mechanics that turn everyday battles into a steady stream of progress. Whether you’re aiming for bonuses, collectibles, or new tanks, the garage is designed to make every match feel like part of a larger holiday journey. ![](https://i.imgur.com/HmbDw0x.jpeg) +## The Music Box + +The familiar Snow Globes are absent this year, replaced entirely by **Music Boxes**, which act as the new way to try your luck for seasonal rewards. They behave identically to the Snow Globes and give you a chance to obtain various items, including a shot at the brand-new **[GSOR the TANK](https://blitzkit.app/tanks/gsor-the-tank/)**. + +![](https://i.imgur.com/sxYV77L.jpeg) + ## Win Battles, Earn Rewards -Every victory earns you **3 Hot Coffees**, which you can trade in for Festive Town rewards. +Each victory during the event rewards you with **3 Hot Coffees**, a seasonal currency that serves as the backbone of the progression system. These coffees can be exchanged for a variety of Festive Town rewards, giving you reasons to keep pushing through battles even if you’re just casually playing. ![](https://i.imgur.com/MXGxejz.jpeg) -You’ll also be able to claim **2 tank certificates**, one for **tier VII** and one for **tier IX–X** machines. Possible prizes include: +With the coffees, you’ll also be able to claim **2 tank certificates**, one for **tier VII** vehicles and another covering **tier IX–X** options. -**Tier VII Certificate Tanks**: [E 25](https://blitzkit.app/tanks/e-25), [CS-52 LIS](https://blitzkit.app/tanks/cs-52-lis), [AMX 13 57](https://blitzkit.app/tanks/amx-13-57), [Steyr WT](https://blitzkit.app/tanks/steyr-wt), [Kunze Panzer](https://blitzkit.app/tanks/kunze-panzer), [Super Hellcat](https://blitzkit.app/tanks/super-hellcat) - -**Tier IX–X Certificate Tanks**: [121B](https://blitzkit.app/tanks/121b), [AMX 30 B](https://blitzkit.app/tanks/amx-30-b), [Obj. 260](https://blitzkit.app/tanks/obj-260), [Char Futur 4](https://blitzkit.app/tanks/char-futur-4), [TL-7-120](https://blitzkit.app/tanks/tl-7-120), [Object 452K](https://blitzkit.app/tanks/object-452k) +The tier VII pool includes the [E 25](https://blitzkit.app/tanks/e-25), [CS-52 LIS](https://blitzkit.app/tanks/cs-52-lis), [AMX 13 57](https://blitzkit.app/tanks/amx-13-57), [Steyr WT](https://blitzkit.app/tanks/steyr-wt), [Kunze Panzer](https://blitzkit.app/tanks/kunze-panzer), and [Super Hellcat](https://blitzkit.app/tanks/super-hellcat). Meanwhile, the tier IX–X certificate gives access to higher-tier picks like the [121B](https://blitzkit.app/tanks/121b), [AMX 30 B](https://blitzkit.app/tanks/amx-30-b), [Obj. 260](https://blitzkit.app/tanks/obj-260), [Char Futur 4](https://blitzkit.app/tanks/char-futur-4), [TL-7-120](https://blitzkit.app/tanks/tl-7-120), and [Object 452K](https://blitzkit.app/tanks/object-452k). ![](https://i.imgur.com/lxr7PE9.png) ## Upgrade Your Christmas Tree -Golden tokens let you raise your tree through **four upgrade stages**. A fully upgraded tree grants up to **+25% silver** per battle. +Golden tokens allow you to upgrade your Christmas Tree through **four distinct stages**, each bringing your garage closer to its fully decorated holiday form. A fully upgraded tree grants up to **+25% silver** per battle, turning your regular gameplay into a more profitable experience without requiring extra effort. ![](https://i.imgur.com/bcmQE8T.jpeg) -You’ll also unlock ornament slots, eight in total, on the left-hand side of your screen. +As the tree grows, additional ornament slots open up, eight in total, which appear on the left side of your screen. These slots give you more room to customize the look of your garage and make the tree feel like something you’ve built up piece by piece over the course of the event. Each new ornament adds to the atmosphere, making the progression feel both cosmetic and rewarding. ![](https://i.imgur.com/MMbyYLn.jpeg) ## Upgrade Your Yuletide Stall -Your golden tokens can also enhance the **Yuletide Stall**, unlocking rewards at every level. +Your golden tokens can also be invested into upgrading the **Yuletide Stall**, another element of the garage that evolves as you level it up. Each upgrade unlocks new rewards, giving you incentives to distribute your tokens across different attractions instead of focusing on only one. The stall begins in a simple state, but after upgrades it transforms visually and functionally, becoming a more vibrant part of your garage. ![](https://i.imgur.com/AONZN5O.jpeg) -Here’s how it looks before and after upgrading: +Each upgrade unlocks a tier worth of rewards that you can claim in exchange for Free XP, Gold, Silver, and more Hot Coffees! ![](https://i.imgur.com/8fNy0Yj.png) ## Upgrade Your Shooting Gallery -Another area to enhance is the **Shooting Gallery**. Upgrading it unlocks new rewards and increases your options for exchanging mastery badges. +Another upgradeable area is the **Shooting Gallery**, which contributes its own set of rewards as it levels up. Enhancing the gallery expands your options for exchanging mastery badges, making those badges more useful during the event than they usually are. ![](https://i.imgur.com/Rj1WNCE.jpeg) -This is also where you’ll find this year’s Snow Globe replacement, the **Music Box**. - ![](https://i.imgur.com/GAUd2uR.png) -## The Music Box - -Out with Snow Globes, in with **Music Boxes**. - -![](https://i.imgur.com/sxYV77L.jpeg) - -These offer a chance to earn the brand-new **[GSOR the TANK](https://blitzkit.app/tanks/gsor-the-tank/)** at no cost. - -![](https://i.imgur.com/pGO9lIg.png) - -This year’s Christmas Garage brings a full mix of festive ambience, rewarding progression, and chances at powerful tanks, all wrapped in a set of activities that keep every battle meaningful. Upgrade your locations, collect tokens, and try your luck with Music Boxes to make the most of the event. Dive in, enjoy the celebrations, and make this holiday season your most profitable yet on the battlefield. +Consider yourselves debriefed. Happy holidays! From 6cc44cdfee273727a15e9550c1f0affacf9dcf23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Wed, 3 Dec 2025 18:12:41 -0600 Subject: [PATCH 09/23] feat: add ArticlePlug component for Christmas 2025 promotion --- .../website/src/components/ArticlePlug.astro | 35 +++++++++++++++++++ .../website/src/pages/[...locale]/index.astro | 3 ++ 2 files changed, 38 insertions(+) create mode 100644 packages/website/src/components/ArticlePlug.astro diff --git a/packages/website/src/components/ArticlePlug.astro b/packages/website/src/components/ArticlePlug.astro new file mode 100644 index 000000000..312c81514 --- /dev/null +++ b/packages/website/src/components/ArticlePlug.astro @@ -0,0 +1,35 @@ +--- +import { tankIcon } from "@blitzkit/core"; +import { Flex, Heading, Link, Strong, Text } from "@radix-ui/themes"; +--- + + + + + + + + Christmas 2025 + Win the GSOR the TANK and more! + + + + diff --git a/packages/website/src/pages/[...locale]/index.astro b/packages/website/src/pages/[...locale]/index.astro index f8e4ffbd4..114caf09e 100644 --- a/packages/website/src/pages/[...locale]/index.astro +++ b/packages/website/src/pages/[...locale]/index.astro @@ -6,6 +6,7 @@ import { literals } from "@blitzkit/i18n/src/literals"; import { Box, Flex, Link } from "@radix-ui/themes"; import type { GetStaticPaths } from "astro"; import { AesonPlug } from "../../components/AesonPlug"; +import ArticlePlug from "../../components/ArticlePlug.astro"; import HomeHero from "../../components/HomeHero.astro"; import { Plugs } from "../../components/Plugs"; import ToolCard from "../../components/ToolCard.astro"; @@ -64,6 +65,8 @@ export const getStaticPaths = (() => { + + + + + + - - - - -