Realization
As I was working on completing search and beginning to implement history into search, I was drawn into building an interface for the History Management that Anupam has built out over the past few weeks. For the second time in the past month, I had another unsuspecting moment of “holy shit, this is actually pretty cool” when I first saw both on-chain and off-chain interactions pulled into browser history (s/o @Anupam for the initial thought to merge Wallet Connection Management with History Management).
These moments are invigorating, and provide strong internal validation that there’s an incredible opportunity here (and that we’re still hardly scratching the surface of that opportunity with our early ideation and prototyping). Really amazing things start to happen when you start thinking of natively browsing blockchains instead of the existing, bandaid-solution model of wallet extension modals.
Feature Overview
Browser <> Blockchain
Dub’s browser history shows - you guessed it - a history of the websites you visit. But beyond that, Dub logs and surfaces all blockchain interactions that occur in tandem with websites. So you can see everything from Wallet Connections, Wallet Disconnections, Personal Signatures, and Signed Transactions. Existing wallets might show you the history of your Signed Transactions, but Dub brings these transactions into the context of which they occurred. Yeah, I minted that NFT last week - but where? Dub knows, and Dub will show you.
Search Your History
There’s a super basic search that scans page titles, urls, and blockchain interaction metadata and filters results according to your search query.
Filter Your History
In addition to searching through your history, you can also filter your history by the type of event. For instance, if I want to see all of the Wallet Connections I’ve made I could easily filter history to see only that information.
Process
Primary Challenges
SwiftUI ‘Unstyled Button Bug’
When building the basic History View, I encountered the strangest issue - as I added history events (I’m talking like only 3-4 events), the performance of Dub would get destroyed (I clocked it as using 108% of the CPU, didn’t know this was possible). I spent the better part of a day trying to find out where I went so wrong with building the Dub interface. With the help of some rubber duck debugging with Anupam, we discovered an unreported SwiftUI bug where having too many unstyled buttons in a View would demolish the performance of any app in any case. The solution? Add a style 🤦🏽♂️
Learnings
Blockchain > Browser
My favorite parts of building Dub is feeling the magic that we unlock by building blockchains natively into the web browser. These moments really shine through when we put blockchains first in our design thinking and prototyping. With each thing we build, we should be thinking about how we can make blockchains the highlight of the experience rather than abstracting them away.
Next Steps
Reflection
The team is taking a short vacation, our first team-wide moment of unfiltered rest since September. That said, we’re still going to ship next Wednesday because we just can’t miss a beat :) While we’re individually deciding what next week’s ‘experiment’ will look like, I’m choosing to reflect on the 50+ experiments we’ve shipped to date, note key learnings, and set key action items for the months ahead.
We have a never ending to-do list, and it’s becoming harder and harder not to choose what not to do.
I look forward to filtering out my own noise and building a clearer picture of what we’ve created, what we’ll create next, and what I can contribute best to whatever is next.