From f6507740420ccdc744898548fc7fa037adcf93ef Mon Sep 17 00:00:00 2001 From: Aman Varshney Date: Mon, 4 Aug 2025 21:35:23 +0530 Subject: [PATCH] feat: migrate icons to r2 and optimize rendering --- apps/web/next.config.mjs | 1 + apps/web/public/icon/better-auth.svg | 1 - apps/web/public/icon/biome.svg | 5 - apps/web/public/icon/bun.svg | 1 - apps/web/public/icon/convex.svg | 5 - apps/web/public/icon/docker.svg | 3 - apps/web/public/icon/drizzle-light.svg | 1 - apps/web/public/icon/drizzle.svg | 1 - apps/web/public/icon/elysia.svg | 1 - apps/web/public/icon/expo.svg | 3 - apps/web/public/icon/express-light.svg | 1 - apps/web/public/icon/express.svg | 1 - apps/web/public/icon/fastify.svg | 4 - apps/web/public/icon/git.svg | 3 - apps/web/public/icon/hono.svg | 1 - apps/web/public/icon/mongodb.svg | 1 - apps/web/public/icon/mongoose.svg | 4 - apps/web/public/icon/mysql.svg | 4 - apps/web/public/icon/neon.svg | 1 - apps/web/public/icon/nextjs.svg | 20 ---- apps/web/public/icon/node.svg | 1 - apps/web/public/icon/nuxt.svg | 1 - apps/web/public/icon/orpc.svg | 3 - apps/web/public/icon/pnpm.svg | 1 - apps/web/public/icon/postgres.svg | 1 - apps/web/public/icon/prisma-light.svg | 1 - apps/web/public/icon/prisma.svg | 1 - apps/web/public/icon/react-router.svg | 6 -- apps/web/public/icon/solid.svg | 1 - apps/web/public/icon/sqlite.svg | 13 --- apps/web/public/icon/starlight.svg | 18 ---- apps/web/public/icon/supabase.svg | 15 --- apps/web/public/icon/svelte.svg | 1 - apps/web/public/icon/tanstack.svg | 1 - apps/web/public/icon/tauri.svg | 1 - apps/web/public/icon/trpc.svg | 1 - apps/web/public/icon/turborepo.svg | 1 - apps/web/public/icon/turso.svg | 1 - apps/web/public/icon/ultracite.svg | 19 ---- apps/web/public/icon/workers.svg | 2 - apps/web/public/image.jpg | Bin 83793 -> 0 bytes .../app/(home)/_components/FeatureCard.tsx | 64 ++++++------ .../web/src/app/(home)/_components/footer.tsx | 14 +-- .../app/(home)/_components/stack-builder.tsx | 59 +++++------ apps/web/src/app/(home)/analytics/page.tsx | 4 +- apps/web/src/lib/constant.ts | 92 +++++++++--------- 46 files changed, 112 insertions(+), 272 deletions(-) delete mode 100644 apps/web/public/icon/better-auth.svg delete mode 100644 apps/web/public/icon/biome.svg delete mode 100644 apps/web/public/icon/bun.svg delete mode 100644 apps/web/public/icon/convex.svg delete mode 100644 apps/web/public/icon/docker.svg delete mode 100644 apps/web/public/icon/drizzle-light.svg delete mode 100644 apps/web/public/icon/drizzle.svg delete mode 100644 apps/web/public/icon/elysia.svg delete mode 100644 apps/web/public/icon/expo.svg delete mode 100644 apps/web/public/icon/express-light.svg delete mode 100644 apps/web/public/icon/express.svg delete mode 100644 apps/web/public/icon/fastify.svg delete mode 100644 apps/web/public/icon/git.svg delete mode 100644 apps/web/public/icon/hono.svg delete mode 100644 apps/web/public/icon/mongodb.svg delete mode 100644 apps/web/public/icon/mongoose.svg delete mode 100644 apps/web/public/icon/mysql.svg delete mode 100644 apps/web/public/icon/neon.svg delete mode 100644 apps/web/public/icon/nextjs.svg delete mode 100644 apps/web/public/icon/node.svg delete mode 100644 apps/web/public/icon/nuxt.svg delete mode 100644 apps/web/public/icon/orpc.svg delete mode 100644 apps/web/public/icon/pnpm.svg delete mode 100644 apps/web/public/icon/postgres.svg delete mode 100644 apps/web/public/icon/prisma-light.svg delete mode 100644 apps/web/public/icon/prisma.svg delete mode 100644 apps/web/public/icon/react-router.svg delete mode 100644 apps/web/public/icon/solid.svg delete mode 100644 apps/web/public/icon/sqlite.svg delete mode 100644 apps/web/public/icon/starlight.svg delete mode 100644 apps/web/public/icon/supabase.svg delete mode 100644 apps/web/public/icon/svelte.svg delete mode 100644 apps/web/public/icon/tanstack.svg delete mode 100644 apps/web/public/icon/tauri.svg delete mode 100644 apps/web/public/icon/trpc.svg delete mode 100644 apps/web/public/icon/turborepo.svg delete mode 100644 apps/web/public/icon/turso.svg delete mode 100644 apps/web/public/icon/ultracite.svg delete mode 100644 apps/web/public/icon/workers.svg delete mode 100644 apps/web/public/image.jpg diff --git a/apps/web/next.config.mjs b/apps/web/next.config.mjs index ef0a97c..93355f1 100644 --- a/apps/web/next.config.mjs +++ b/apps/web/next.config.mjs @@ -9,6 +9,7 @@ const config = { remotePatterns: [ { protocol: "https", hostname: "pbs.twimg.com" }, { protocol: "https", hostname: "abs.twimg.com" }, + { protocol: "https", hostname: "r2.better-t-stack.dev" }, ], }, outputFileTracingExcludes: { diff --git a/apps/web/public/icon/better-auth.svg b/apps/web/public/icon/better-auth.svg deleted file mode 100644 index 6d00383..0000000 --- a/apps/web/public/icon/better-auth.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/biome.svg b/apps/web/public/icon/biome.svg deleted file mode 100644 index 05fa79c..0000000 --- a/apps/web/public/icon/biome.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/web/public/icon/bun.svg b/apps/web/public/icon/bun.svg deleted file mode 100644 index 02a55d5..0000000 --- a/apps/web/public/icon/bun.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/convex.svg b/apps/web/public/icon/convex.svg deleted file mode 100644 index 8622c4c..0000000 --- a/apps/web/public/icon/convex.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/web/public/icon/docker.svg b/apps/web/public/icon/docker.svg deleted file mode 100644 index 2e0703d..0000000 --- a/apps/web/public/icon/docker.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/web/public/icon/drizzle-light.svg b/apps/web/public/icon/drizzle-light.svg deleted file mode 100644 index 1d7ced1..0000000 --- a/apps/web/public/icon/drizzle-light.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/web/public/icon/drizzle.svg b/apps/web/public/icon/drizzle.svg deleted file mode 100644 index 8596582..0000000 --- a/apps/web/public/icon/drizzle.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/elysia.svg b/apps/web/public/icon/elysia.svg deleted file mode 100644 index 0497dcc..0000000 --- a/apps/web/public/icon/elysia.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/expo.svg b/apps/web/public/icon/expo.svg deleted file mode 100644 index 07df455..0000000 --- a/apps/web/public/icon/expo.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/web/public/icon/express-light.svg b/apps/web/public/icon/express-light.svg deleted file mode 100644 index 4dc0362..0000000 --- a/apps/web/public/icon/express-light.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/web/public/icon/express.svg b/apps/web/public/icon/express.svg deleted file mode 100644 index 0ee1e44..0000000 --- a/apps/web/public/icon/express.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/fastify.svg b/apps/web/public/icon/fastify.svg deleted file mode 100644 index 51728e5..0000000 --- a/apps/web/public/icon/fastify.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/web/public/icon/git.svg b/apps/web/public/icon/git.svg deleted file mode 100644 index 4e5fe8e..0000000 --- a/apps/web/public/icon/git.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/web/public/icon/hono.svg b/apps/web/public/icon/hono.svg deleted file mode 100644 index 9fffa74..0000000 --- a/apps/web/public/icon/hono.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/mongodb.svg b/apps/web/public/icon/mongodb.svg deleted file mode 100644 index 5999461..0000000 --- a/apps/web/public/icon/mongodb.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/mongoose.svg b/apps/web/public/icon/mongoose.svg deleted file mode 100644 index f84bcc2..0000000 --- a/apps/web/public/icon/mongoose.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/web/public/icon/mysql.svg b/apps/web/public/icon/mysql.svg deleted file mode 100644 index cafe01c..0000000 --- a/apps/web/public/icon/mysql.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/web/public/icon/neon.svg b/apps/web/public/icon/neon.svg deleted file mode 100644 index ddc31f9..0000000 --- a/apps/web/public/icon/neon.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/nextjs.svg b/apps/web/public/icon/nextjs.svg deleted file mode 100644 index e2da0ad..0000000 --- a/apps/web/public/icon/nextjs.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/apps/web/public/icon/node.svg b/apps/web/public/icon/node.svg deleted file mode 100644 index d92d02b..0000000 --- a/apps/web/public/icon/node.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/nuxt.svg b/apps/web/public/icon/nuxt.svg deleted file mode 100644 index 81b2e6f..0000000 --- a/apps/web/public/icon/nuxt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/web/public/icon/orpc.svg b/apps/web/public/icon/orpc.svg deleted file mode 100644 index 74e4801..0000000 --- a/apps/web/public/icon/orpc.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/web/public/icon/pnpm.svg b/apps/web/public/icon/pnpm.svg deleted file mode 100644 index 18b08ef..0000000 --- a/apps/web/public/icon/pnpm.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/postgres.svg b/apps/web/public/icon/postgres.svg deleted file mode 100644 index 916884c..0000000 --- a/apps/web/public/icon/postgres.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/prisma-light.svg b/apps/web/public/icon/prisma-light.svg deleted file mode 100644 index 3210efa..0000000 --- a/apps/web/public/icon/prisma-light.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/web/public/icon/prisma.svg b/apps/web/public/icon/prisma.svg deleted file mode 100644 index ceffb2f..0000000 --- a/apps/web/public/icon/prisma.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/react-router.svg b/apps/web/public/icon/react-router.svg deleted file mode 100644 index 7782575..0000000 --- a/apps/web/public/icon/react-router.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/apps/web/public/icon/solid.svg b/apps/web/public/icon/solid.svg deleted file mode 100644 index dd92ac8..0000000 --- a/apps/web/public/icon/solid.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/sqlite.svg b/apps/web/public/icon/sqlite.svg deleted file mode 100644 index 7e21294..0000000 --- a/apps/web/public/icon/sqlite.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/apps/web/public/icon/starlight.svg b/apps/web/public/icon/starlight.svg deleted file mode 100644 index 1d9c277..0000000 --- a/apps/web/public/icon/starlight.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/apps/web/public/icon/supabase.svg b/apps/web/public/icon/supabase.svg deleted file mode 100644 index 574f67e..0000000 --- a/apps/web/public/icon/supabase.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/apps/web/public/icon/svelte.svg b/apps/web/public/icon/svelte.svg deleted file mode 100644 index 2c0cd42..0000000 --- a/apps/web/public/icon/svelte.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/tanstack.svg b/apps/web/public/icon/tanstack.svg deleted file mode 100644 index 2216a59..0000000 --- a/apps/web/public/icon/tanstack.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/tauri.svg b/apps/web/public/icon/tauri.svg deleted file mode 100644 index e054c5c..0000000 --- a/apps/web/public/icon/tauri.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/trpc.svg b/apps/web/public/icon/trpc.svg deleted file mode 100644 index 150908c..0000000 --- a/apps/web/public/icon/trpc.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/turborepo.svg b/apps/web/public/icon/turborepo.svg deleted file mode 100644 index 0cebcb4..0000000 --- a/apps/web/public/icon/turborepo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/turso.svg b/apps/web/public/icon/turso.svg deleted file mode 100644 index 67939d7..0000000 --- a/apps/web/public/icon/turso.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/web/public/icon/ultracite.svg b/apps/web/public/icon/ultracite.svg deleted file mode 100644 index bc64ca7..0000000 --- a/apps/web/public/icon/ultracite.svg +++ /dev/null @@ -1,19 +0,0 @@ - -Ultracite - - - - - - - - - diff --git a/apps/web/public/icon/workers.svg b/apps/web/public/icon/workers.svg deleted file mode 100644 index 0eb6672..0000000 --- a/apps/web/public/icon/workers.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/apps/web/public/image.jpg b/apps/web/public/image.jpg deleted file mode 100644 index 4435c7d78c8d119e5b85bbf677898012aa9383f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83793 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

SJ1qF`8<)`52V^oW*~=%;uo?~J4; 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 diff --git a/apps/web/src/app/(home)/_components/FeatureCard.tsx b/apps/web/src/app/(home)/_components/FeatureCard.tsx index 0b62826..4fc1f08 100644 --- a/apps/web/src/app/(home)/_components/FeatureCard.tsx +++ b/apps/web/src/app/(home)/_components/FeatureCard.tsx @@ -3,7 +3,7 @@ import { motion } from "motion/react"; import Image from "next/image"; import { useTheme } from "next-themes"; -import { useEffect, useState } from "react"; + import { ScrollArea } from "@/components/ui/scroll-area"; import { cn } from "@/lib/utils"; @@ -29,44 +29,46 @@ function TechIcon({ name: string; className?: string; }) { - const [mounted, setMounted] = useState(false); const { theme } = useTheme(); - useEffect(() => { - setMounted(true); - }, []); - - if (mounted && icon.startsWith("/icon/")) { - if ( - theme === "light" && - (icon.includes("drizzle") || - icon.includes("prisma") || - icon.includes("express")) - ) { - icon = icon.replace(".svg", "-light.svg"); - } + // If no icon, return empty + if (!icon) return null; + // If it's an emoji or text icon, render as span + if (!icon.startsWith("https://")) { return ( - {`${name} + + {icon} + ); } + // Handle light theme variants + let iconSrc = icon; + if ( + theme === "light" && + (icon.includes("drizzle") || + icon.includes("prisma") || + icon.includes("express")) + ) { + iconSrc = icon.replace(".svg", "-light.svg"); + } + + // Render as image return ( - - {icon} - + {`${name} ); } diff --git a/apps/web/src/app/(home)/_components/footer.tsx b/apps/web/src/app/(home)/_components/footer.tsx index e00a776..bfa4651 100644 --- a/apps/web/src/app/(home)/_components/footer.tsx +++ b/apps/web/src/app/(home)/_components/footer.tsx @@ -1,5 +1,7 @@ import { Github } from "lucide-react"; +import Image from "next/image"; import Link from "next/link"; +import npmIcon from "@/public/icon/npm.svg"; const Footer = () => { return ( @@ -26,18 +28,10 @@ const Footer = () => { - - NPM - - + NPM diff --git a/apps/web/src/app/(home)/_components/stack-builder.tsx b/apps/web/src/app/(home)/_components/stack-builder.tsx index a09a903..f3df09b 100644 --- a/apps/web/src/app/(home)/_components/stack-builder.tsx +++ b/apps/web/src/app/(home)/_components/stack-builder.tsx @@ -138,39 +138,37 @@ function TechIcon({ name: string; className?: string; }) { - const [mounted, setMounted] = useState(false); const { theme } = useTheme(); - useEffect(() => { - setMounted(true); - }, []); - - if (mounted && icon.startsWith("/icon/")) { - if ( - theme === "light" && - (icon.includes("drizzle") || - icon.includes("prisma") || - icon.includes("express")) - ) { - icon = icon.replace(".svg", "-light.svg"); - } + if (!icon) return null; + if (!icon.startsWith("https://")) { return ( - {`${name} + + {icon} + ); } + let iconSrc = icon; + if ( + theme === "light" && + (icon.includes("drizzle") || + icon.includes("prisma") || + icon.includes("express")) + ) { + iconSrc = icon.replace(".svg", "-light.svg"); + } + return ( - - {icon} - + {`${name} ); } @@ -1202,12 +1200,7 @@ const StackBuilder = () => { )} {tech.name} @@ -1236,9 +1229,7 @@ const StackBuilder = () => { getBadgeColors(category), )} > - {tech.icon !== "" && ( - - )} + {tech.name} , ); diff --git a/apps/web/src/app/(home)/analytics/page.tsx b/apps/web/src/app/(home)/analytics/page.tsx index 28b5113..66af6a4 100644 --- a/apps/web/src/app/(home)/analytics/page.tsx +++ b/apps/web/src/app/(home)/analytics/page.tsx @@ -24,7 +24,7 @@ import { ChartTooltip, ChartTooltipContent, } from "@/components/ui/chart"; -import discordLogo from "@/public/icon/discord.svg"; +import discordIcon from "@/public/icon/discord.svg"; import Footer from "../_components/footer"; interface AggregatedAnalyticsData { @@ -650,7 +650,7 @@ export default function AnalyticsPage() {
discord diff --git a/apps/web/src/lib/constant.ts b/apps/web/src/lib/constant.ts index d68a7f4..9ae592f 100644 --- a/apps/web/src/lib/constant.ts +++ b/apps/web/src/lib/constant.ts @@ -1,5 +1,7 @@ import type { TechCategory } from "./types"; +export const ICON_BASE_URL = "https://r2.better-t-stack.dev/icons"; + export const TECH_OPTIONS: Record< TechCategory, { @@ -17,7 +19,7 @@ export const TECH_OPTIONS: Record< id: "trpc", name: "tRPC", description: "End-to-end typesafe APIs", - icon: "/icon/trpc.svg", + icon: `${ICON_BASE_URL}/trpc.svg`, color: "from-blue-500 to-blue-700", default: true, }, @@ -25,7 +27,7 @@ export const TECH_OPTIONS: Record< id: "orpc", name: "oRPC", description: "Typesafe APIs Made Simple", - icon: "/icon/orpc.svg", + icon: `${ICON_BASE_URL}/orpc.svg`, color: "from-indigo-400 to-indigo-600", }, { @@ -41,7 +43,7 @@ export const TECH_OPTIONS: Record< id: "tanstack-router", name: "TanStack Router", description: "Modern type-safe router for React", - icon: "/icon/tanstack.svg", + icon: `${ICON_BASE_URL}/tanstack.svg`, color: "from-blue-400 to-blue-600", default: true, }, @@ -49,7 +51,7 @@ export const TECH_OPTIONS: Record< id: "react-router", name: "React Router", description: "Declarative routing for React", - icon: "/icon/react-router.svg", + icon: `${ICON_BASE_URL}/react-router.svg`, color: "from-cyan-400 to-cyan-600", default: false, }, @@ -58,7 +60,7 @@ export const TECH_OPTIONS: Record< name: "TanStack Start (vite)", description: "Full-stack React and Solid framework powered by TanStack Router", - icon: "/icon/tanstack.svg", + icon: `${ICON_BASE_URL}/tanstack.svg`, color: "from-purple-400 to-purple-600", default: false, }, @@ -66,7 +68,7 @@ export const TECH_OPTIONS: Record< id: "next", name: "Next.js", description: "React framework with hybrid rendering", - icon: "/icon/nextjs.svg", + icon: `${ICON_BASE_URL}/nextjs.svg`, color: "from-gray-700 to-black", default: false, }, @@ -74,7 +76,7 @@ export const TECH_OPTIONS: Record< id: "nuxt", name: "Nuxt", description: "Vue full-stack framework (SSR, SSG, hybrid)", - icon: "/icon/nuxt.svg", + icon: `${ICON_BASE_URL}/nuxt.svg`, color: "from-green-400 to-green-700", default: false, }, @@ -82,7 +84,7 @@ export const TECH_OPTIONS: Record< id: "svelte", name: "Svelte", description: "Cybernetically enhanced web apps", - icon: "/icon/svelte.svg", + icon: `${ICON_BASE_URL}/svelte.svg`, color: "from-orange-500 to-orange-700", default: false, }, @@ -90,7 +92,7 @@ export const TECH_OPTIONS: Record< id: "solid", name: "Solid", description: "Simple and performant reactivity for building UIs", - icon: "/icon/solid.svg", + icon: `${ICON_BASE_URL}/solid.svg`, color: "from-blue-600 to-blue-800", default: false, }, @@ -108,7 +110,7 @@ export const TECH_OPTIONS: Record< id: "native-nativewind", name: "React Native + NativeWind", description: "Expo with NativeWind (Tailwind)", - icon: "/icon/expo.svg", + icon: `${ICON_BASE_URL}/expo.svg`, color: "from-purple-400 to-purple-600", className: "invert-0 dark:invert", default: false, @@ -117,7 +119,7 @@ export const TECH_OPTIONS: Record< id: "native-unistyles", name: "React Native + Unistyles", description: "Expo with Unistyles", - icon: "/icon/expo.svg", + icon: `${ICON_BASE_URL}/expo.svg`, color: "from-pink-400 to-pink-600", className: "invert-0 dark:invert", default: false, @@ -136,7 +138,7 @@ export const TECH_OPTIONS: Record< id: "bun", name: "Bun", description: "Fast JavaScript runtime & toolkit", - icon: "/icon/bun.svg", + icon: `${ICON_BASE_URL}/bun.svg`, color: "from-amber-400 to-amber-600", default: true, }, @@ -144,14 +146,14 @@ export const TECH_OPTIONS: Record< id: "node", name: "Node.js", description: "JavaScript runtime environment", - icon: "/icon/node.svg", + icon: `${ICON_BASE_URL}/node.svg`, color: "from-green-400 to-green-600", }, { id: "workers", name: "Cloudflare Workers", description: "Serverless runtime for the edge", - icon: "/icon/workers.svg", + icon: `${ICON_BASE_URL}/workers.svg`, color: "from-orange-400 to-orange-600", }, { @@ -167,7 +169,7 @@ export const TECH_OPTIONS: Record< id: "hono", name: "Hono", description: "Ultrafast web framework", - icon: "/icon/hono.svg", + icon: `${ICON_BASE_URL}/hono.svg`, color: "from-blue-500 to-blue-700", default: true, }, @@ -175,35 +177,35 @@ export const TECH_OPTIONS: Record< id: "next", name: "Next.js", description: "App Router and API Routes", - icon: "/icon/nextjs.svg", + icon: `${ICON_BASE_URL}/nextjs.svg`, color: "from-gray-700 to-black", }, { id: "elysia", name: "Elysia", description: "TypeScript web framework", - icon: "/icon/elysia.svg", + icon: `${ICON_BASE_URL}/elysia.svg`, color: "from-purple-500 to-purple-700", }, { id: "express", name: "Express", description: "Popular Node.js framework", - icon: "/icon/express.svg", + icon: `${ICON_BASE_URL}/express.svg`, color: "from-gray-500 to-gray-700", }, { id: "fastify", name: "Fastify", description: "Fast, low-overhead web framework for Node.js", - icon: "/icon/fastify.svg", + icon: `${ICON_BASE_URL}/fastify.svg`, color: "from-gray-500 to-gray-700", }, { id: "convex", name: "Convex", description: "Reactive backend-as-a-service", - icon: "/icon/convex.svg", + icon: `${ICON_BASE_URL}/convex.svg`, color: "from-pink-500 to-pink-700", }, { @@ -219,7 +221,7 @@ export const TECH_OPTIONS: Record< id: "sqlite", name: "SQLite", description: "File-based SQL database", - icon: "/icon/sqlite.svg", + icon: `${ICON_BASE_URL}/sqlite.svg`, color: "from-blue-400 to-cyan-500", default: true, }, @@ -227,21 +229,21 @@ export const TECH_OPTIONS: Record< id: "postgres", name: "PostgreSQL", description: "Advanced SQL database", - icon: "/icon/postgres.svg", + icon: `${ICON_BASE_URL}/postgres.svg`, color: "from-indigo-400 to-indigo-600", }, { id: "mysql", name: "MySQL", description: "Popular relational database", - icon: "/icon/mysql.svg", + icon: `${ICON_BASE_URL}/mysql.svg`, color: "from-blue-500 to-blue-700", }, { id: "mongodb", name: "MongoDB", description: "NoSQL document database", - icon: "/icon/mongodb.svg", + icon: `${ICON_BASE_URL}/mongodb.svg`, color: "from-green-400 to-green-600", }, { @@ -257,7 +259,7 @@ export const TECH_OPTIONS: Record< id: "drizzle", name: "Drizzle", description: "TypeScript ORM", - icon: "/icon/drizzle.svg", + icon: `${ICON_BASE_URL}/drizzle.svg`, color: "from-cyan-400 to-cyan-600", default: true, }, @@ -265,14 +267,14 @@ export const TECH_OPTIONS: Record< id: "prisma", name: "Prisma", description: "Next-gen ORM", - icon: "/icon/prisma.svg", + icon: `${ICON_BASE_URL}/prisma.svg`, color: "from-purple-400 to-purple-600", }, { id: "mongoose", name: "Mongoose", description: "Elegant object modeling tool", - icon: "/icon/mongoose.svg", + icon: `${ICON_BASE_URL}/mongoose.svg`, color: "from-blue-400 to-blue-600", }, { @@ -288,49 +290,49 @@ export const TECH_OPTIONS: Record< id: "turso", name: "Turso", description: "SQLite cloud database powered by libSQL", - icon: "/icon/turso.svg", + icon: `${ICON_BASE_URL}/turso.svg`, color: "from-pink-400 to-pink-600", }, { id: "d1", name: "Cloudflare D1", description: "Serverless SQLite database on Cloudflare Workers", - icon: "/icon/workers.svg", + icon: `${ICON_BASE_URL}/workers.svg`, color: "from-orange-400 to-orange-600", }, { id: "neon", name: "Neon Postgres", description: "Serverless PostgreSQL with Neon", - icon: "/icon/neon.svg", + icon: `${ICON_BASE_URL}/neon.svg`, color: "from-blue-400 to-blue-600", }, { id: "prisma-postgres", name: "Prisma PostgreSQL", description: "Set up PostgreSQL with Prisma", - icon: "/icon/prisma.svg", + icon: `${ICON_BASE_URL}/prisma.svg`, color: "from-indigo-400 to-indigo-600", }, { id: "mongodb-atlas", name: "MongoDB Atlas", description: "Cloud MongoDB setup with Atlas", - icon: "/icon/mongodb.svg", + icon: `${ICON_BASE_URL}/mongodb.svg`, color: "from-green-400 to-green-600", }, { id: "supabase", name: "Supabase", description: "Local Supabase stack (requires Docker)", - icon: "/icon/supabase.svg", + icon: `${ICON_BASE_URL}/supabase.svg`, color: "from-emerald-400 to-emerald-600", }, { id: "docker", name: "Docker", description: "Local database with Docker Compose", - icon: "/icon/docker.svg", + icon: `${ICON_BASE_URL}/docker.svg`, color: "from-blue-500 to-blue-700", }, { @@ -347,7 +349,7 @@ export const TECH_OPTIONS: Record< id: "workers", name: "Cloudflare Workers", description: "Deploy to Cloudflare Workers", - icon: "/icon/workers.svg", + icon: `${ICON_BASE_URL}/workers.svg`, color: "from-orange-400 to-orange-600", }, { @@ -364,7 +366,7 @@ export const TECH_OPTIONS: Record< id: "true", name: "Better Auth", description: "Simple authentication", - icon: "/icon/better-auth.svg", + icon: `${ICON_BASE_URL}/better-auth.svg`, color: "from-green-400 to-green-600", default: true, }, @@ -381,7 +383,7 @@ export const TECH_OPTIONS: Record< id: "npm", name: "npm", description: "Default package manager", - icon: "/icon/npm.svg", + icon: `${ICON_BASE_URL}/npm.svg`, color: "from-red-500 to-red-700", className: "invert-0 dark:invert", }, @@ -389,14 +391,14 @@ export const TECH_OPTIONS: Record< id: "pnpm", name: "pnpm", description: "Fast, disk space efficient", - icon: "/icon/pnpm.svg", + icon: `${ICON_BASE_URL}/pnpm.svg`, color: "from-orange-500 to-orange-700", }, { id: "bun", name: "bun", description: "All-in-one toolkit", - icon: "/icon/bun.svg", + icon: `${ICON_BASE_URL}/bun.svg`, color: "from-amber-500 to-amber-700", default: true, }, @@ -414,7 +416,7 @@ export const TECH_OPTIONS: Record< id: "tauri", name: "Tauri", description: "Build native desktop apps", - icon: "/icon/tauri.svg", + icon: `${ICON_BASE_URL}/tauri.svg`, color: "from-amber-500 to-amber-700", default: false, }, @@ -422,7 +424,7 @@ export const TECH_OPTIONS: Record< id: "starlight", name: "Starlight", description: "Build stellar docs with astro", - icon: "/icon/starlight.svg", + icon: `${ICON_BASE_URL}/starlight.svg`, color: "from-teal-500 to-teal-700", default: false, }, @@ -430,7 +432,7 @@ export const TECH_OPTIONS: Record< id: "biome", name: "Biome", description: "Format, lint, and more", - icon: "/icon/biome.svg", + icon: `${ICON_BASE_URL}/biome.svg`, color: "from-green-500 to-green-700", default: false, }, @@ -446,7 +448,7 @@ export const TECH_OPTIONS: Record< id: "ultracite", name: "Ultracite", description: "Biome preset with AI integration", - icon: "/icon/ultracite.svg", + icon: `${ICON_BASE_URL}/ultracite.svg`, color: "from-blue-500 to-blue-700", className: "invert-0 dark:invert", default: false, @@ -471,7 +473,7 @@ export const TECH_OPTIONS: Record< id: "turborepo", name: "Turborepo", description: "High-performance build system", - icon: "/icon/turborepo.svg", + icon: `${ICON_BASE_URL}/turborepo.svg`, color: "from-gray-400 to-gray-700", default: true, }, @@ -499,7 +501,7 @@ export const TECH_OPTIONS: Record< id: "true", name: "Git", description: "Initialize Git repository", - icon: "/icon/git.svg", + icon: `${ICON_BASE_URL}/git.svg`, color: "from-gray-500 to-gray-700", default: true, },