DIGITAL ARCHIVES · DH PORTAL

Digital Archives & DH Tech Portal

A portal aggregating tech resources — articles, videos, tutorials, and projects — on Digital Archives and Digital Humanities. Increasingly these are produced through AI-driven generation, as an ongoing experiment.

Explore

Jump into whichever section fits what you're after.

Latest Articles

View all →

🔍Mirador Carries the Zoom Across Pages — preserveViewport Defaults and the @latest Pitfall

In Mirador, moving to the next page carries the previous page's zoom level and pan position over. That is the behavior of osdConfig.preserveViewport, whose default is true (it lives under osdConfig, not window). It has been true across Mirador 3.3.0 through 4.0.0, while the unreleased main branch has it as false. This post covers what the setting does and where it is controlled in the source, why resetting (false) is more natural when canvas sizes vary per page, and the pitfall of mirador@latest moving the default behavior under you — plus the fix: pin the version and set the option explicitly.

miradoriiifopenseadragonfrontend

When a Docker Major Upgrade Took Down the Reverse Proxy (Traefik): An Incident Log

An investigation and recovery log of an outage where running apt-get upgrade bumped the Docker Engine to a new major version, after which the Traefik reverse proxy could no longer talk to the Docker API, and the Drupal site behind it became unreachable. The Docker Engine had raised the minimum supported API version, while Traefik's built-in Docker client kept trying to connect with an older API.

dockertraefikdrupalreverse-proxy

📚DH Weekly Topics — 2026年5月31日週

DH Weekly Topics — 2026年5月31日週

dh-weeklydigitalhumanitiesデジタルアーカイブocr

🗺️Notes from migrating an aggregation- and search-heavy app's data layer from Firestore to Postgres (Neon)

Notes on migrating the data layer of a map-based literary archive app from Firestore to Postgres (Neon) + Drizzle. Covers why we hit read-based billing limits, and how the question of fit looks once you frame it in terms of the workload shape: aggregation, faceting, and full-text search.

firestorepostgresneondrizzle

🔁Pitfalls of redirecting all paths to an external domain with vercel.json

A walkthrough of moving a Next.js (output: 'export') site from Vercel to GitHub Pages and turning the Vercel deployment into a redirect-only surface via vercel.json. Documents five or six attempts that failed for non-obvious reasons (framework detection, output validation, path-to-regexp quirks around trailing slashes) and the final config that actually works.

vercelnextjsgithub-pagesredirect

🔍Next.js 16: useRouter().push() silently no-ops in production — pushState workaround

Notes on a Next.js 16 + next-intl app where useRouter().push() silently becomes a no-op only in production builds, breaking interactivity on a search page, and a history.pushState + popstate workaround that restores it.

nextjsnext-intlreactdebugging