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