diff --git a/package.json b/package.json index b42d9e2..c13df27 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "dependencies": { "@radix-ui/react-dialog": "^1.1.15", "@supabase/supabase-js": "^2.80.0", + "@vercel/analytics": "^1.6.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "framer-motion": "^12.23.24", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c0dce56..d978830 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,9 @@ importers: '@supabase/supabase-js': specifier: ^2.80.0 version: 2.80.0 + '@vercel/analytics': + specifier: ^1.6.1 + version: 1.6.1(next@15.5.9(@babel/core@7.28.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -2083,6 +2086,32 @@ packages: cpu: [x64] os: [win32] + '@vercel/analytics@1.6.1': + resolution: {integrity: sha512-oH9He/bEM+6oKlv3chWuOOcp8Y6fo6/PSro8hEkgCW3pu9/OiCXiUpRUogDh3Fs3LH2sosDrx8CxeOLBEE+afg==} + peerDependencies: + '@remix-run/react': ^2 + '@sveltejs/kit': ^1 || ^2 + next: '>= 13' + react: ^18 || ^19 || ^19.0.0-rc + svelte: '>= 4' + vue: ^3 + vue-router: ^4 + peerDependenciesMeta: + '@remix-run/react': + optional: true + '@sveltejs/kit': + optional: true + next: + optional: true + react: + optional: true + svelte: + optional: true + vue: + optional: true + vue-router: + optional: true + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -7144,6 +7173,11 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true + '@vercel/analytics@1.6.1(next@15.5.9(@babel/core@7.28.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)': + optionalDependencies: + next: 15.5.9(@babel/core@7.28.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 diff --git a/src/app/(layout)/(shell)/(category)/[category]/_components/CategoryWidget.tsx b/src/app/(layout)/(shell)/(category)/[category]/_components/CategoryWidget.tsx index ba2adfa..c6b079d 100644 --- a/src/app/(layout)/(shell)/(category)/[category]/_components/CategoryWidget.tsx +++ b/src/app/(layout)/(shell)/(category)/[category]/_components/CategoryWidget.tsx @@ -28,7 +28,6 @@ export default function CategoryWidget({ category }: Props) { return (
- {/* 왼쪽: 숫자 위젯 4개 */}
@@ -52,7 +51,6 @@ export default function CategoryWidget({ category }: Props) { />
- {/* 오른쪽: Monthly Mission */}
{children} + ); diff --git a/src/lib/posts/stats.ts b/src/lib/posts/stats.ts index 893f5b2..1dd0d39 100644 --- a/src/lib/posts/stats.ts +++ b/src/lib/posts/stats.ts @@ -1,6 +1,7 @@ import type { VelitePost } from "./source"; import { getAllPosts } from "./queries"; import { CategoryKey } from "@/config/categories"; +import { SERIES_META_BY_CATEGORY } from "@/lib/posts/registry/series.registry"; export interface CategoryStatsParams { category: CategoryKey; @@ -67,12 +68,8 @@ export function getCategoryStats(params: CategoryStatsParams): CategoryStats { const thisYYYYMM = toYYYYMM(now); const newThisMonth = catPosts.filter((p) => p.date.startsWith(thisYYYYMM)).length; - const seriesSet = new Set( - catPosts - .map((p) => p.series?.trim()) - .filter((s): s is string => Boolean(s)) - ); - const seriesCount = seriesSet.size; + const seriesMeta = SERIES_META_BY_CATEGORY[category] ?? []; + const seriesCount = seriesMeta.length; const recentCount = catPosts.filter((p) => isWithinLastNDays(p.date, now, activityWindowDays)