Following the previous post — most of PaperMod ported over unchanged. A few things needed to adapt, because they depend on something Hugo does at build time that a request-time renderer like Dune approaches differently.

Search: server-side, not Fuse.js

Upstream PaperMod's search page loads a client-side Fuse.js index built from every post at Hugo build time. Dune has no build-time search-index step, so this port's search page queries Dune's server-side /api/search endpoint instead — same live-results UX (debounce, arrow-key navigation), different mechanism underneath. Try it on the Search page.

Cover images: plain <img>, no responsive srcset

Hugo's image processing pipeline generates multiple resized variants of a cover image at build time and serves the right one via srcset. Dune doesn't have an image-processing pipeline, so cover images render as a single plain <img> — functional, but not responsive the way upstream's is.

Heading anchors: theme-generated, not marked-emitted

Dune's markdown renderer (marked) doesn't emit id attributes on headings the way Hugo's does, so this theme generates them itself, using the same GitHub slug convention Hugo uses — in-page anchor links still behave the way you'd expect.

Not ported at all

A few upstream features don't have anywhere to attach in Dune's content model, so they're simply not included: profile-mode home (index_profile.html — an alternate homepage layout), the taxonomy terms page (terms.html, which needs a full list of tag values Dune's templates don't receive), the comments partial, and search-engine verification meta tags.

None of these are things this port "got wrong" — they're the actual boundary between what Hugo can do at static-build time and what a request-time renderer like Dune can do. Everything else — the parts that make PaperMod look and feel like PaperMod — carried straight over.