LedgerX Mobile App
May 2018 - Jan 2019
React Native & Tornado
How It Was Built
The LedgerX mobile application was built using React Native, Redux, and Redux Observable. The functional Ramda library was heavily-used which made Immutable.js unnecessary in this project. Navigation was handled with React Navigation. The chat UI was built on top of Gifted ChatView. The chat functionality was implemented using both Sockets and Pusher ChatKit.
The app starts on the Login Screen (unless you're already logged in, in which case you go to the Main Screen). There is no option to sign up due to the mandatory verifications that needed to be done outside of the application. Once logged in, you're sent to an intermediary Multi Factor Authentication Screen where you have to enter the code from your Authenticator app. When you return to the app, it’ll automatically paste the code from your clipboard if it’s been copied, otherwise you can manually enter the code. Once the code is entered, it verifies the code and either sends you to the Main Screen or shows you an error message.
The Main Screen is separated into 3 tabs: Pit, Negotiations, Balances. The Pit Screen is a “virtualized pit.” It is similar to a global chat. Rather than entering text, you can enter a request for a certain type of contract. Once that request enters the Pit, anyone can tap it to go into a direct Negotiation with you. This brings us to the Negotations screen which is similar to 1 on 1 direct messages. Two parties can discuss and negotiate a deal. Once a deal has been settled on, the party offering the contract and start an Order. Once the order begins, the other party has exactly 5 minutes to Accept or Reject the Order before it expires. The result of that order (Accepted, Rejected, Expired) is kept as part of the message history. Lastly is the Balance Screen. This screen shows realtime balance information including available and locked balances in both USD and BTC.
An unexpected issue dealt with during development was lagging to the point of unusability. This was due to too many incoming messages from the open socket. The fix was to create a Redux Observable epic that would buffer and delay the messages.
An iOS and Android App in less than 4 months
The final product was an almost-identical iOS and Android App with a single codebase. It allowed for adding requests to the virtual Pit, 1-1 chats and trade negotiations, and checking available and locked balances.