Hello. I’m one of the people quietly contributing to your codebase. Using React? check your repos for classnames or react-select. Kain was shocked when I pointed out, just after joining Infinex, how many Dapps I could own via supply chain attack. That was my first week in the space, but I decided rather than an accelerated retirement plan I’d stick around to help improve crypto UX.
I’ve been bouncing around the web since the late ‘90s, mostly focused on the JavaScript ecosystem for the last decade. I’ve built widely used open source projects for Node.js and React, helped meme css-in-js into existence, and nerded out over developer experience.
I’ve worked at companies ranging from startups and scaleups to majors like Atlassian and Qantas, mostly through Thinkmill - a tech consultancy I co-founded in 2013. Two years in we teamed up with Kain to build Blueshyft, a payments company and also the project that led to him founding Synthetix.
Little known fact: I started as a designer. But getting hands-on and building things was too compelling, so HTML and then JavaScript became my weapons of choice to invent things (my life has been driven by the need to “just build cool shit”).
I pulled on that thread long enough to figure out that good front-ends need good back-ends, and you can’t do that in isolation, so the biggest project I’ve led was back-end focused with Node.js. I ended up deep in the GraphQL ecosystem for a while too.
I care about inventing things that are good to use, regardless of the tech. That led naturally to Design Systems which I spent a bunch of time in, aligning designers and developers so they’re building the same thing with the same mindset instead of working in isolation and throwing things over the wall. If you don’t understand a medium, you can’t design for it; if you don’t care about design, you can’t build great things.
The other thread I’ve pulled hard on is open source and developer experience (DX). At a certain point, you just can’t have a significant impact as an individual unless you work to empower other people. There’s nothing like working in the open and collaborating with a broad group to get good at what you do.
But let's talk about what I’m doing in crypto.
A year ago, Kain pitched me on Infinex: his new plan to make crypto more accessible to people outside the enthusiast crowd. The idea was that focusing on UX and creating a more centralised experience (while still being onchain) would be compelling to people who otherwise just use Binance, Coinbase, and other centralised exchanges.
The hook? he wanted web people to help build it, not just crypto degens (unsurprisingly he’d accumulated quite a few of them by the time he came to see me). Together we’ve pulled together a world class team of designers, product and marketing people, front and back-end developers, and onchain engineers to build Infinex.
Having built Synthetix into one of the first DeFi protocols, Kain looked at the outcome, and realised most people interacting with crypto are still not really using crypto. They’re not onchain – they’re living in CZ’s database. We say not your keys, not your coins, but that is not the lived experience of most people in crypto today. And that’s despite the lessons of FTX, just the largest of many examples why self custody is important.
What’s the point of building new financial infrastructure on decentralisation, censorship resistance, and self custody if (practically) everyone ends up using something as opaque and centralised as Facebook?
It’s a good analogy because, for many people, Facebook is what brought them online. Now we have e-commerce, online banking, TikTok and Uber. It’s hard to imagine life without online services. But it wasn’t the open protocols that brought the tidal wave of users onto the internet; it was companies building compelling products that people wanted to use and making onboarding incredibly easy.
That’s not to say that the open protocols weren’t important. The rallying cry of web standards helped break Microsoft’s stranglehold on the open web, and for a critical period, the web community’s focus on the separation of structure, presentation, and behaviour let different teams innovate on each until the web platform turned into what it is today.
In fact while React challenged that separation of concerns (which we now generally agree was actually a separation of technologies) one of the key things the React team did was work closely with the browser vendors, and participate in TC39, to align the framework and the platform… while also being laser-focused on how to actually improve the products being shipped at Meta.
And that, I think is one of many things that Web3 can learn from Web2.
When I started as the CTO of Infinex I figured the challenge would be catching up with everything he’d learned during six years of building in crypto.
The team I brought in from Thinkmill (including myself) came in with a mandate to suspend disbelief; not trying to challenge the crypto aspects of the project but instead focus on the web elements. We learned to trust the chain, and we leaned into being non-custodial.
This approach allowed us to design and ship one of the most compelling user experiences in crypto. We have over fifty Infinex contributors who’ve gone deep into chain abstraction, security design, onboarding, platform development, game design, yield farming, and we minted an NFT collection.
Speaking of, we sold $67 million worth of Patron NFTs to an incredible community of early supporters who are aligned with our vision, including VCs like Founders Fund and actual founders like Vitalik and Toly. While that’s a great outcome, one of the things I’m most proud of in the Patron sale was how great the chain abstraction was.
You were able to log into Infinex with your passkey, use a Patron Pass you farmed while playing Craterun on Base, buy an NFT on Ethereum using SOL (without thinking about bridging), and then see each transaction on Etherscan and Solscan. I’m pretty sure most people missed how cool that was because it Just Worked.
We built a rich, stateful application powered by crypto infrastructure. We built novel smart wallets for both EVM and Solana chains. We've shown that our platform can support many types of campaigns, and we can roll them out quickly. Whether it's a novel take on yield farming, an NFT platform or a fantasy trading game, we have delivered an onchain experience that is unrivalled today.
But.
Friends. We need to talk.
After a year of building in this space, I’m ready to start challenging some of the core beliefs in crypto today. I’ve long believed in the principle “seek first to understand”, which has been my guiding light over the last year. But the more time I spend onchain, the more broken I believe the current approach to building crypto applications is.
Web3 is a lie. So much is fundamentally holding back onchain adoption, and I think we need a new way of looking at the problem.
The Web3 label itself has always felt misplaced to me. It’s like… I was there when Web 2.0 became a thing. It was Flickr. It was fluro gradients. It was Ajax and animations. The unlocks were finding CSS hacks, leaning into The Good Parts of JavaScript, and working out how to make JSON requests to servers so we could update UI without a full page server refresh.
The thing is, Web 2.0 was all about UX. It was about making things more intuitive, faster, easier, and more fun.
If we’re going to evolve past that, shouldn’t we… not take steps backwards?
I have gained a deep appreciation for the values Web3 is built on. Decentralisation, self-custody, open platforms, censorship resistance, and the idea that together we can build something bigger and better than any individual or centralised organisation. The open source ethos at the heart of crypto is deeply familiar to me, and I’m here for it, I'm all in.
We can’t jettison the lessons of the past in the process, though (or the lessons still being learned in what crypto calls “Web2”, even though we’re way past that)
A super early thing the web learned was, “Don’t make me think”. Bad news: crypto is basically designed not just to make people think but also to make people worry. It’s actively hostile to users, which is why I think everyone talking about bringing the next billion users onchain is lying to themselves. We need to relearn how to make life easier for users.
I don’t think we can solve this fundamental issue with the current paradigm because we have defined a separation of concerns:
Functionality (onchain protocol)
User Interface (Dapp)
Action Execution (signing transactions)
Each of these is not just built independently, they’re separated on the grounds that you should be able to swap any one part out for any other. Any wallet works with any Dapp (and may also actually just bridge transactions to a hardware wallet). Anyone can build or host their own front-end for any protocol.
Whether or not the reasons for this separation are valid (in the sense of whether they’re actually achieving the intended outcome), the result is that crypto UX is mostly frozen in its current form. Wallets can’t innovate on the signing experience because they must work with any Dapp. From what I can tell, many protocols are shipped before anyone even works out what the UI will look like. So how can someone building a Dapp move the needle?
The outcome… isn’t great.
As much as the Ledger Stax is a beautiful piece of hardware with a big secure screen, all it can do is put the fear of God in you when you vote on snapshot because all it can tell you is… you’re signing bytes. It feels bad and scary.
When you “sign in with Web3” to register for an airdrop, you use your ultimate singing authority (!!) to create a session. This is insane. There’s no elevation, and you can’t be sure you’re not about to get your wallet drained.
Don’t get me started on bridging… Just trust me bro, this random set of bytes will be fine. Sign it and send your money into the void, and hope it pops out on the other side. It doesn’t matter how good transaction simulation gets. The only onchain outcome you can confirm is that your money’s going… somewhere. Good luck?
Worst of all, this separation creates myriad opportunities for people to lose their money. Domains get hijacked. People follow phishing links on X after social engineering attacks and fake projects look like the real thing. Supply chain attacks on dependencies can change the UI so what the user thinks they’re doing is, in fact, not what’s going to happen. Hell, another browser extension may be silently rewriting the transaction before you sign it, even if what the UI of the website shows you is actually what they’re asking you to sign.
We’re fucked.
I’ve come to believe this separation is at the core of the issue. Product teams can’t actually reason about these problems, let alone design or develop better solutions for them, because they can only solve part of the puzzle.
I also believe the status quo is not a genuine separation of concerns; it’s a separation of technologies. And we’ve seen this movie before on the web. Once upon a time, the idea was that you should be able to mix any CSS with any HTML and it should work. Apps should work with JavaScript disabled. That got us to good foundations, but not good UX.
The separation is good at the start, because it helps draw lines. But that just helps us find the next set of problems to solve, and we need to start drawing outside those lines to move forward again.
These days we bundle our CSS and our HTML with our JavaScript and call them “components” and things got a lot better. Also, the Web Platform got good. We’ve got OAuth, WebAuthn, serverless infra, and a whole lot of other things that weren’t around when you all disappeared into crypto land.
So the challenge at Infinex, and I really believe for crypto more broadly, is to zoom out; embrace the core philosophies and strengths of crypto; lean into the learnings and foundations of the modern web; and combine them to actually deliver on the foundational promise of crypto for most people.
I said no product team in crypto can reason about better UX… but I lied. At Infinex, our idea has been to fix this from day one. We have a cross-functional team who can reason about the user experience from end-to-end, and we’re combining the best of the modern web with the principles of DeFi. We can do this by owning the UI, having robust backend services, performing signing, and managing transaction execution all within our platform.
We’re killing the separation of concerns, and putting the User Experience first.
And, importantly, we are finding ways to do this without breaking the principles we started with: we are non-custodial, users can recover funds if they have a custody failure, and everything we do is transparent and onchain. These are our new lines.
Building Infinex as a vertically integrated platform gives us the ability to fundamentally rethink crypto UX around these principles. We’ve pulled together tools and patterns from the modern web like databases, workers and durable objects to manage persistent state and asynchronous task execution. We’re using passkeys to facilitate user self-custody and Turnkey to translate them into onchain signatures. We’ve developed our smart contract (“program” if you’re a Solana Maxi) architecture to use the chain for what its best at: trust, transparency, and resilience. We’re using Gelato to abstract gas on EVM, and when you open a pack of cards in Bullrun we’re using Pyth entropy on Blast to randomise the result without compromising the transparency or integrity.
Looking forward, we have some changes coming, thanks to lessons we’ve learned in the first year.
It’s been an adventure working out where functionality should live when you’ve effectively got many different backends, all with different characteristics (the platform, a couple of L1s and several more L2s). I’ve spent a lot of time in my career solving multiple-source-of-truth problems but this really takes it to a new level.
We’ve leaned a lot on “trust the chain” by implementing all the core functionality in our smart contracts, but we’ve ended up with our hands a bit tied when it comes to adding integrations quickly.
I think that was the right approach for launch, when we ran a campaign to build TVL, and “don’t lose the money” was the daily mantra. Knowing we can trust the simplicity and clarity of our onchain account (it literally had no withdrawal functionality for the first month) let us worry less and learn more.
But we’ve found a lot of things that are hard (or impossible) to do with just smart contracts, especially when people can’t “connect wallet” their Infinex Account to other Dapps to, say, claim their ENA airdrop on Liquifi. This is especially true when your smart contracts refuse to execute arbitrary transactions but trust me, this is a feature not a bug.
So we’re now exploring a hybrid approach that combines platform-originated transactions with EOAs, passkeys, and the onchain smart account we’ve already developed. No, you still won’t “connect wallet”, we have an idea for this that I’m very excited to launch early next year.
We also know a lot more about how passkeys have worked out at scale. Here’s a fun fact: we haven’t seen a single instance of a user losing custody of their passkey; but every week we see too many users lose control of their recovery keys. (People also lose their passkeys outright, which is a different problem we’ve solved with our funds recovery design, just please don’t lose control of your recovery address AND lose your passkey at the same time)
These insights from real-world users have helped us design the next iteration of account security, which we’re working on rolling out now; you’ll be able to manage multiple passkeys across multiple devices, and you’ll be prompted to set up 2FA to do so. We’re combining tried-and-tested techniques like ensuring we can send notification emails (like online banking, really… this isn’t revolutionary) with TOTP and passkey signatures to safely open up features like sending, swapping, and more without compromising security or self-custody.
And we’re working with NEAR to implement cross-chain signatures, which is the behind-the-scenes magic that we’ll use to let you custody actual Bitcoin in your Infinex account. It’s ironic most people do decentralised finance by wrapping it in a centralised service. We can’t bring them onchain without solving the actual use-case. Wrapped tokens have their place, but if you can only custody Bitcoin by holding WBTC (or cbBTC etc) in your Infinex account, then… let’s just say that’s one of the reasons you can’t deposit WBTC into Infinex today.
When you see Bitcoin in your Infinex account, it’ll be real Bitcoin. And it will have the same trusted Infinex Account functionality that we’ve got on Solana and the EVM chains (no seed phrases, onchain funds recovery, transparency of custody and security).
The other thing that’s been bugging me is that even when we bring all the functionality of Binance onchain, we’re not done. Yes, I managed to write 2,000+ words about Infinex without saying “Onchain Binanace” until now. Kain’s founding thesis for Infinex was that “We built all the functionality in DeFi but the users didn’t come, they’re still on centralised exchanges. If we want this to work, we have to solve the UX”. And that’s what we’re going to do.
But one of the great things about DeFi is how much constant innovation there is, how many different teams are trying different things, and nobody is quite sure what’s going to stick but everyone is enthusiastically working it out. It reminds me of the early web energy. Building a walled garden will always lag behind this innovation.
We’re building the UX layer for DeFi with Infinex, and our goal is to bring everyone else along with us. We need a monolithic platform to compete with centralised exchanges, but we can’t lose the long tail of innovation. So we’re going beyond the original concept of Infinex and building something that solves these problems for the rest of DeFi.
But I’ll talk more about that in the future.
If you’re reading this, we’re early. It’s good to be here.