diff --git a/frontend/data/category.ts b/frontend/data/category.ts index 0bf9a807..dc3888ea 100644 --- a/frontend/data/category.ts +++ b/frontend/data/category.ts @@ -33,4 +33,6 @@ export const categoryData = [ createCategory('flutter', 'Flutter', 21), createCategory('kotlin', 'Kotlin', 22), createCategory('reactnative', 'React Native', 23), + createCategory('java', 'Java', 24), + createCategory('spring', 'Spring', 25), ]; diff --git a/frontend/data/categoryStyles.ts b/frontend/data/categoryStyles.ts index 85a90a0a..2efb4f8f 100644 --- a/frontend/data/categoryStyles.ts +++ b/frontend/data/categoryStyles.ts @@ -187,6 +187,20 @@ export const categoryTabStyles = { glow: 'bg-[#61DAFB]', accent: '#61DAFB', }, + java: { + icon: '/icons/java.svg', + color: + 'group-hover:border-[#0074BD]/50 group-hover:bg-[#0074BD]/10 data-[state=active]:border-[#0074BD]/50 data-[state=active]:bg-[#0074BD]/10', + glow: 'bg-[#0074BD]', + accent: '#0074BD', + }, + spring: { + icon: '/icons/spring.svg', + color: + 'group-hover:border-[#77BC1F]/50 group-hover:bg-[#77BC1F]/10 data-[state=active]:border-[#77BC1F]/50 data-[state=active]:bg-[#77BC1F]/10', + glow: 'bg-[#77BC1F]', + accent: '#77BC1F', + }, } as const satisfies Partial>; export function getCategoryTabStyle(slug: string): CategoryTabStyle { diff --git a/frontend/package-lock.json b/frontend/package-lock.json index fa6a615f..92d2e6f8 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -52,6 +52,7 @@ "prism-react-renderer": "^2.4.1", "react": "^19.2.1", "react-dom": "^19.2.1", + "server-only": "^0.0.1", "sonner": "^2.0.7", "stripe": "20.0.0", "tailwind-merge": "^3.4.0", @@ -12591,7 +12592,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -13589,6 +13589,12 @@ "randombytes": "^2.1.0" } }, + "node_modules/server-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", + "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==", + "license": "MIT" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index d7ac2dd1..0b6b68a4 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,8 +9,8 @@ "lint": "eslint .", "lint:fix": "eslint . --fix", "format": "prettier --write .", - "seed:categories": "tsx db/seed-categories.ts", - "seed:questions": "tsx db/seed-questions.ts", + "seed:categories": "NODE_OPTIONS=--conditions=react-server tsx db/seed-categories.ts", + "seed:questions": "NODE_OPTIONS=--conditions=react-server tsx db/seed-questions.ts", "parse": "tsx parse/parse.ts", "db:generate": "drizzle-kit generate --config drizzle.config.ts", "db:migrate": "drizzle-kit migrate --config drizzle.config.ts", @@ -67,6 +67,7 @@ "prism-react-renderer": "^2.4.1", "react": "^19.2.1", "react-dom": "^19.2.1", + "server-only": "^0.0.1", "sonner": "^2.0.7", "stripe": "20.0.0", "tailwind-merge": "^3.4.0", diff --git a/frontend/public/icons/java.svg b/frontend/public/icons/java.svg new file mode 100644 index 00000000..051bf254 --- /dev/null +++ b/frontend/public/icons/java.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/icons/spring.svg b/frontend/public/icons/spring.svg new file mode 100644 index 00000000..9a10e7f4 --- /dev/null +++ b/frontend/public/icons/spring.svg @@ -0,0 +1 @@ +