Files
blitzkit/packages/website/src/pages/[...locale]/index.astro
T

132 lines
3.5 KiB
Plaintext
Raw Normal View History

2024-09-14 12:18:30 -05:00
---
2025-09-13 21:54:43 -05:00
import { AstroSeo } from "@astrolib/seo";
import { assertSecret } from "@blitzkit/core";
2025-09-27 15:38:37 -05:00
import locales from "@blitzkit/i18n/locales.json";
2025-09-13 21:54:43 -05:00
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 HomeHero from "../../components/HomeHero.astro";
import { Plugs } from "../../components/Plugs";
import ToolCard from "../../components/ToolCard.astro";
2025-09-13 22:53:29 -05:00
import { tools, type Tool } from "../../constants/tools";
2025-09-13 21:54:43 -05:00
import { getStrings } from "../../core/i18n/getStrings";
import BaseLayout from "../../layouts/BaseLayout.astro";
const MAX_TOOLS_PER_ROW = 2;
2024-11-22 10:50:35 -06:00
2025-06-08 17:32:13 +00:00
const PUBLIC_ASSET_BRANCH = assertSecret(import.meta.env.PUBLIC_BRANCH);
2025-10-22 17:52:01 -05:00
const { locale } = Astro.props;
const strings = getStrings(locale);
2025-09-13 21:54:43 -05:00
const rows: Tool[][] = [];
2025-09-13 22:53:29 -05:00
for (const id in tools) {
const tool = tools[id];
if ("disabled" in tool && tool.disabled) continue;
2025-09-13 21:54:43 -05:00
const compatibleRow = rows.find(
2025-09-13 22:53:29 -05:00
(row) =>
row.length < MAX_TOOLS_PER_ROW &&
!("significant" in row[0] && row[0].significant)
2025-09-13 21:54:43 -05:00
);
if (compatibleRow) {
compatibleRow.push(tool);
} else {
rows.push([tool]);
}
}
2024-12-27 12:38:38 -06:00
export const getStaticPaths = (() => {
return [
2025-09-27 15:38:37 -05:00
...locales.supported
.filter(({ locale }) => locale !== locales.default)
2025-10-22 17:52:01 -05:00
.map(({ locale }) => ({ params: { locale }, props: { locale } })),
{ params: { locale: undefined }, props: { locale: locales.default } },
2024-12-27 12:38:38 -06:00
];
}) satisfies GetStaticPaths;
2024-09-14 13:24:24 -05:00
---
2024-09-14 12:18:30 -05:00
2025-04-03 12:34:02 -05:00
<AstroSeo
title="BlitzKit"
description={strings.website.home.seo_description}
2025-04-03 12:45:33 -05:00
canonical={Astro.url.href}
2025-04-03 12:34:02 -05:00
openGraph={{
2025-04-03 12:45:33 -05:00
url: Astro.url.href,
2025-09-13 21:54:43 -05:00
title: "BlitzKit",
2025-04-03 12:45:33 -05:00
description: strings.website.home.seo_description,
2025-09-13 21:54:43 -05:00
site_name: "BlitzKit",
2025-04-03 12:34:02 -05:00
}}
2025-09-13 21:54:43 -05:00
twitter={{ cardType: "summary_large_image" }}
2025-04-03 12:34:02 -05:00
/>
2025-01-15 13:10:57 -06:00
2025-10-22 17:52:01 -05:00
<BaseLayout {locale}>
2024-09-14 19:43:14 -05:00
<HomeHero />
2024-09-14 12:18:30 -05:00
2025-05-07 19:42:49 -05:00
<!-- <Flex justify="center" py="6" px="4" justify="center">
2025-04-02 17:48:51 -05:00
<Flex
wrap="wrap"
justify="between"
maxWidth="64rem"
gap="6"
align="center"
flexGrow="1"
>
<HomeLocaleSwitcher {locale} client:load />
2025-04-02 17:59:23 -05:00
<DiscordPlug {locale} client:only="react">
<DiscordPlug {locale} skeleton slot="fallback" />
</DiscordPlug>
2025-04-02 17:48:51 -05:00
</Flex>
2025-05-07 19:42:49 -05:00
</Flex> -->
2024-12-29 20:19:51 -06:00
2025-01-14 20:19:37 -06:00
{
2025-09-27 15:38:37 -05:00
locale !== locales.default && (
2025-01-14 20:19:37 -06:00
<Flex justify="center" mb="4">
<Link
href="https://crowdin.com/project/blitzkrieg"
target="_blank"
underline="always"
>
2025-10-02 10:15:38 -05:00
{literals(strings.website.home.help_translate, {
name: "BlitzKit",
language:
strings.common.locales[
locale as keyof typeof strings.common.locales
],
})}
2025-01-14 20:19:37 -06:00
</Link>
</Flex>
)
}
2024-10-13 00:26:38 -05:00
<Plugs client:idle />
2024-09-14 13:24:24 -05:00
2024-11-22 10:50:35 -06:00
{
2025-09-13 21:54:43 -05:00
PUBLIC_ASSET_BRANCH === "preview" && (
2024-11-22 10:50:35 -06:00
<Flex justify="center" my="8" px="4">
<AesonPlug />
</Flex>
)
}
2024-10-20 01:01:54 -05:00
<Flex p="4" justify="center" gap="4" mt="3">
2025-04-03 12:15:08 -05:00
<Flex maxWidth="80rem" flexGrow="1" gap="4" direction="column">
2025-09-13 21:54:43 -05:00
{
rows.map((row) => (
<Flex gap="4" direction={{ initial: "column", sm: "row" }}>
{row.map((tool) => (
2025-09-13 22:53:29 -05:00
<ToolCard {tool} />
2025-09-13 21:54:43 -05:00
))}
2025-09-13 22:53:29 -05:00
{row.length < MAX_TOOLS_PER_ROW &&
!("significant" in row[0] && row[0].significant) && (
<Box flexGrow="1" />
)}
2025-09-13 21:54:43 -05:00
</Flex>
))
}
2024-09-14 13:24:24 -05:00
</Flex>
2024-09-14 19:43:14 -05:00
</Flex>
2024-09-14 13:24:24 -05:00
2024-09-14 19:43:14 -05:00
<div style={{ flex: 1 }}></div>
2024-10-12 22:07:59 -05:00
</BaseLayout>