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.
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.