diff --git a/src/app/(public)/layout.tsx b/src/app/(public)/layout.tsx index 087016d..2d4ff21 100644 --- a/src/app/(public)/layout.tsx +++ b/src/app/(public)/layout.tsx @@ -1,9 +1,9 @@ import type { ReactNode } from 'react'; import Link from 'next/link'; -import { getResolvedRuntimeConfig } from '@/lib/server/runtime-config'; +import { getResolvedRuntimeConfigForRsc } from '@/lib/server/runtime-config-rsc'; export default async function PublicLayout({ children }: { children: ReactNode }) { - const runtimeConfig = await getResolvedRuntimeConfig(); + const runtimeConfig = await getResolvedRuntimeConfigForRsc(); const enableUserSignups = runtimeConfig.enableUserSignups; return ( diff --git a/src/app/(public)/page.tsx b/src/app/(public)/page.tsx index 37afe69..b8e4b60 100644 --- a/src/app/(public)/page.tsx +++ b/src/app/(public)/page.tsx @@ -1,6 +1,6 @@ import type { Metadata } from 'next'; import Link from 'next/link'; -import { getResolvedRuntimeConfig } from '@/lib/server/runtime-config'; +import { getResolvedRuntimeConfigForRsc } from '@/lib/server/runtime-config-rsc'; export const metadata: Metadata = { title: 'Read and Listen to Documents', @@ -42,7 +42,7 @@ export const metadata: Metadata = { }; export default async function LandingPage() { - const runtimeConfig = await getResolvedRuntimeConfig(); + const runtimeConfig = await getResolvedRuntimeConfigForRsc(); const enableUserSignups = runtimeConfig.enableUserSignups; return ( diff --git a/src/lib/server/runtime-config-rsc.ts b/src/lib/server/runtime-config-rsc.ts new file mode 100644 index 0000000..74b65a2 --- /dev/null +++ b/src/lib/server/runtime-config-rsc.ts @@ -0,0 +1,13 @@ +import 'server-only'; +import { cache } from 'react'; +import { getResolvedRuntimeConfig } from '@/lib/server/runtime-config'; + +/** + * Per-request cached runtime config accessor for React Server Components. + * This avoids duplicate DB/runtime-config reads when multiple RSC layers + * (e.g. layout + page) need the same config in one render. + */ +export const getResolvedRuntimeConfigForRsc = cache(async () => { + return getResolvedRuntimeConfig(); +}); +