Turning 391,724 Messages Into a Story, Not a Dashboard
What I learned from turning almost a decade of group-chat history into an interactive Wrapped experience.
THE WORKING DATASET
- Group chats
- 12
- People
- 10
- Time range
- 2017–2026
I had almost a decade of group-chat history sitting in exported files.
The obvious thing to build was an archive. Then I explored a dashboard. There were also more elaborate ideas around maps, game-like navigation and other ways to browse the history.
They could all show more.
That turned out not to be the same as making the experience better.
BIW Wrapped only started to feel right when I stopped treating the messages as an archive to browse and started treating them as source material for a story.
The final working dataset covered 12 group chats from 2017 to 2026: 391,724 deduplicated, human-authored text messages from 10 people. The count deliberately excluded things such as media-only posts, stickers, system changes, calls, polls, attachments and unsent messages.
The technical work mattered. But the decisions around scope, pacing and judgement mattered more.
These are the three things I kept coming back to.
Scope first, story second.
With a dataset this personal, it was tempting to start with the interesting parts.
Find the funniest messages. Pull out the biggest numbers. Build a leaderboard. Start writing the story.
I found that I needed to do the opposite.
Before deciding what the story should say, I had to decide what the data was actually allowed to say.
That meant locking the group scope, time range and definition of a message first. It also meant deduplicating records across the source files and making sure the group totals, yearly totals and personal views all came from the same canonical snapshot.
The final number — 391,724 — only became useful after those boundaries were fixed.
Without that, even a simple statistic could quietly mix different scopes. A personal card could disagree with the group total. A newer recount could sit next to an older number and still look perfectly plausible.
The lesson was simple:
Scope first, story second.
A better story does not rescue an unstable dataset.
FROM EXPORTS TO A STORY
- 01ExportsSource files
- 02FilterHuman-authored text
- 03DeduplicateOne message, once
- 04SnapshotOne shared dataset
- 05StorySelected material
A memorable interaction needs a narrative purpose.
THE CONCEPT GOT SIMPLER
- 01ArchiveBrowse the history
- 02DashboardScan the numbers
- 03Map / RPGExplore a world
- 04WrappedFollow a story
I spent a lot of time exploring ways to make the project feel more interactive.
An archive gave people freedom to browse. A dashboard made the numbers easy to scan. Map and RPG-like ideas made the project feel bigger.
But every extra layer also asked the visitor to understand another interface.
Eventually I moved toward a mobile-first, full-screen Wrapped flow: one screen at a time, with the rhythm closer to Spotify Wrapped or a Bilibili year-in-review than a traditional website.
The interaction became much simpler.
Tap, swipe or continue.
Special interactions were kept for moments where they added something to the story. Most screens did not need a mechanic. They needed timing, hierarchy, a small visual cue, or enough space for the next line to land.
I also removed ideas that were technically possible but did not help the narrative: persistent navigation, heavier game mechanics, and background UI audio.
That changed how I think about interactive work.
A memorable interaction needs a narrative purpose.
If an interaction does not help someone understand, reveal or feel the next part of the story, it is probably just another thing to operate.
ONE SCREEN, ONE PART OF THE STORY
- Group recapBegin together
- PatternsSee the shared history
- MemoriesPause on a moment
- Personal branchFind your own view
AI speeds up iteration, but it cannot decide what a memory means.
AI made this project much faster to iterate.
It helped me work through layout and copy variants, organise specifications, check inconsistencies, prepare implementation handoffs and revisit decisions without rebuilding everything manually.
But BIW Wrapped also made the limit very obvious.
AI could surface a message.
It could not decide whether that message represented the whole group or only a small conversation.
It could help compare versions.
It could not decide whether a joke should be left alone instead of explained.
It could flag an attribution conflict.
It could not decide what it would mean to assign a personal memory to the wrong person.
And it could help organise private source material, but it should not decide what deserves to become public.
Those decisions stayed human because they depended on context that was not just informational. They depended on relationships, shared history, privacy and knowing when something was funny precisely because nobody needed to explain it.
The faster iteration became, the more important that judgement became.
WHERE THE DECISIONS STAY HUMAN
AI assists
Iteration.
- Organise specifications
- Compare versions
- Check inconsistencies
- Explore layouts and copy
Human decides
Meaning.
- What a memory represents
- Who it belongs to
- What stays private
- What belongs in the story
The final direction
BIW Wrapped ended up much smaller in interaction scope than some of the earlier concepts, but more deliberate in what each screen was doing.
It became a mobile-first story built around a single verified data snapshot, aggregate group patterns, selected memories, personal branches and a pixel-art visual language based on ordinary everyday scenes.
It is deliberately not a complete archive.
That is the point.
The project started with 391,724 messages, and I assumed the hard part would be processing them.
The harder part was deciding what counted, what belonged in the story, what each interaction was for, and where automation should stop.
That was what turned the project from a dataset into BIW Wrapped.
BIW Wrapped was built from private group chats. I created Small Talk Wrapped so others could try the experience. It follows the same design and interaction approach, with fictional characters, stories and statistics.
THE PUBLIC EDITION

