From a70d788f6b96f758d8e13b91dce2b858f381db6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Fri, 28 Nov 2025 13:00:41 -0600 Subject: [PATCH] feat: init ue website --- bun.lock | 39 ++++++++++ package.json | 10 +-- packages/website-ue/astro.config.ts | 114 ++++++++++++++++++++++++++++ packages/website-ue/package.json | 43 +++++++++++ packages/website-ue/tsconfig.json | 3 + 5 files changed, 204 insertions(+), 5 deletions(-) create mode 100644 packages/website-ue/astro.config.ts create mode 100644 packages/website-ue/package.json create mode 100644 packages/website-ue/tsconfig.json diff --git a/bun.lock b/bun.lock index fe5ea60ce..1991184bd 100644 --- a/bun.lock +++ b/bun.lock @@ -175,6 +175,41 @@ "vite": "^7.1.9", }, }, + "packages/website-ue": { + "name": "@blitzkit/website-ue", + "dependencies": { + "@astrojs/check": "^0.9.4", + "@astrojs/node": "^9.4.4", + "@astrojs/react": "^4.4.0", + "@astrolib/seo": "^1.0.0-beta.8", + "@blitzkit/core": "workspace:*", + "@blitzkit/i18n": "workspace:*", + "@radix-ui/colors": "^3.0.0", + "@radix-ui/react-icons": "^1.3.2", + "@radix-ui/themes": "^3.2.1", + "@react-three/drei": "^10.7.6", + "@react-three/fiber": "^9.4.0", + "@types/lodash-es": "^4.17.12", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "@types/three": "^0.180.0", + "@vite-pwa/astro": "^1.1.0", + "astro": "^5.14.4", + "astro-favicons": "^3.1.5", + "fuzzysort": "^3.1.0", + "immer": "^10.1.3", + "lodash-es": "^4.17.21", + "quicklime": "^1.2.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-promise-suspense": "^0.3.4", + "three": "^0.180.0", + "three-stdlib": "^2.36.0", + "typescript": "^5.9.3", + "varuna": "workspace:*", + "vite": "^7.1.9", + }, + }, }, "packages": { "@apideck/better-ajv-errors": ["@apideck/better-ajv-errors@0.3.6", "", { "dependencies": { "json-schema": "^0.4.0", "jsonpointer": "^5.0.0", "leven": "^3.1.0" }, "peerDependencies": { "ajv": ">=8" } }, "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA=="], @@ -403,6 +438,8 @@ "@blitzkit/website": ["@blitzkit/website@workspace:packages/website"], + "@blitzkit/website-ue": ["@blitzkit/website-ue@workspace:packages/website-ue"], + "@bufbuild/protobuf": ["@bufbuild/protobuf@2.10.0", "", {}, "sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ=="], "@capsizecss/unpack": ["@capsizecss/unpack@3.0.0", "", { "dependencies": { "fontkit": "^2.0.2" } }, "sha512-+ntATQe1AlL7nTOYjwjj6w3299CgRot48wL761TUGYpYgAou3AaONZazp0PKZyCyWhudWsjhq1nvRHOvbMzhTA=="], @@ -2615,6 +2652,8 @@ "@blitzkit/website/vite": ["vite@7.1.9", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg=="], + "@blitzkit/website-ue/vite": ["vite@7.1.9", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg=="], + "@discordjs/rest/@discordjs/collection": ["@discordjs/collection@2.1.1", "", {}, "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg=="], "@discordjs/ws/@discordjs/collection": ["@discordjs/collection@2.1.1", "", {}, "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg=="], diff --git a/package.json b/package.json index b672263dc..e048da45c 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "build:assets": "cd packages/scripts && bun run build:assets", "build:averages": "bun --filter=@blitzkit/scripts run build:averages", "build:bot": "cd packages/scripts && bun run build:bot", - "build:website": "cd packages/website && bun run build", + "build:website": "cd packages/website-ue && bun run build", "build:prisma": "prisma generate", "build:proxyclient": "cd packages/scripts && bun run build:proxyclient", "build:catalogitemaccesssor": "cd packages/scripts && bun run build:catalogitemaccesssor", @@ -16,22 +16,22 @@ "dev:bot": "bun run build:bot --dev && bun start:bot", "start:bot": "bun dist/bot/main.js", "dev:docs": "vitepress dev docs", - "dev:website": "cd packages/website && bun run dev", + "dev:website": "cd packages/website-ue && bun run dev", "dev:app": "cd packages/app && bun run dev", "dev": "bun run dev:website", "dev:api": "bun --filter=@blitzkit/api run dev", "setup:depotdownloader": "bun --filter=@blitzkit/scripts run setup:depotdownloader", "setup:patches": "bun --filter=@blitzkit/scripts run setup:patches", - "start:website": "bun --filter=@blitzkit/website run start", + "start:website": "bun --filter=@blitzkit/website-ue run start", "host:docs": "vitepress preview docs", "lint": "tsc", - "lint:website": "cd packages/website && bun run lint", + "lint:website": "cd packages/website-ue && bun run lint", "format": "prettier --write \"**/*.@(json|js|jsx|css|md|ts|tsx|html|xml|yml|gltf)\"", "update": "yarn upgrade --latest", "tunnel": "cloudflared tunnel --url http://localhost:3000", "discoverids": "scripts/discoverIds.ts", "build:protos": "cd packages/scripts && bun run build:protos", - "preview:website": "cd packages/website && bun run preview", + "preview:website": "cd packages/website-ue && bun run preview", "build:reviews": "cd packages/scripts && bun build:reviews", "build:ids": "cd packages/scripts && bun build:ids", "prunestrings": "cd packages/scripts && bun prunestrings", diff --git a/packages/website-ue/astro.config.ts b/packages/website-ue/astro.config.ts new file mode 100644 index 000000000..07c0b288d --- /dev/null +++ b/packages/website-ue/astro.config.ts @@ -0,0 +1,114 @@ +import node from "@astrojs/node"; +import react from "@astrojs/react"; +import { wrapper } from "@blitzkit/i18n"; +import locales from "@blitzkit/i18n/locales.json"; +import strings from "@blitzkit/i18n/strings/en.json"; +import { mauve, mauveDark } from "@radix-ui/colors"; +import AstroPWA from "@vite-pwa/astro"; +import favicons from "astro-favicons"; +import { defineConfig } from "astro/config"; +import packageJSON from "../../package.json"; +import { tools } from "./src/constants/tools"; + +const POSSIBLE_TARGETS = ["app", "web"]; + +const target = process.env.PUBLIC_TARGET ; + +if (!target || !POSSIBLE_TARGETS.includes(target)) { + throw new Error("Invalid target"); +} + +export default defineConfig({ + devToolbar: { enabled: false }, + + vite: { server: { allowedHosts: [] } }, + output: target === "web" ? "static" : "server", + site: "https://blitzkit.app", + outDir: "../../dist/website", + prefetch: { defaultStrategy: "hover", prefetchAll: true }, + + build: { concurrency: 4 }, + adapter: target === "app" ? node({ mode: "standalone" }) : undefined, + + integrations: [ + favicons({ + name: strings.common.name, + short_name: strings.common.name, + + background: mauveDark.mauve1, + themes: [mauve.mauve1, mauveDark.mauve1], + appleStatusBarStyle: "black-translucent", + + version: packageJSON.version, + + shortcuts: Object.values(tools) + .filter((tool) => !tool.disabled && !tool.href) + .map((tool) => { + const stringId = (tool.strings ?? + tool.id) as keyof typeof strings.website.tools; + + return { + name: strings.website.tools[stringId].name, + name_localized: wrapper( + (strings) => strings.website.tools[stringId].name + ), + description: strings.website.tools[stringId].description, + description_localized: wrapper( + (strings) => strings.website.tools[stringId].description + ), + short_name: strings.website.tools[stringId].name, + short_name_localized: wrapper( + (strings) => strings.website.tools[stringId].name + ), + url: `/${tool.id}`, + icon: `public/assets/images/tools/${tool.id}.webp`, + }; + }), + + manifest: { + description: strings.website.home.seo_description, + description_localized: wrapper( + (strings) => strings.website.home.seo_description + ), + + dir: "ltr", + categories: ["utilities", "games", "developer", "developer tools"], + + id: "com.tresabhi.blitzkit", + start_url: "/", + launch_handler: { client_mode: "navigate-new" }, + display: "fullscreen", + display_override: ["fullscreen", "standalone", "minimal-ui"], + + lang: locales.default, + orientation: "any", + }, + + icons: { + windows: true, + android: true, + appleIcon: true, + appleStartup: true, + favicons: true, + yandex: true, + }, + }), + + AstroPWA({ + manifest: false, + devOptions: { enabled: true }, + workbox: { + globPatterns: ["**/*.{html,css,js,png,webp,svg,xml,json}"], + runtimeCaching: [ + { + urlPattern: ({ url }) => + url.href.startsWith(import.meta.env.PUBLIC_ASSET_BASE), + handler: "NetworkFirst", + }, + ], + }, + }), + + react(), + ], +}); diff --git a/packages/website-ue/package.json b/packages/website-ue/package.json new file mode 100644 index 000000000..f29256edc --- /dev/null +++ b/packages/website-ue/package.json @@ -0,0 +1,43 @@ +{ + "name": "@blitzkit/website-ue", + "type": "module", + "scripts": { + "dev": "PUBLIC_TARGET=web astro dev", + "build": "PUBLIC_TARGET=web astro build", + "preview": "PUBLIC_TARGET=web astro preview", + "lint": "PUBLIC_TARGET=web astro check", + "astro": "astro" + }, + "dependencies": { + "@astrojs/check": "^0.9.4", + "@astrojs/node": "^9.4.4", + "@astrojs/react": "^4.4.0", + "@astrolib/seo": "^1.0.0-beta.8", + "@blitzkit/core": "workspace:*", + "@blitzkit/i18n": "workspace:*", + "@radix-ui/colors": "^3.0.0", + "@radix-ui/react-icons": "^1.3.2", + "@radix-ui/themes": "^3.2.1", + "@react-three/drei": "^10.7.6", + "@react-three/fiber": "^9.4.0", + "@types/lodash-es": "^4.17.12", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "@types/three": "^0.180.0", + "@vite-pwa/astro": "^1.1.0", + "astro": "^5.14.4", + "astro-favicons": "^3.1.5", + "fuzzysort": "^3.1.0", + "immer": "^10.1.3", + "lodash-es": "^4.17.21", + "quicklime": "^1.2.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-promise-suspense": "^0.3.4", + "three": "^0.180.0", + "three-stdlib": "^2.36.0", + "typescript": "^5.9.3", + "varuna": "workspace:*", + "vite": "^7.1.9" + } +} diff --git a/packages/website-ue/tsconfig.json b/packages/website-ue/tsconfig.json new file mode 100644 index 000000000..a03ae083f --- /dev/null +++ b/packages/website-ue/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": ["../../tsconfig.json", "astro/tsconfigs/base"] +}