[{"id":"date-now-hydration","domain":"general","topic":"Date.now() during render","kind":"code","options":["a","b","c","d"],"answer":"b","rev":1,"gapFor":["react-spa","other"],"fixes":["Read the time after mount","Mark the mismatch as expected","Skip server rendering for it"]},{"id":"use-state-in-server-component","domain":"general","topic":"useState without \"use client\"","kind":"code","options":["a","b","c","d"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","other"],"fixes":["Move the interactive part into a Client Component","Mark the whole page"]},{"id":"function-prop-to-client-component","domain":"general","topic":"Passing a function to a Client Component","kind":"code","options":["a","b","c"],"answer":"c","rev":1,"gapFor":["react-spa","next-pages","other"],"fixes":["Define the handler in the Client Component","Pass a Server Function"]},{"id":"params-is-a-promise","domain":"general","topic":"params is a Promise","kind":"code","options":["a","b","c","d"],"answer":"b","rev":1,"gapFor":["next-pages","next-app-legacy"],"fixes":["Await params in an async page","Use React's use() in a Client Component","Run the codemod"]},{"id":"cookies-is-async","domain":"general","topic":"cookies() is async","kind":"code","options":["a","b","c","d"],"answer":"c","rev":1,"gapFor":["next-pages","next-app-legacy"],"fixes":["Make the page async and await it","Run the codemod"]},{"id":"server-env-var-in-client","domain":"general","topic":"Env vars in a Client Component","kind":"code","options":["a","b","c","d"],"answer":"b","rev":1,"gapFor":["react-spa","other"],"fixes":["Call the API from a Server Function","Prefix it, only if it isn't secret"]},{"id":"layout-keeps-state","domain":"general","topic":"Layout state across navigation","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","other"],"fixes":["Use template.tsx","Key just the box by path"]},{"id":"server-only-import","domain":"general","topic":"Importing server code into the client","kind":"code","options":["a","b","c","d"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","other"],"fixes":["Load data in a Server Component","Expose a Server Function"]},{"id":"fetch-on-static-page","domain":"general","topic":"fetch on a page with no request data","kind":"code","options":["a","b","c","d"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","next-app-legacy"],"fixes":["Render at request time","Opt the fetch out","Stay static, refresh on a timer"]},{"id":"redirect-in-try-catch","domain":"general","topic":"redirect() inside try/catch","kind":"code","options":["a","b","c","d"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","next-app-legacy","other"],"fixes":["Redirect after the try/catch","Rethrow Next.js errors"]},{"id":"use-search-params-no-suspense","domain":"general","topic":"useSearchParams without Suspense","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","other"],"fixes":["Wrap it in Suspense","Read searchParams on the server"]},{"id":"next-image-remote-host","domain":"general","topic":"next/image with a remote URL","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","other"],"fixes":["Allow the host in remotePatterns","Skip optimization for this image"]},{"id":"server-action-is-public","domain":"general","topic":"Server Actions are public endpoints","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","next-app-legacy","other"],"fixes":["Check inside the action","Put the check in a data layer"]},{"id":"server-action-stale-page","domain":"general","topic":"Stale page after a Server Action","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","other"],"fixes":["Revalidate the path","Refresh the current route"]},{"id":"middleware-renamed-to-proxy","domain":"general","topic":"middleware.ts is now proxy.ts","kind":"code","options":["a","b","c","d"],"answer":"b","rev":1,"gapFor":["next-pages","next-app-legacy"],"fixes":["Rename the function","Run the codemod"]},{"id":"route-handler-get-not-cached","domain":"general","topic":"GET Route Handler caching","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["next-app-legacy","next-pages"],"fixes":["Opt in to a static response","Cache it on a timer"]},{"id":"loading-skips-own-layout","domain":"general","topic":"loading.tsx and the layout beside it","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","other"],"fixes":["Suspend inside the layout","Fetch in the page"]},{"id":"intercepted-route-on-refresh","domain":"general","topic":"Intercepting routes on refresh","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","next-app-legacy","other"],"fixes":["Make the full page stand alone"]},{"id":"error-boundary-skips-own-layout","domain":"general","topic":"error.tsx and the layout beside it","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","other"],"fixes":["Fetch in the page","Handle the expected failure"]},{"id":"next-build-no-longer-lints","domain":"general","topic":"next build and ESLint in Next 16","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["next-pages","next-app-legacy"],"fixes":["Call ESLint yourself","Run the codemod"]},{"id":"unlisted-static-param","domain":"general","topic":"A param missing from generateStaticParams","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["next-pages","react-spa","next-app-legacy"],"fixes":["Only allow the listed params","404 the posts that don't exist"]},{"id":"metadata-query-runs-twice","domain":"general","topic":"generateMetadata and the page share a query","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["next-pages","react-spa","other"],"fixes":["Wrap it in React cache","Cache it across requests"]},{"id":"revalidate-after-redirect","domain":"general","topic":"revalidatePath after redirect()","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","other"],"fixes":["Revalidate first","Expire the tag first"]},{"id":"after-on-static-page","domain":"general","topic":"after() on a static page","kind":"code","options":["a","b","c","d"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","next-app-legacy","other"],"fixes":["Render per request","Log from proxy"]},{"id":"image-quality-coerced","domain":"general","topic":"next/image quality in Next 16","kind":"code","options":["a","b","c","d"],"answer":"b","rev":1,"gapFor":["next-pages","next-app-legacy"],"fixes":["Allow the quality"]},{"id":"error-message-in-production","domain":"general","topic":"error.message in production","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","other"],"fixes":["Return expected errors as UI","Show the digest"]},{"id":"webpack-config-on-turbopack","domain":"general","topic":"A webpack config in Next 16","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["next-pages","next-app-legacy"],"fixes":["Move it to Turbopack","Keep webpack for now"]},{"id":"cookies-in-use-cache","domain":"general","topic":"cookies() inside \"use cache\"","kind":"code","options":["a","b","c","d"],"answer":"c","rev":1,"gapFor":["next-app-legacy","next-pages","react-spa"],"fixes":["Pass the value in","Use a private cache"]},{"id":"revalidate-tag-in-action","domain":"general","topic":"revalidateTag(tag, \"max\") in a Server Action","kind":"code","options":["a","b","c","d"],"answer":"b","rev":1,"gapFor":["next-app-legacy","next-pages","react-spa"],"fixes":["Use updateTag","Expire it now, outside an action"]},{"id":"not-found-after-streaming","domain":"general","topic":"notFound() after streaming starts","kind":"code","options":["a","b","c"],"answer":"b","rev":1,"gapFor":["react-spa","next-pages","next-app-legacy","other"],"fixes":["Check before anything streams","Answer 404 from proxy"]}]