From 52a59b26d4d37bd75ccf782f73302ca635a6eb7e Mon Sep 17 00:00:00 2001 From: Rishabh Date: Wed, 15 Apr 2026 16:01:43 +0530 Subject: [PATCH 1/2] refactor: collapse pages catch-all into single handler with query slug Move /api/page/[...slug] to /api/page, accepting comma-separated slug via ?slug= query param. Empty/missing returns root page. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../chronicle/src/server/api/{page/[...slug].ts => page.ts} | 4 ++-- packages/chronicle/src/server/api/page/index.ts | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) rename packages/chronicle/src/server/api/{page/[...slug].ts => page.ts} (78%) delete mode 100644 packages/chronicle/src/server/api/page/index.ts diff --git a/packages/chronicle/src/server/api/page/[...slug].ts b/packages/chronicle/src/server/api/page.ts similarity index 78% rename from packages/chronicle/src/server/api/page/[...slug].ts rename to packages/chronicle/src/server/api/page.ts index f17e060..bfb43aa 100644 --- a/packages/chronicle/src/server/api/page/[...slug].ts +++ b/packages/chronicle/src/server/api/page.ts @@ -2,8 +2,8 @@ import { defineHandler, HTTPError } from 'nitro'; import { getPage, extractFrontmatter, getRelativePath, getOriginalPath } from '@/lib/source'; export default defineHandler(async event => { - const slugParam = event.context.params?.slug ?? ''; - const slug = slugParam ? slugParam.split('/') : []; + const slugParam = event.url.searchParams.get('slug') ?? ''; + const slug = slugParam ? slugParam.split(',').filter(Boolean) : []; const page = await getPage(slug); if (!page) { diff --git a/packages/chronicle/src/server/api/page/index.ts b/packages/chronicle/src/server/api/page/index.ts deleted file mode 100644 index 347ef5d..0000000 --- a/packages/chronicle/src/server/api/page/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './[...slug]'; From bf0f0f94474b12f2fe2e8debae7a9a60c58d2768 Mon Sep 17 00:00:00 2001 From: Rishabh Date: Wed, 15 Apr 2026 16:02:23 +0530 Subject: [PATCH 2/2] chore: update client to use new pages query API Co-Authored-By: Claude Opus 4.6 (1M context) --- packages/chronicle/src/lib/page-context.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/chronicle/src/lib/page-context.tsx b/packages/chronicle/src/lib/page-context.tsx index 2bb4232..56e8543 100644 --- a/packages/chronicle/src/lib/page-context.tsx +++ b/packages/chronicle/src/lib/page-context.tsx @@ -86,7 +86,7 @@ export function PageProvider({ ? [] : pathname.slice(1).split('/').filter(Boolean); - const apiPath = slug.length === 0 ? '/api/page/' : `/api/page/${slug.join('/')}`; + const apiPath = slug.length === 0 ? '/api/page' : `/api/page?slug=${slug.join(',')}`; fetch(apiPath) .then(res => res.json())