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

AI Chat Agent and Legacy Modernization

A nineteenth-century portrait painter's complete catalogue, 238 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: it answers only from the archive, cites what it references, and invites help recovering the works that are lost.

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: 238 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 checkable238 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.

  • 238 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
  • The chat agent answers only from that same structured archive and cites the specific work it references; where the record does not say, it says so instead of inventing
  • 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.

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
  • Conversations with the chat agent cost about four cents each, putting the whole public-facing agent at roughly $10 to $25 a month
  • Every answer is traceable to the archive, so the family's scholarship stays the single source of truth

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.