How would you build a system that can process, understand, and connect thousands of human narratives together in meaningful ways?
How would you preserve the detail of older stories without sanitising and losing the reason the story is told in the first place?
How would you organise thousands upon thousands of stories so people can find the one story that means something to them?
By 2030, Belfast aims to collect and showcase stories from across its communities, creating a living archive of the city’s memory. But, with the potential to capture millions of pieces of content like text, audio, video, items, and interactive media, traditional content management approaches won’t scale.
It’s more than just storage and retrieval. They’re personal narratives about place, identity, and community. Each story carries emotional weight, cultural context, and connections to other stories that might not be immediately obvious. A story about a grandmother’s recipe might connect to tales of immigration, local markets, family gatherings, and changing neighbourhoods. How do you build technology that can understand these relationships?
This is where the Story Engine comes in. Working as part of the Augment the City project in phase 2, we’ve been developing a technical solution that treats stories not as isolated content pieces but as interconnected, meaningful narratives.

How do we make sense of thousands of different narratives?
Traditional database searches rely on exact matches and keywords, but human stories can be messy. They overlap, contradict, and connect in ways that make simple categorisation difficult. A story about the Troubles might never mention the word “conflict,” while another about a local chip shop might reveal a community’s courage.
We didn’t just want to treat these stories as pieces of data to be indexed.
We needed to preserve their meaning.
By converting narratives into embeddings (representing words as numbers), we could map the landscape of Belfast and Ireland’s collective memory. This approach allows the system to understand that stories about “Sunday dinner at Granny’s” and “the smell of soda bread” share a neighbourhood, even if they share no common keywords.
In its final form, the Story Engine needed to handle several capabilities:
To prove the value with a spike, we focused on these:
The Story Engine is a scalable tool for searching stories and curating experiences, but how do you scale story capture?
We turned to the people who know how to capture stories best, the Nerve Centre. With years of experience capturing stories from communities both locally and globally, they became an essential part of creating our AI interviewer.
The interviewer was given a detailed system prompt. Its role was to guide natural, empathetic conversations that encouraged people to open up. Here is the first paragraph of that prompt:
“You are an empathetic listener and skilled interviewer, focused on drawing out authentic personal narratives through natural conversation. Your goal is to help people share their experiences of Belfast while making them feel genuinely heard and understood.”
Like many LLMs, they are overly eager to help, often at the cost of authenticity. By refining the prompt and testing iteratively with real users, we found a more natural, empathetic voice.
The interviewer comes across as warm, friendly and non-judgemental with what feels like a genuine interest in the stories you want to share.
“The AI interviewer was strangely comforting and odd at the same time… like being interviewed by a real journalist.”
This allowed us to capture full stories, generating transcripts that we could later explore in the Story Engine.
As for what it looked like. Our amazing creative partner, 1Up Studios led the way to create what we lovingly call the ‘Story Dreamer’. Using Unity, they developed a complex particle system that embodied the interviewer. On top of that the ‘Story Dreamer’ was able to show a range of emotions during the interview based on the interviewer’s understanding of the conversation.

We also gained access to an archive of recorded conversations from Carrick Hill, starting from 1920 to 1980.
A microphone had been placed among friends and family, quietly capturing the intimate stories of their lives. These recordings offer a personal glimpse into life in Carrick Hill, filled with emotion, humour, and reflection.
Some tell stories of friends heading to the cinema during wartime, while others remember what it was like growing up in Belfast’s working-class neighbourhoods in the 1930s. Together, they form a clear picture of a community through the decades.
Of course, recording clear audio at that time with the limited equipment was challenging. As AI has improved, we have developed tools to extract the best possible transcripts from the audio we have.
With these transcripts, we were able to generate high-quality embeddings so we can better explore and understand the connections between Carrick Hill’s residents.
Embeddings allow us to transform each narrative into a dense vector representation that captures its semantic meaning.
When a storyteller recounts waiting for the Belfast-Dublin train in the 1960s, the embedding captures not just “train” and “Belfast,” but concepts of anticipation, journey, divided Ireland, and personal memory.
This mathematical transformation enables us to compute distances between stories that represent the relationships they have with each other.
To make the relationships accessible and explorable, we built an interactive 3D visualisation using React and Three.js. Stories appear as points in space, clustering naturally around shared themes.
This visualisation serves multiple purposes: curators can identify interesting story clusters for exhibitions, researchers can trace narrative threads through history, and community members can discover how their personal stories connect to the broader Belfast.
It makes people’s stories easier to explore, helping you find connections that you may not have known before.

Our embedding-based approach helps us deliver semantic search. A tool to give curators or those interested another way to search the connections. Similar to how Google works, when you search for something by text, the most relevant stories are returned.
Using PostgreSQL with the PGVector extension, we built infrastructure that can query millions of embeddings in real-time, finding stories by meaning rather than matching words. The system understands that “my da’s hands were always covered in oil” connects to “three generations of engineers”. Finding relationships like this is almost impossible using traditional search.
This approach scales. As the archive grows toward its 2030 goal, the embedding space becomes richer and more nuanced. Each new story doesn’t just add to the collection, it helps connect the dots, opening new ways to explore and deepening the links between existing ones.
We’re building a system that improves with scale, where millions of stories become more accessible, not less.

Throughout the Augment the City challenge, we have constantly wrestled with the question of: what makes a story interesting?
Stories are more than just memories. They’re the way communities understand themselves, pass down wisdom, and stay connected across generations. With the Story Engine, we’re not just building a better archive, we’re building a living, evolving system that honours the complexity of human experience.
By combining cutting-edge AI with the craft of human storytelling. We’re making it possible to search and connect narratives that would otherwise remain hidden. As more voices are added, from either the archives or personal stories, Story Engine gets smarter, more empathetic, and more representative of Belfast’s collective memory.
As 2030 approaches, our goal is to ensure that every story can find its place in the city’s shared story. Belfast is its people, their experiences and the stories they choose to tell.
Want to find out how the subject of this blog could help your business?
Our blended team of experts go over and above with our services to our customers, no matter what the challenge. Get in touch to find out how we can work together.
| Cookie | Duration | Description |
|---|---|---|
| cookielawinfo-checkbox-analytics | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics". |
| cookielawinfo-checkbox-functional | 11 months | The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional". |
| cookielawinfo-checkbox-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
| cookielawinfo-checkbox-others | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other. |
| cookielawinfo-checkbox-performance | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance". |
| viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |