← All work
gpt-powered chatbot · 2023

HistorAI: chat with historical figures

A chatbot from early 2023 for text conversations with historical and fictional figures. Pick a name, the system generates a social-media-style profile picture, adopts the personality, and you talk. One evening to build. An early signal of what conversational AI would become.

HistorAI chatbot interface showing an AI-generated profile picture of a historical figure with a conversation thread
role
Solo Developer
year
2023
category
GPT-Powered Chatbot
stack
openai gpt · openai image api · javascript
The problem
History education is mostly passive. Could a thin layer over GPT make a historical figure feel approachable enough that you'd actually ask them a question, rather than reading a paragraph about them?

HistorAI started from a single question: what if you could chat with a historical figure or a fictional character? Could you build a credible version of that in an evening?

You could. The system prompt does most of the work. A user enters a name (Marie Curie, Hercule Poirot, anyone the model has read enough about) and the application stitches together a system prompt that tells GPT to adopt the persona, exaggerate the characteristic traits, refuse to break frame, and answer with what that person plausibly would have said given what they wrote, said, or were recorded saying. A simultaneous call to the image API generates a stylised profile picture. The user gets a chat window with a face at the top and a name underneath.

The “evening build” framing matters

The point of this project, and the reason I keep it on the portfolio years later, isn’t that the build was technically sophisticated. It wasn’t. It was a couple of hundred lines of JavaScript wrapping two API calls, with no retrieval, no embeddings, no fine-tune, and no clever orchestration. A system prompt and a face.

The point is the timing. This was early 2023. Chatbots-with-character was still novel enough that people would lean in and want to play, and the technical bar to build one was already low enough that a single evening produced something credible. That gap (between people are still impressed and the bar to build is already trivial) is where a lot of my best small projects have lived.

My habit of being early to a trend means the prototype doesn’t have to be sophisticated to prove the point. The same project today would need either real retrieval-augmented generation over a primary source corpus or a fine-tune to feel as fresh as this one did. The version I built then was enough.

What people actually did

I never logged conversations (the API key was mine and the use was light), so I don’t have data on which character was most popular. The pattern I saw watching people use it, though, was consistent: people would start with a famous figure they already had questions for (an inventor, a writer, occasionally a villain), exhaust those questions in five minutes, then start asking what the person would have said about something contemporary. That’s where it got interesting and slightly uncomfortable. Asking a 19th-century surgeon about modern anaesthesia gets you somewhere. Asking the same surgeon about modern abortion law gets you somewhere else.

I added soft moderation on the prompts that needed it, accepted that the model would refuse to play around the harder edges, and let people push at the boundaries. They mostly self-policed once they realised the model would too.

Why I’d build it differently now

If I rebuilt HistorAI in 2026 I’d reach for a different architecture entirely. Modern multimodal models have personality steering and image generation in the same API. A small RAG layer over a curated corpus per character (letters, transcripts, journal entries) would give the conversation actual texture rather than the model’s averaged impression of how this person sounded. Voice would be obvious; the AR business card shows what that pipeline now looks like with ElevenLabs.

I haven’t done that rebuild because the project’s value to me was the proof it produced at the time, not the artefact it leaves behind. It’s a snapshot. The patterns it surfaced (personality-tuned prompting, profile-pic generation as identity, the willingness of users to push the model around real questions) all turn up later in my work, dressed differently, and with the benefit of three more years of model capability. This one was the first time I noticed them.

Results

  • Working chatbot with personality-tuned conversation
  • Generated profile portrait per character via the OpenAI image API
  • One evening to build, one of the earliest projects that hinted at the vibe-coding patterns I'd later research