Tweetscape
A prototype for a more user-centered social media client — one that reframed Twitter as a discovery interface instead of an engagement trap. Instead of opaque feeds optimized for engagement, Tweetscape explored what it would mean to give users algorithmic agency: clear, steerable controls over how discovery works.
Incubated by Roote in 2022, Tweetscape started as an experiment in turning Twitter into a tool for thought. I joined an early lightweight client (started by Nick Torba) to re-architect it around a social knowledge graph and NLP-powered entity tracking — so recommendations could become something users could inspect and edit, not just receive.
The Challenge: Lost in the Stream
The Challenge: Lost in the Stream
Twitter around 2022: Engagement-hungry algorithms pushing content, often sacrificing relevance or focus. And that’s even before a certain dude took over and didn’t exactly make things better. You scrolled, but did you discover? Meaningful control over the ‘why’ behind the feed felt absent. The challenge wasn’t just about building a better Twitter client; it was about questioning the fundamental dynamic: could we design an experience centered on user control and transparent exploration, rather than passive consumption optimized for platform metrics?
Modeling Algorithmic Agency
Modeling Algorithmic Agency
Instead of accepting the linear, opaque timeline as a given, we imagined Twitter as a navigable space — a dynamic graph of people, ideas, and conversations. The core architectural concept was the Social Knowledge Graph. Instead of mapping followers or hashtags, we used NLP to understand the content of tweets, extract entities (people, topics, concepts), and map semantic relationships.
Then, we integrated this semantic layer with the social interaction data (likes, replies, quotes). Instead of treating engagement as merely a popularity score or engagement fuel, we repurposed it as a signal for contextual relevance, trying to bridge social context with semantic depth. The hypothesis was that the same signals used for platform optimization could, with the right interface, support user-driven discovery.
We built tools on top of this graph to give users actual algorithmic agency:
| Capability | What it gave users |
|---|---|
| Personalized streams | Define streams based on semantic similarity, specific topics, or anchor tweets |
| Community detection | Identify clusters and shared interests based on graph topology |
| Entity tracking | Follow ideas or people as they moved across conversations, not just down a timeline |
| Multiple views | Switch between time, topic clusters, or association chains to reveal different patterns |
| Controlled serendipity | Surface relevant novelty (“unknown unknowns”) via graph proximity rather than pure randomness |
| Feedback transparency | Understand (and influence) why content shows up in your stream |
The system was designed around a modular flow (Sources → Streams → Views → Content) intended to make discovery both powerful and steerable. The idea was inspired by the ease of something like Spotify radio, but with crucial added transparency and control.
A user could kick off exploration by simply selecting a few initial Sources — perhaps a couple of trusted researchers, a specific insightful tweet, maybe a broad topic. Based on these seeds, the system would generate initial Streams showing related content and conversations. As the user explored the Content in different Views (timeline, clusters, etc.), items they interacted positively with (e.g., liked, saved, spent time on) would implicitly be added back to their dynamic list of Sources.
Crucially, users could directly edit this Sources list at any time — adding new people or concepts, but just as importantly, removing sources that were leading the stream in unhelpful directions. This provided direct, transparent control over the recommendation engine, unlike a static ‘radio station’ where you can’t easily change the tune once it starts playing. The user was always able to reshape the lens through which they viewed the network.
Outcome: A Working Prototype & Seeds for Trails
Outcome: A Working Prototype & Seeds for Trails
We built a working prototype with a solid NLP pipeline and a graph backend juggling around 5 million nodes sampled across the Tools for Thought, Web3 and TPOT communities. It demonstrated that a user-directed, graph-based approach to social media navigation was technically feasible and offered a genuinely different exploration experience.
Then, Twitter’s new ownership changed the API access policies, effectively pulling the plug on the project’s data source. So, Tweetscape as a product was sunsetted. However, the core architectural ideas — particularly the associative engine linking semantic and social data (developed primarily by me), and the focus on user-defined information flows (interface concepts developed with Andre)—didn’t die. They became the direct intellectual foundation for the initial Trails prototype, which aimed to build a similar associative discovery engine, but liberated from reliance on any single platform’s API. It was a lesson in the fragility of building on rented land, but also in the portability of core concepts.
Related reading
Related reading
Team
Team
| Role | Name | Contribution |
|---|---|---|
| Vision & System Design | Julian Fleck | Conceptual framework, architecture, NLP, interface design |
| Full Stack Dev | Nick Torba | Twitter integration, early prototype, graph traversal, data sourcing |
| Backend Dev | Kikuo Emoto | Graph infrastructure, data modeling, NLP integration |
| Frontend Dev & Design | Andre Vacha | UI implementation of core UX, design research, graph traversal |
| Design Research | Ricardo Saavedra | Early vision development, design direction |
| Advisor | Rhys Lindmark | Roote incubation, strategy, funding support |