History of the new AQUA wallet https://x.com/i/article/2108585794206056448
AQUA Neo
A year ago, at this very table, I started playing with the idea of totally rebuilding our flagship product, AQUA wallet. It was written in Flutter, pre-AI, completely by hand, and despite all the effort it still wasn’t perfect. Small issues here and there, some architectural pitfalls. Our developers were doing their best, often working through weekends to make AQUA the best wallet out there. But it was not enough.
In fact, my first decision as CTO, when I came to JAN3, was to scale the dev team. So we hired new developers and managers. It was all going well, except for one thing: AI started to perform better than junior devs, at least. After a couple of months I was sure we needed to radically change how we develop, toward AI-based development. Obviously it wasn’t accepted well by the team. Vibecoding produces bad code, etc. I heard a lot of that. Didn’t stop me. The transformation had already begun, and we had to part ways with the devs who didn’t accept the idea of using AI coding agents as a development aid.
That was the moment I jumped into coding myself and started testing Cursor on small issues in the project. It wasn’t doing that great. I don’t remember exactly which GPT model I used, and Dart didn’t help either. The model just wasn’t that fluent in it.
By that point I was already considering reimplementing everything in React Native. I’ve been a React developer since React was released, and all my projects used React and Node.js. One morning, in a countryside house, I decided to just create an empty React Native app. Not using Expo was deliberate. Not only the potential issues with the third-party libraries we need (GDK, BDK, LWK, etc), but the fact that AI would eventually be able to write the harness we need without another super-bloated framework on top.
First task I gave Claude Code (I switched from Cursor and never regretted it) was to bind GDK to the RN app, init a wallet from a seed phrase, and show the balance. After half an hour of a divining session with CC, where I was reviewing and editing every single line it added, I had a somewhat working app that actually showed a wallet balance.
I felt great. So much excitement at that moment, because manually binding GDK’s binaries to React Native, and making it work on both iOS and Android, is a complicated and very boring task. Claude Code handled it nicely. With my fixes, of course, but still.
I think that was the moment I realized it was possible to rewrite the entire wallet with AI.
Next task I gave Claude Code was to port the Aqua UI component library from Flutter to React Native. We spent a year building that library so every screen in every app would use the same components, in a unified way. It mapped really well onto React, and the AI was doing a great job. Finally I saw some UI on the Android phone I use for development.
After that I started seriously thinking about how to design the new app properly. I remember walking through the woods nearby every day, not writing a single line of code, just working out the design, laying the foundation. Almost nobody at the company knew I was doing it, except two people, so I didn’t really have anyone to discuss it with. And it wouldn’t have been that useful anyway.
In a week I settled on the most fundamental design choices and manually created the skeleton of the app. Then I started ClaudeCoding like crazy. Sitting until late at night, then sleeping with only one thought: continue in the morning. It was ridiculously exciting. Main screen, then send flow, receive flow, settings. All of it working lightning fast, liquid smooth, and the whole feeling of the app was that it’s very lightweight.
Then I made an inventory of everything still left to implement and realized I needed someone to help me. Tough choice. So when I went to Plan B in Lugano, I had a private conversation with one of our devs, Valeria, who I could trust on this, and offered her to switch completely to the then-experimental project, codenamed AQUA Neo. I explained all the risks, particularly if it failed. She agreed, and I was very happy.
She quickly picked up small screens, small tasks, checking with me on any change to the architecture, and I was reviewing all her commits, every single line.
As time went by, I realized Valeria was doing more commits than me. Some weeks later I found that I was asking her to review my code and approve changes to the architecture I had originally designed. By then I felt I had made a good choice.
Fast-forward to now. Aqua Neo is ready for a release. It took a year. I think we could have done it quicker, but there was no reason to rush. We kept maintaining the old Flutter version, and Boltz and Liquid issues also contributed to the delay.
Valeria is the lead dev of the new AQUA wallet now, happily building it along with the rest of the team.
Quite an experience for me. Watching AQUA Neo get prepared for release is just fantastic. I’m typing this at the same pine wooden desk, experimenting with other new projects, and who knows what I’ll do next.
