From c5f5f69fd6bee11b00225c24c714d55f78b4c21a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com>
Date: Fri, 9 Jan 2026 13:57:28 -0600
Subject: [PATCH] feat: more home page
---
packages/i18n/strings/en.json | 6 +++---
.../website-ue/src/components/Code/index.tsx | 2 +-
.../website-ue/src/components/ColorScale.astro | 2 +-
.../website-ue/src/components/HomeHero.astro | 6 ++++++
.../website-ue/src/components/Text/index.css | 3 +++
.../website-ue/src/components/Text/index.tsx | 18 ++++++++++++++++++
packages/website-ue/src/core/api/abstract.ts | 5 ++---
packages/website-ue/src/core/api/server.ts | 6 ++++--
.../src/core/{react => ui}/classNames.ts | 0
packages/website-ue/src/core/ui/color.ts | 7 +++++++
.../src/pages/api/strings/[locale].json.ts | 15 +++++++++++++++
11 files changed, 60 insertions(+), 10 deletions(-)
create mode 100644 packages/website-ue/src/components/Text/index.css
create mode 100644 packages/website-ue/src/components/Text/index.tsx
rename packages/website-ue/src/core/{react => ui}/classNames.ts (100%)
create mode 100644 packages/website-ue/src/core/ui/color.ts
create mode 100644 packages/website-ue/src/pages/api/strings/[locale].json.ts
diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json
index dbbbff064..4fddae00b 100644
--- a/packages/i18n/strings/en.json
+++ b/packages/i18n/strings/en.json
@@ -1,7 +1,6 @@
{
"common": {
- "name": "BlitzKit",
- "credit": "by TrèsAbhi"
+ "name": "BlitzKit"
},
"units": {
@@ -28,6 +27,7 @@
},
"home": {
- "search": "Search tanks, players, tools..."
+ "search": "Search tanks, players, tools...",
+ "credit": "by TrèsAbhi"
}
}
diff --git a/packages/website-ue/src/components/Code/index.tsx b/packages/website-ue/src/components/Code/index.tsx
index e88699e3b..9c4c911d1 100644
--- a/packages/website-ue/src/components/Code/index.tsx
+++ b/packages/website-ue/src/components/Code/index.tsx
@@ -1,5 +1,5 @@
import type { ComponentProps } from "react";
-import { classNames } from "../../core/react/classNames";
+import { classNames } from "../../core/ui/classNames";
import "./index.css";
export interface CodeProps extends ComponentProps<"code"> {}
diff --git a/packages/website-ue/src/components/ColorScale.astro b/packages/website-ue/src/components/ColorScale.astro
index 0b379e44f..817d00f35 100644
--- a/packages/website-ue/src/components/ColorScale.astro
+++ b/packages/website-ue/src/components/ColorScale.astro
@@ -1,6 +1,6 @@
---
import * as colors from "@radix-ui/colors";
-import type { Color } from "../pages/styles/colors/[accent].css";
+import type { Color } from "../core/ui/color";
interface Props {
color: Color;
diff --git a/packages/website-ue/src/components/HomeHero.astro b/packages/website-ue/src/components/HomeHero.astro
index 3004f4f29..d370371ea 100644
--- a/packages/website-ue/src/components/HomeHero.astro
+++ b/packages/website-ue/src/components/HomeHero.astro
@@ -3,6 +3,7 @@ import { MagnifyingGlassIcon } from "@radix-ui/react-icons";
import { api } from "../core/api/dynamic";
import { BlitzKitIcon } from "../icons/BlitzKit";
import { Code } from "./Code";
+import { Text } from "./Text";
import { TextField } from "./TextField";
interface Props {
@@ -82,6 +83,7 @@ const strings = await api.strings(locale);
.text-field {
width: 100%;
+ max-width: 25rem;
}
}
@@ -96,6 +98,10 @@ const strings = await api.strings(locale);
2.0
+
+
+ {strings.home.credit}
+
diff --git a/packages/website-ue/src/components/Text/index.css b/packages/website-ue/src/components/Text/index.css
new file mode 100644
index 000000000..a53229ffa
--- /dev/null
+++ b/packages/website-ue/src/components/Text/index.css
@@ -0,0 +1,3 @@
+.text {
+ font-size: var(--font-size-regular);
+}
diff --git a/packages/website-ue/src/components/Text/index.tsx b/packages/website-ue/src/components/Text/index.tsx
new file mode 100644
index 000000000..16d63bd97
--- /dev/null
+++ b/packages/website-ue/src/components/Text/index.tsx
@@ -0,0 +1,18 @@
+import type { ComponentProps } from "react";
+import type { Color } from "../../core/ui/color";
+import "./index.css";
+
+export interface TextProps extends ComponentProps<"span"> {
+ color?: Color;
+ lowContrast?: boolean;
+}
+
+export function Text({ color = "gray", lowContrast, ...props }: TextProps) {
+ return (
+
+ );
+}
diff --git a/packages/website-ue/src/core/api/abstract.ts b/packages/website-ue/src/core/api/abstract.ts
index d299f0a2f..550873a87 100644
--- a/packages/website-ue/src/core/api/abstract.ts
+++ b/packages/website-ue/src/core/api/abstract.ts
@@ -32,9 +32,8 @@ export abstract class AbstractAPI {
return await this._strings(locale);
}
async gameStrings(locale: string, prefix: string) {
- const supported = this.assertLocale(locale);
- const blitz = supported.blitz ?? supported.locale;
- return await this._gameStrings(blitz, prefix);
+ this.assertLocale(locale);
+ return await this._gameStrings(locale, prefix);
}
abstract tank(id: string): Promise;
diff --git a/packages/website-ue/src/core/api/server.ts b/packages/website-ue/src/core/api/server.ts
index 3bf265b5f..3836ca856 100644
--- a/packages/website-ue/src/core/api/server.ts
+++ b/packages/website-ue/src/core/api/server.ts
@@ -14,7 +14,9 @@ if (typeof window !== "undefined") {
throw new Error("ServerAPI is being evaluated in the browser");
}
-const globbedStrings = import.meta.glob("../../../../i18n/strings/*.json");
+const globbedStrings = import.meta.glob("../../../../i18n/strings/*.json", {
+ import: "default",
+});
interface LocalizationConfig {
namespaces: string[];
@@ -72,7 +74,7 @@ export class ServerAPI extends AbstractAPI {
Object.assign(
strings,
await fetch(
- `${remoteStorage.url}/${remoteStorage.relative_path}/${namespace}/${locale}.yaml`
+ `${remoteStorage.url}${remoteStorage.relative_path}/${namespace}/${locale}.yaml`
)
.then((response) => response.text())
.then((text) => {
diff --git a/packages/website-ue/src/core/react/classNames.ts b/packages/website-ue/src/core/ui/classNames.ts
similarity index 100%
rename from packages/website-ue/src/core/react/classNames.ts
rename to packages/website-ue/src/core/ui/classNames.ts
diff --git a/packages/website-ue/src/core/ui/color.ts b/packages/website-ue/src/core/ui/color.ts
new file mode 100644
index 000000000..d7401fc7d
--- /dev/null
+++ b/packages/website-ue/src/core/ui/color.ts
@@ -0,0 +1,7 @@
+import type * as colors from "@radix-ui/colors";
+
+const ignoreEndings = ["A", "P3", "Dark", "DarkA", "DarkP3"] as const;
+export type Color = Exclude<
+ keyof typeof colors,
+ `${string}${(typeof ignoreEndings)[number]}` | "__esModule"
+>;
diff --git a/packages/website-ue/src/pages/api/strings/[locale].json.ts b/packages/website-ue/src/pages/api/strings/[locale].json.ts
new file mode 100644
index 000000000..ba1981bfe
--- /dev/null
+++ b/packages/website-ue/src/pages/api/strings/[locale].json.ts
@@ -0,0 +1,15 @@
+import locales from "@blitzkit/i18n/locales.json";
+import type { APIContext, GetStaticPaths } from "astro";
+import { api } from "../../../core/api/dynamic";
+
+export const getStaticPaths = (() => {
+ return locales.supported.map(({ locale }) => ({ params: { locale } }));
+}) satisfies GetStaticPaths;
+
+/**
+ * BlitzKit strings.
+ */
+export async function GET({ params }: APIContext) {
+ const strings = await api.strings(params.locale);
+ return Response.json(strings);
+}