All work
Personal · Live

archive.spenc.ee

A public deep-zoom archive for scanned paper ephemera — mid-century Pacific Northwest map covers, tourist pamphlets, and the illustration that filled the margins of working maps. Gigapixel tile viewing, full-text search, and AI-written backstories.

Why this exists

High-resolution scans of paper ephemera are huge — a single map cover can be hundreds of megabytes — and there's no clean, fast way to browse and zoom them on the web without a heavyweight viewer or a slow full-download. I wanted a personal, well-crafted home for the collection that loads instantly, zooms to gigapixel detail, and reads like an editorial catalog rather than a file dump.

archive.spenc.ee home page — editorial hero over a grid of scanned map covers
Home · editorial index
archive.spenc.ee browse view — the full collection of scanned ephemera
Browse · the full collection

How it's built

1

Ingest

A `pnpm ingest` CLI walks a folder of TIFF/JPEG scans, generating DZI tile pyramids, thumbnails, and previews with Sharp. Single files become one item; subfolders become multi-page items.

2

Store

Originals, thumbnails, and tile pyramids upload to Cloudflare R2 behind custom CDN domains. Item metadata lands in Neon Postgres via Drizzle, with a generated tsvector column for full-text search.

3

Serve

Next.js App Router server components read from Neon over HTTP. Detail pages mount OpenSeadragon against the R2 tile URLs for smooth gigapixel zoom; originals stream on demand from R2.

4

Enrich

A Gemini pipeline drafts a short backstory for each piece — the era, the publisher, what the illustration was selling — turning a scan into a catalog entry.

Notes

  • Next.js 16 App Router, TypeScript, Tailwind — server-rendered, no client data fetching for the catalog
  • Drizzle schema (items, item_images, tile_jobs) with Postgres full-text search over a generated tsvector
  • Cloudflare R2 for originals + DZI tiles; OpenSeadragon for deep-zoom, no download required
  • Sharp-based tile pyramid generation runs locally in the ingest CLI, not on the server
  • Editorial design language — serif display type, warm paper, the collection presented as a catalog

Status: Live at archive.spenc.ee with 64 scans online. A personal project — an excuse to build a proper gigapixel viewer and a home for the collection.

64

Scans Archived

Gigapixel

Deep-Zoom Viewer

R2 + Neon

Serverless Stack

AI

Generated Backstories

Built With

Next.jsTypeScriptDrizzleNeon PostgresCloudflare R2OpenSeadragonSharpGoogle Gemini