The problem Flow Chat solves
Overview
The inspirations for Flow Chat were popular applications like Venmo, CashApp and WeChat. These applications have revolutionized the concept of payments with a social network. Flow Chat allows you to message wallets, FLOWN domains, transfer Flow, transfer USDC, and transfer NFTs all within the social experience.
What I built
I built an iOS native mobile app using the FCL Swift SDK and SwiftUI from the ground up. We integrated with FlowNS, USDC, and Dapper Sport studios to provide various functionalities in the app.
User Flow
As a new user, the user flow looks like this:
- You connect wallet to the app
- You can start a chat with any FlowNS domain or Flow wallet address
- You can start sending messages back and forth
- You can also transfer Flow to the person you're chatting with
- If you and the recipient have a USDC vault set up, you can also transfer USDC to the person you're chatting with
- You can also transfer Dapper Sports NFTs.
Future Goals
- Build a group chat and communities feature to meet new people in the app
- Add support for more types of NFTs
- Decentralize the message datastore
Challenges I ran into
Challenges
This was my first time building for native iOS using Swift. I was hoping to do React Native but FCL doesn't have a React Native SDK at the time of writing. Learning Swift and iOS was a major task. Learning Flow and Cadence was also a challenge. I referenced the Monster Maker sample project and the LearnWeb3 flow course to assist, but it wasn't a lot of time to get super well versed.
Limitations
Certain functionalities in the app are limited, which I would have loved to extend if I had more time.
- We wanted to integrate with all Dapper Sports projects, but were only able to integrate with NBA TopShot. After a long thread in the Flow Discord, someone from the Flowty team hooked me up with an official testnet TopShot moment but did not have any of the other projects' NFTs available. However, they should all be similar to integrate.
- Messages are currently stored on Firebase in a centralized database. In the future, I'd like to expand this to something like Arweave, IPFS, or Ceramic Network to have a decentralized data store for messages.
- Since it was my first time building using Swift, certain functionalities are definitely a bit hacky, but I have been able to learn a lot of SwiftUI over the last week or so, and can work on making it better.
- There are some UI issues that I haven't been able to resolve - messages sometime don't properly align to left/right directions properly and it's probably a mistake with some conditional statements somewhere.