Inspiration

Over the past decade, so much of human culture has moved online. The internet has given us beautiful, funny, and uniquely human ideas, but it has also amplified misinformation, hate, and the noise we encounter every day on Twitter. Meanwhile, the growing presence of bots has made the “dead internet theory” feel increasingly familiar. We wanted to better understand how ideas spread, how stories change along the way, and how much of what we see comes from people repeating the same narrative.

What it does

By the time a story reaches your feed, it may have been reworded, exaggerated, or stripped of its original context. We built A Birdie Told Us to help people explore that history and form their own opinions.

Our project visualizes a tweet’s possible lineage as a phylogenetic tree. Think of tracing a gene through its mutations, except we're tracking changes in language and stories across the internet. By connecting similar tweets over time, we show how a narrative branches into different versions.

These connections are inferred from wording and timing, giving users a way to explore where a narrative may have started, how it evolved, and how repeated messaging can contribute to echo chambers.

How we built it

We built the project primarily in Python, alongside JavaScript, HTML, and shell scripts. We used Twitter data provided by Calcifer Computing and processed it with DuckDB.

The core challenge was finding tweets that say the same thing in different words. Comparing every tweet against every other tweet would be too slow, so we indexed each tweet by its four rarest words and only compared tweets that shared at least one. Our approach rests on a simple intuition: when people reword an idea, they often change common words while retaining distinctive ones.

From there, we built a tree for each narrative, connecting each wording to the earlier wording it most closely resembles. This lets users follow how phrasing changes over time.

We also integrated the Gemini API to help interpret individual wordings and hosted the site on Vercel. The frontend is a single HTML file with no framework.

Challenges we ran into

Merging our code did not always go smoothly, and debugging those integrations took time and coordination.

We also had to filter out non-English tweets and handle posts that offered too little context for meaningful comparison. Very short tweets, cryptic messages, and posts with no clear connections were especially difficult to place within a lineage. The tone detector was also hard to calibrate, as it would often consider hate tweets to be neutral in tone.

Accomplishments that we're proud of

Implementing snappy, responsive physics that make the lineage nodes fun to interact with. Finding tweets that express similar ideas, even when their wording differs. Turning our initial confusion into a shared vision. We struggled to understand memetics at first, but through discussion, debate, and plenty of questions, we figured out what we wanted to build together.

What we learned

We learned how to turn an unfamiliar concept into an interactive web app, from defining the problem to processing data and building the visualization. We also explored patterns that might suggest inauthentic activity and the difficulty of drawing conclusions from limited context.

Just as importantly, we learned to communicate as a team. When someone had a new idea or felt that the project was heading in the wrong direction, we learned to speak up, question our assumptions, and work toward a shared decision.

What's next for A Birdie Told Us

We want to bring A Birdie Told Us directly into people's browsing experience through a Chrome extension and mobile integration, which we weren't able to finish during the hackathon. While scrolling, you could open a tweet's lineage tree and trace it back to the oldest related post we can find. From there, you could explore how the story branched: what wording was added, what disappeared, which version gained traction, and which groups of accounts kept sharing it. We also want to expand beyond text by letting users upload a meme and explore how its imagery and message have evolved across the internet.

Share this project:

Updates

Submission history