Saving Marp Slides from a Next.js App for Offline Use
From running the existing Marp viewer offline to fixing what deployments, networks, and the presenter window exposed along the way.
From running the existing Marp viewer offline to fixing what deployments, networks, and the presenter window exposed along the way.
Next.js 16's cacheComponents hides the pages you leave with React Activity instead of unmounting them. Following a three.js canvas that went blank after a back navigation, I read the router, React, and react-three-fiber source and reproduced it in a browser.
Armed with the theory from Part 1, I made this blog (Next.js App Router) open offline. On the first deploy, the post I had just read would not open offline; on the second, posts opened but every image was broken. This is a chronicle of fixing, one deploy at a time, the traps created by soft navigation, prefetching, and next/image, and a record of settling the results with GA4 real-user data. Returning-visitor FCP improved by 634ms on average, while TTFB worsened by 525ms on average. The second post of the Service Worker Caching Deep Dive series.
In a Next.js 16 Turbopack production build, a module-scope singleton became two live instances at runtime. Inside the same synchronous block, one condition contradicted the other, and responses that arrived in 30ms still timed out. This is the record of tracing the cause through the bundle output: a partial scope hoisting merge, a circular import, an upstream bug that had already been fixed, and the single-variable experiment I ran too late.
Build-time transformations, cache key serialization, ResumeDataCache, cacheHandler, and Cache Components - everything created by a single 'use cache' line
Module boundaries created by a single line of 'use client', build-time transformations, Flight serialization, and performance implications
Switching costs stronger than technical superiority
The uncomfortable truth benchmarks reveal
The questions React Foundation must answer
What question does vinext really ask?
Hey Edge Middleware, how have you been?
What happens behind a single line of "use server"?
Exploring the four cache layers of the Next.js App Router
CVE-2025-55182, CVE-2025-55184, CVE-2025-55183, and the React hidden inside Next.js
Thank you for your interest. ๐๐ปโโ๏ธ