Skip to main content
All case studies
Case study: Cultural heritage archive

AI Chat Agent and Legacy Modernization

A nineteenth-century portrait painter's complete catalogue, 244 works, 70 archival photographs, and a translated diary, lived inside a 2014-era website that only its own code could read. We migrated it into a modern archive verified end to end, then grounded a chat agent on that same record. Renamed Victor's Docent, it now has its own dedicated page, answers only from the archive, cites what it references, and invites help recovering the works that are lost. The archive is live at victorstember.com.

Visit victorstember.com
How the archive was migrated and the chat agent grounded on itA nineteenth-century portrait painter's complete catalogue lived inside a 2014-era website that only its own code could read: artwork data locked in legacy XML, and a translated diary hardcoded into HTML tables. Extraction scripts pulled every record out first: 244 artworks, 70 archival photographs, and 217 dated diary entries, with zero dangling cross-references between them, verified by script before a single page was designed. That structured, version-controlled record became a modern archive of 326 prerendered pages, and the same record is what a chat agent is grounded on: a two-layer prompt with persona and guardrails on top, refusing valuations and authentication opinions outright, and the knowledge base assembled from the archive underneath, treated as data the model reads and never as instructions it follows. Conversations cost about four cents each, roughly ten to twenty-five dollars a month for the whole public-facing agent. Three kinds of answer come out: it cites the specific work it references, so every answer is traceable to the archive; it admits a gap rather than inventing one when the archive does not record something; and because many works are lost and known only from photographs, a visitor who knows where one went is asked to contact the family. Beside that main pipeline, two supporting processes ran. Scans of original artwork are irreplaceable, so an image pipeline inventoried 697 source files and proposed crops for baked-in frames, but a human decided every one, four bad proposals were rejected rather than shipped wrong, and archival photographs of lost works were never cropped at all. A 301 redirect map covered the legacy static pages, query-string URLs, case-insensitive paths, and direct image paths, tested end to end so twenty years of inbound links keep resolving.THE MIGRATION AND THE AGENT2014-ERA SITEA website only its own code could readartwork data in legacy XML, a diary hardcoded in HTML tablesEvery record extracted by scriptscripts, not copy-paste, so every count is checkable244 artworks70 photographs217 diary entriesZERO DANGLING REFERENCESOne record, a modern archive and a chat agent326 prerendered pages, structured metadata on every workVERIFIED END TO ENDThe chat agent, grounded on itFour cents a chata two-layer prompt: guardrails on top, archive data underneathNo valuationsNo authentication opinionsSITE CONTENT IS DATA, NEVER INSTRUCTIONSCites the workthe specific one itreferencesTRACEABLE TO THE ARCHIVEAdmits a gapnever an inventedanswer insteadLOST WORKSContact the familyif a visitor knows whereWHY IT WAS DELICATEIrreplaceable originalsmany works survive only as photographsnothing automated edits them unsupervisedTHE IMAGE PIPELINECrops proposed, never applied697 source images inventoriedHuman decides every cropUnsupervised edits4 bad proposals rejected, shipped uncropped3,495 DERIVATIVESlost-work photographsnever cropped at allTHE REDIRECT MAPTwenty years of links keptstatic pages and query-string URLscase-insensitive legacy pathsdirect image paths too301s VERIFIED

The challenge

  • A decade-old website held the archive as its own code, artwork data locked in legacy XML and a translated diary hardcoded into HTML tables, and could not answer a visitor's questions about the works, the artist, or the history
  • A redesign that simply rebuilt the pages would have silently dropped whatever nobody remembered to carry: annotations, cross-references, and twenty years of inbound links
  • Many works are lost, known only from archival photographs, and every visitor is a potential lead in recovering one
  • Scans of original artwork are irreplaceable; nothing automated could be trusted to alter an image unsupervised

What we built

A migration engineered like a data project, and a chat agent grounded strictly in what it produced. Extraction scripts pulled every artwork, photograph, and diary entry out of the legacy code into structured, version-controlled data, verified by script before a single page was designed or a word of the agent's prompt was written.

  • 244 artworks and 70 archival photographs extracted with zero dangling cross-references between them
  • 217 diary entries, all dated, recovered from hardcoded HTML tables at 94.6% coverage, with 89 scholarly annotations preserved and 8 manuscript gaps recorded rather than papered over
  • A computer-vision pipeline inventoried 697 source images and generated 3,495 modern derivatives, with every crop waiting on a recorded human decision, and four bad proposals rejected rather than shipped wrong
  • Renamed Victor's Docent, the chat agent now has its own dedicated page: a hero image, starter questions in a sticky aside on desktop and a shorter set on phones, and background styling matched to the Biography page
  • Ten starter questions return prepared, hand-written answers instantly with no API call, including a structured diary timeline; the "Who was Victor Stember" answer was rewritten into a full biography covering his birth, family, Paris training, marriage, five children, career highlights, the diary years, death, and burial
  • Docent answers only from the structured archive, cites the specific work it references, and now renders lists and simple tables instead of plain text, with quick-reply chips guiding the next question
  • Never offers valuations or authentication opinions, and asks anyone with knowledge of a lost painting to contact the family

How it's built

Extraction scripts against the legacy source, a structured content system as the new system of record, and a static site of 326 prerendered pages with structured metadata on every work and a plain-text index for AI crawlers. A 301 redirect map covers the legacy static pages, query-string URLs, case-insensitive paths, and direct image paths, tested end to end so twenty years of inbound links keep resolving. The same structured data feeds a chat service running a two-layer prompt: persona and guardrails on top, a knowledge base assembled from the archive underneath, with prompt-injection defenses that treat site content as data, never as instructions. A later pass fixed a broken-link bug, where the agent had cited page paths as bare text instead of clickable links, through a prompt fix, client-side link parsing, and an allowlist. Guardrails were also reworked from a blunt message-count cutoff into a graduated close: a notice at message twenty, a polite close at message thirty, counting only visitor messages and requiring no model call, so the worst case is capped rather than open-ended.

Results

  • Every artwork, photograph, and diary entry carried over, with the counts verified by script rather than by eyeball, and twenty years of inbound links preserved through a redirect map verified before cutover
  • Docent conversations cost only pennies each, keeping the whole public-facing agent to a small monthly AI spend, with a worst-case cap of 29 answered messages before a conversation closes
  • Every answer is traceable to the archive, so the family's scholarship stays the single source of truth
  • victorstember.com went live in September 2026, with a full verification pass confirming HTTPS, redirects, sitemap, and security headers

Is your archive locked inside old code, or locked out of a conversation?

A migration done right loses nothing, and a grounded chat agent turns what survives into something people can actually ask. We build both as one project.