diff --git a/.playwright-mcp/console-2026-02-06T06-53-10-406Z.log b/.playwright-mcp/console-2026-02-06T06-53-10-406Z.log
new file mode 100644
index 0000000..33c1496
--- /dev/null
+++ b/.playwright-mcp/console-2026-02-06T06-53-10-406Z.log
@@ -0,0 +1,2 @@
+[ 1800ms] [WARNING] Image with src "https://www.gravatar.com/avatar/53f2a6e011d5ececcd0d6e33e8e7329f60efcd23a5b77ba382273d5060a2cffe?s=160&d=identicon" was detected as the Largest Contentful Paint (LCP). Please add the `loading="eager"` property if this image is above the fold.
+Read more: https://nextjs.org/docs/app/api-reference/components/image#loading @ http://localhost:3000/_next/static/chunks/node_modules_next_dist_f3530cac._.js:2297
diff --git a/.playwright-mcp/console-2026-02-06T06-53-49-813Z.log b/.playwright-mcp/console-2026-02-06T06-53-49-813Z.log
new file mode 100644
index 0000000..baeb0b0
--- /dev/null
+++ b/.playwright-mcp/console-2026-02-06T06-53-49-813Z.log
@@ -0,0 +1,5 @@
+[ 22376ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/webpack-hmr?id=VmGWkPt9sasaNk_cqnGHG' failed: @ http://localhost:3000/_next/static/chunks/node_modules_next_dist_client_17643121._.js:10878
+[ 23381ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/webpack-hmr?id=VmGWkPt9sasaNk_cqnGHG' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/node_modules_next_dist_client_17643121._.js:10878
+[ 24384ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/webpack-hmr?id=VmGWkPt9sasaNk_cqnGHG' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/node_modules_next_dist_client_17643121._.js:10878
+[ 25385ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/webpack-hmr?id=VmGWkPt9sasaNk_cqnGHG' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/node_modules_next_dist_client_17643121._.js:10878
+[ 26387ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/webpack-hmr?id=VmGWkPt9sasaNk_cqnGHG' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/node_modules_next_dist_client_17643121._.js:10878
diff --git a/.playwright-mcp/console-2026-02-06T07-09-29-900Z.log b/.playwright-mcp/console-2026-02-06T07-09-29-900Z.log
new file mode 100644
index 0000000..c348b2e
--- /dev/null
+++ b/.playwright-mcp/console-2026-02-06T07-09-29-900Z.log
@@ -0,0 +1,2 @@
+[ 789ms] [WARNING] Image with src "https://www.gravatar.com/avatar/53f2a6e011d5ececcd0d6e33e8e7329f60efcd23a5b77ba382273d5060a2cffe?s=160&d=identicon" was detected as the Largest Contentful Paint (LCP). Please add the `loading="eager"` property if this image is above the fold.
+Read more: https://nextjs.org/docs/app/api-reference/components/image#loading @ http://localhost:3000/_next/static/chunks/node_modules_next_dist_f3530cac._.js:2297
diff --git a/.playwright-mcp/console-2026-02-06T07-11-06-366Z.log b/.playwright-mcp/console-2026-02-06T07-11-06-366Z.log
new file mode 100644
index 0000000..7d238a4
--- /dev/null
+++ b/.playwright-mcp/console-2026-02-06T07-11-06-366Z.log
@@ -0,0 +1 @@
+[ 1801237ms] [WARNING] The resource https://blog.gbanyan.net/_next/static/chunks/457c1f08a48523ea.css was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally. @ https://blog.gbanyan.net/blog/not-all-tears-should-be-summarized:0
diff --git a/components/layout-shell.tsx b/components/layout-shell.tsx
index 803125b..cee4b68 100644
--- a/components/layout-shell.tsx
+++ b/components/layout-shell.tsx
@@ -1,3 +1,5 @@
+'use client';
+
import { SiteHeader } from './site-header';
import { SiteFooter } from './site-footer';
import dynamic from 'next/dynamic';
diff --git a/components/sidebar-layout.tsx b/components/sidebar-layout.tsx
index 4e5ab86..f8cbc77 100644
--- a/components/sidebar-layout.tsx
+++ b/components/sidebar-layout.tsx
@@ -1,3 +1,5 @@
+'use client';
+
import dynamic from 'next/dynamic';
// Lazy load RightSidebar since it's only visible on lg+ screens
diff --git a/env b/env
index f96e092..176b108 100644
--- a/env
+++ b/env
@@ -5,7 +5,7 @@ NEXT_PUBLIC_SITE_DESCRIPTION="醫學、科技與生活隨筆。"
NEXT_PUBLIC_SITE_URL="http://localhost:3000"
NEXT_PUBLIC_SITE_AUTHOR="Gbanyan"
NEXT_PUBLIC_SITE_TAGLINE="醫學、科技與生活的隨筆記錄。"
-NEXT_PUBLIC_POSTS_PER_PAGE="5"
+NEXT_PUBLIC_POSTS_PER_PAGE="7"
NEXT_PUBLIC_DEFAULT_LOCALE="zh-TW"
NEXT_PUBLIC_SITE_AVATAR_URL="https://www.gravatar.com/avatar/53f2a6e011d5ececcd0d6e33e8e7329f60efcd23a5b77ba382273d5060a2cffe?s=160&d=identicon"
NEXT_PUBLIC_SITE_ABOUT_SHORT="掙扎混亂過日子 \n 對平淡美好日常的期待即是救贖"
diff --git a/next-env.d.ts b/next-env.d.ts
index c4b7818..9edff1c 100644
--- a/next-env.d.ts
+++ b/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-import "./.next/dev/types/routes.d.ts";
+import "./.next/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/prod-homepage.png b/prod-homepage.png
new file mode 100644
index 0000000..fca4e2b
Binary files /dev/null and b/prod-homepage.png differ