From bc7421c06107ba9e5f2b713b1831be80a26cff7f Mon Sep 17 00:00:00 2001 From: choiboa Date: Thu, 15 Jan 2026 00:48:04 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20feat:=20=20Analytics=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + pnpm-lock.yaml | 34 ++++++++++++++++++++++++++++++++++ src/app/layout.tsx | 2 ++ 3 files changed, 37 insertions(+) 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.tsx b/src/app/layout.tsx index 7ce4ddb..ae245ab 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -2,6 +2,7 @@ import { Metadata } from "next"; import { ThemeProvider } from "next-themes"; import localFont from "next/font/local"; import "./globals.css"; +import { Analytics } from "@vercel/analytics/react"; export const metadata: Metadata = { title: "B-log", @@ -44,6 +45,7 @@ export default function RootLayout({ > {children} + ); From 54477c39c249e61e974f54f8bb2891d46c7ddf35 Mon Sep 17 00:00:00 2001 From: choiboa Date: Thu, 15 Jan 2026 00:53:37 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=9A=A8=20Fix=20:=20=EC=8B=9C=EB=A6=AC?= =?UTF-8?q?=EC=A6=88=20=EC=88=98=20=EC=A7=91=EA=B3=84=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(category)/[category]/_components/CategoryWidget.tsx | 4 +--- src/lib/posts/stats.ts | 9 +++------ 2 files changed, 4 insertions(+), 9 deletions(-) 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 */}
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)