diff --git a/_package.json b/_package.json
index 3bd098140..d8adc0af6 100644
--- a/_package.json
+++ b/_package.json
@@ -76,7 +76,6 @@
"@types/three": "^0.160.0",
"astro-compressor": "^1.0.0",
"@astrojs/partytown": "^2.1.4",
- "@astrolib/seo": "^1.0.0-beta.8",
"@fontsource/inter": "^5.2.5",
"@nanostores/persistent": "^0.10.2",
"@nanostores/react": "^0.7.3",
diff --git a/packages/website-ue/package.json b/packages/website-ue/package.json
index d4fbed284..24d0eb79d 100644
--- a/packages/website-ue/package.json
+++ b/packages/website-ue/package.json
@@ -11,6 +11,7 @@
"@radix-ui/colors": "^3.0.0",
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/themes": "^3.1.4",
+ "@astrolib/seo": "^1.0.0-beta.8",
"@blitzkit/core": "workspace:*",
"@blitzkit/closed": "workspace:*",
"@astrojs/react": "^4.3.0",
diff --git a/packages/website-ue/public/assets/morphing-diamonds.svg b/packages/website-ue/public/assets/morphing-diamonds.svg
new file mode 100644
index 000000000..de53531ce
--- /dev/null
+++ b/packages/website-ue/public/assets/morphing-diamonds.svg
@@ -0,0 +1,11 @@
+
diff --git a/packages/website-ue/public/assets/tool-backgrounds/charts.webp b/packages/website-ue/public/assets/tool-backgrounds/charts.webp
new file mode 100644
index 000000000..1d9e0538a
Binary files /dev/null and b/packages/website-ue/public/assets/tool-backgrounds/charts.webp differ
diff --git a/packages/website-ue/public/assets/tool-backgrounds/compare.webp b/packages/website-ue/public/assets/tool-backgrounds/compare.webp
new file mode 100644
index 000000000..b24df602f
Binary files /dev/null and b/packages/website-ue/public/assets/tool-backgrounds/compare.webp differ
diff --git a/packages/website-ue/public/assets/tool-backgrounds/discord.webp b/packages/website-ue/public/assets/tool-backgrounds/discord.webp
new file mode 100644
index 000000000..739ed8bc3
Binary files /dev/null and b/packages/website-ue/public/assets/tool-backgrounds/discord.webp differ
diff --git a/packages/website-ue/public/assets/tool-backgrounds/embed.webp b/packages/website-ue/public/assets/tool-backgrounds/embed.webp
new file mode 100644
index 000000000..5675f84a2
Binary files /dev/null and b/packages/website-ue/public/assets/tool-backgrounds/embed.webp differ
diff --git a/packages/website-ue/public/assets/tool-backgrounds/gallery.webp b/packages/website-ue/public/assets/tool-backgrounds/gallery.webp
new file mode 100644
index 000000000..c8cdc346e
Binary files /dev/null and b/packages/website-ue/public/assets/tool-backgrounds/gallery.webp differ
diff --git a/packages/website-ue/public/assets/tool-backgrounds/guess.webp b/packages/website-ue/public/assets/tool-backgrounds/guess.webp
new file mode 100644
index 000000000..3453b25f9
Binary files /dev/null and b/packages/website-ue/public/assets/tool-backgrounds/guess.webp differ
diff --git a/packages/website-ue/public/assets/tool-backgrounds/more.webp b/packages/website-ue/public/assets/tool-backgrounds/more.webp
new file mode 100644
index 000000000..2555eb689
Binary files /dev/null and b/packages/website-ue/public/assets/tool-backgrounds/more.webp differ
diff --git a/packages/website-ue/public/assets/tool-backgrounds/performance.webp b/packages/website-ue/public/assets/tool-backgrounds/performance.webp
new file mode 100644
index 000000000..917d281d4
Binary files /dev/null and b/packages/website-ue/public/assets/tool-backgrounds/performance.webp differ
diff --git a/packages/website-ue/public/assets/tool-backgrounds/players.webp b/packages/website-ue/public/assets/tool-backgrounds/players.webp
new file mode 100644
index 000000000..a71fc9721
Binary files /dev/null and b/packages/website-ue/public/assets/tool-backgrounds/players.webp differ
diff --git a/packages/website-ue/public/assets/tool-backgrounds/rating.webp b/packages/website-ue/public/assets/tool-backgrounds/rating.webp
new file mode 100644
index 000000000..8d3fa44d5
Binary files /dev/null and b/packages/website-ue/public/assets/tool-backgrounds/rating.webp differ
diff --git a/packages/website-ue/public/assets/tool-backgrounds/session.webp b/packages/website-ue/public/assets/tool-backgrounds/session.webp
new file mode 100644
index 000000000..64e7f5caf
Binary files /dev/null and b/packages/website-ue/public/assets/tool-backgrounds/session.webp differ
diff --git a/packages/website-ue/public/assets/tool-backgrounds/tanks.webp b/packages/website-ue/public/assets/tool-backgrounds/tanks.webp
new file mode 100644
index 000000000..f5ffb5992
Binary files /dev/null and b/packages/website-ue/public/assets/tool-backgrounds/tanks.webp differ
diff --git a/packages/website-ue/public/assets/tool-backgrounds/tier-list.webp b/packages/website-ue/public/assets/tool-backgrounds/tier-list.webp
new file mode 100644
index 000000000..4cc334352
Binary files /dev/null and b/packages/website-ue/public/assets/tool-backgrounds/tier-list.webp differ
diff --git a/packages/website-ue/src/components/HomeHero.astro b/packages/website-ue/src/components/HomeHero.astro
new file mode 100644
index 000000000..1a6ec5c50
--- /dev/null
+++ b/packages/website-ue/src/components/HomeHero.astro
@@ -0,0 +1,156 @@
+---
+import { Code, Flex, Heading, Text } from '@radix-ui/themes';
+import { resolveBranchName } from '../core/blitzkit/branches';
+import { getStrings } from '../core/i18n/getStrings';
+import { literals } from '@blitzkit/i18n/src/literals';
+
+interface Props {
+ locale: string;
+}
+
+const { locale } = Astro.props;
+const strings = await getStrings(locale);
+const branchName = resolveBranchName();
+const isBranchNamed = branchName !== undefined;
+---
+
+
+
+
+
+
+
+
+
+
+ BlitzKit
+ {
+ isBranchNamed && (
+
+ {branchName}
+
+ )
+ }
+
+
+
+ {literals(strings.website.home.hero.credit, ['TrèsAbhi'])}
+
+
+
diff --git a/packages/website-ue/src/components/ToolCard.astro b/packages/website-ue/src/components/ToolCard.astro
new file mode 100644
index 000000000..a08983269
--- /dev/null
+++ b/packages/website-ue/src/components/ToolCard.astro
@@ -0,0 +1,136 @@
+---
+import { assertSecret } from '@blitzkit/core';
+import { CaretRightIcon } from '@radix-ui/react-icons';
+import { Box, Button, Code, Flex, Heading, Text } from '@radix-ui/themes';
+import type { Tool } from '../constants/tools';
+import { getStrings } from '../core/i18n/getStrings';
+import { LinkI18n } from './LinkI18n';
+
+interface Props {
+ tool: Tool;
+ locale: string;
+}
+
+const { tool, locale } = Astro.props;
+const strings = await getStrings(locale);
+const disabled = false;
+const toolStrings =
+ strings.website.tools[
+ (tool.strings ?? tool.id) as keyof typeof strings.website.tools
+ ];
+---
+
+
+
+
+
+
+
+
+
+
+ {toolStrings.name}
+
+
+ {
+ disabled ? (
+ <>
+ Unavailable on{' '}
+ {assertSecret(import.meta.env.PUBLIC_ASSET_BRANCH)}
+ >
+ ) : (
+ toolStrings.description
+ )
+ }
+
+
+
+ {
+ !disabled && (
+
+ )
+ }
+
+
+
diff --git a/packages/website-ue/src/constants/tools.ts b/packages/website-ue/src/constants/tools.ts
index d6d97c79e..cdd0c6f47 100644
--- a/packages/website-ue/src/constants/tools.ts
+++ b/packages/website-ue/src/constants/tools.ts
@@ -1,6 +1,6 @@
import type { ButtonProps } from '@radix-ui/themes';
-interface Tool {
+export interface Tool {
id: string;
enabled: boolean;
strings?: string;
@@ -8,7 +8,7 @@ interface Tool {
button: { color: ButtonProps['color']; contrast?: boolean };
}
-export const tanks: Tool = {
+export const tanksTool: Tool = {
id: 'tanks',
enabled: true,
strings: 'tankopedia',
@@ -16,70 +16,70 @@ export const tanks: Tool = {
button: { color: 'purple' },
};
-export const compare: Tool = {
+export const compareTool: Tool = {
id: 'compare',
enabled: true,
button: { color: 'crimson' },
};
-export const performance: Tool = {
+export const performanceTool: Tool = {
id: 'performance',
enabled: true,
button: { color: 'jade' },
};
-export const guess: Tool = {
+export const guessTool: Tool = {
id: 'guess',
enabled: false,
button: { color: 'bronze' },
};
-export const charts: Tool = {
+export const chartsTool: Tool = {
id: 'charts',
enabled: false,
button: { color: 'bronze' },
};
-export const gallery: Tool = {
+export const galleryTool: Tool = {
id: 'gallery',
enabled: true,
button: { color: 'gold' },
};
-export const session: Tool = {
+export const sessionTool: Tool = {
id: 'session',
enabled: true,
button: { color: 'blue' },
};
-export const tierList: Tool = {
+export const tierListTool: Tool = {
id: 'tier-list',
enabled: true,
strings: 'tier_list',
button: { color: 'orange' },
};
-export const embed: Tool = {
+export const embedTool: Tool = {
id: 'embed',
enabled: true,
button: { color: 'cyan' },
};
-export const rating: Tool = {
+export const ratingTool: Tool = {
id: 'rating',
enabled: false,
button: { color: 'orange' },
};
export const tools: Tool[] = [
- tanks,
- compare,
- performance,
- guess,
- charts,
- gallery,
- session,
- tierList,
- embed,
- rating,
+ tanksTool,
+ compareTool,
+ performanceTool,
+ guessTool,
+ chartsTool,
+ galleryTool,
+ sessionTool,
+ tierListTool,
+ embedTool,
+ ratingTool,
];
diff --git a/packages/website-ue/src/core/blitzkit/branches.ts b/packages/website-ue/src/core/blitzkit/branches.ts
index 841d7ea5e..d78a374c1 100644
--- a/packages/website-ue/src/core/blitzkit/branches.ts
+++ b/packages/website-ue/src/core/blitzkit/branches.ts
@@ -1,6 +1,6 @@
import { assertSecret } from 'packages/core/src';
-export function resolveBranchName(locale: string) {
+export function resolveBranchName() {
if (assertSecret(import.meta.env.PUBLIC_ASSET_BRANCH) === 'main') {
return undefined;
}
diff --git a/packages/website-ue/src/pages/[...locale]/index.astro b/packages/website-ue/src/pages/[...locale]/index.astro
index 2c38fd6f7..66a053285 100644
--- a/packages/website-ue/src/pages/[...locale]/index.astro
+++ b/packages/website-ue/src/pages/[...locale]/index.astro
@@ -1,6 +1,18 @@
---
+import { AstroSeo } from '@astrolib/seo';
import locales from '@blitzkit/i18n/locales.json';
+import { ExternalLinkIcon } from '@radix-ui/react-icons';
+import { Flex, Link } from '@radix-ui/themes';
import type { GetStaticPaths } from 'astro';
+import { literals } from 'packages/i18n/src';
+import HomeHero from '../../components/HomeHero.astro';
+import ToolCard from '../../components/ToolCard.astro';
+import { type Tool, tools } from '../../constants/tools';
+import { getStrings } from '../../core/i18n/getStrings';
+import { Var } from '../../core/radix/var';
+import BaseLayout from '../../layouts/BaseLayout.astro';
+
+const MAX_TOOLS_PER_ROW = 2;
export const getStaticPaths = (() => {
return locales.supported.map(({ locale, blitz }) => ({
@@ -10,6 +22,92 @@ export const getStaticPaths = (() => {
}) satisfies GetStaticPaths;
const { locale } = Astro.props;
+const strings = await getStrings(locale);
+const rows: Tool[][] = [];
+
+toolLoop: for (const tool of tools.filter((tool) => tool.enabled)) {
+ if (tool.significant) {
+ rows.push([tool]);
+ } else {
+ for (const row of rows) {
+ if (!row[0]?.significant && row.length < MAX_TOOLS_PER_ROW) {
+ row.push(tool);
+ continue toolLoop;
+ }
+ }
+
+ rows.push([tool]);
+ }
+}
---
-Hello in {locale}!
+
+
+
+
+
+
+ {
+ locale !== locales.default && (
+
+
+
+ {literals(strings.website.home.help_translate, [
+ 'BlitzKit',
+ strings.common.locales[
+ locale as keyof typeof strings.common.locales
+ ],
+ ])}
+
+
+
+
+
+ )
+ }
+
+
+
+ {
+ rows.map((row) => (
+
+ {row.map((tool) => (
+
+ ))}
+
+ ))
+ }
+
+
+
+