Our client’s request
When he first contacted SteelKiwi, Qravity founder David Brandstaetter asked us to develop an online collaboration platform for creating music, games, animated movies, and other digital entertainment products. Eventually, his idea blossomed into a platform not only for creation and collaboration in digital entertainment but also for monetization and distribution.
While adding new features to Qravity, David came up with the idea to base the platform on the Ethereum blockchain. To secure funding for this suddenly much grander project, the Qravity team decided to hold an initial coin offering (ICO). As David was satisfied with our ongoing work on the original Qravity platform, he tasked SteelKiwi with designing and developing a page for the Qravity ICO.
Since the invention of blockchains and Bitcoin, the world has been in a craze for cryptocurrencies and decentralized systems. ICOs in particular have been quite popular lately, helping startups and established companies secure investments for new and ongoing projects. They’ve been so popular, in fact, that in the first half of 2018 ICOs around the world collectively raised almost $8.37 billion.
ICOs tend to raise 3.5 times more money than typical venture capital rounds, which is why so many companies have been choosing them as the primary means of funding lately despite having to embrace a variety of accompanying risks.
The Qravity ICO page helps to raise funds and serves as a landing page for the main platform. We achieved two goals with the UX/UI design for this page:
1. offer a user-friendly process for purchasing QCO, the platform’s cryptocurrency;
2. present valuable information about the Qravity platform in a clean and concise manner.
Like the platform itself, the Qravity ICO page is space themed, which aligns with the overall idea of continuous creation. We divided the Qravity ICO page into several main blocks. The first and arguably most important block is dedicated to purchasing QCO. It points to a sign-up page where users can enter their personal information and transfer Ether to their Qravity wallet. The other sections are purely informational, displaying benefits and features of the Qravity platform, testimonials and ratings from media outlets, a roadmap of the project, and bios of the entire Qravity team, including our SteelKiwi developers.
We developed the backend for the Qravity ICO page with Python, Django, and a PostgreSQL database, the combination of which offers a great scalable solution for all kinds of web projects. We also integrated Celery, an asynchronous task queue, in combination with Redis, a solution for distributed key-value storage. We used Django CMS, which is a comfortable content management system, to allow Qravity’s content managers to add and update information on the page. To implement a RESTful API, we used the Django REST framework.
To implement our part of the online wallet functionality, we used Web3.py. In particular, Web3.py is used to call smart contract methods from the blockchain to check the status of QCO bonuses available at the QCO sale stage and to figure out whether a particular user is eligible for the Qravity ICO whitelist.
We used AIOHTTP to implement a parallel microservice with several WebSockets that listens for updates from the blockchain about successful whitelisting as well as with smart contracts for successfully sending purchased QCO to users’ wallets. Depending on the update, the microservice changes the user’s status, which, among other things, helps them proceed with the registration process.
Ethereum node synchronization. Nodes run Ethereum software and serve as peers on the blockchain network. Until a node downloads the entire blockchain from other users and examines all registered transactions — which is what synchronization is — it’s not going to work properly. To solve this problem, we tried two different third-party applications. First we went with Gerth, a command-line interface for running Ethereum nodes, but it didn’t work for our case no matter how hard we tried. So we decided to use Parity, another Ethereum client. Parity worked perfectly and helped us properly synchronize nodes.
System resources. Ethereum nodes require a lot of computing power to work properly. To understand how many system resources the Qravity ICO page needed, we performed manual calibration. In other words, we launched a virtual machine on the server, checked whether it offered sufficient resources, stopped the machine if it didn’t, then reconfigured the instance and launched it again. We repeated these steps several times to make sure that the virtual machine offered enough computing power for development and maintenance of the Qravity ICO.
Distributed denial of service (DDoS) attacks. DDoS attacks are surprisingly common and can be quite devastating. Their goal is to break an application by flooding it with a huge number of fake requests. One way to deal with these requests is to monitor traffic and filter out requests from bots, but this approach is difficult to implement and might not be the most affordable option for products in the MVP stage. When we first encountered a DDoS attack on the Qravity ICO page, we decided to change the entire project architecture hosted by AWS, then implemented a semi-manual protection system. Basically, whenever we notice a DDoS attack attempt, we tighten the rules around accepting requests, prohibiting the fake requests from being accepted and stopping the attack before it has a chance to be carried out.
By registering on the Qravity ICO page, users unlock the ability to purchase QCO. The registration process is rather complex and includes not only filling out personal information but also whitelisting browser wallets, which is required to make sure that the user purchasing QCO has a clean record and isn’t going to harm the platform.
The Qravity ICO page is also a landing page to educate users on the benefits and features of the Qravity platform. To make sure that information is not only accessible but is also presented in an entertaining and non-obtrusive way, we implemented a variety of sliders and animations with CSS and Slick.js.
For a developing project, it’s vital to keep users up to date on changes. Otherwise, people might think that the project has been cancelled or that it’s stagnating, or they might simply forget about it. In order to help the Qravity team be on the same page as their users, we implemented a newsletter sign-up feature.
The company has launched the product's landing page with great success. SteelKiwi delivers tasks on time, devises clever solutions to complex issues, and makes contact throughout the project to keep everyone updated. They have pared down their communication strategy to streamline the process.