EasyCrypto

— a simplified, fully-functional crypto brokerage website

A portfolio project that actually works

I built a simplified cryptocurrency brokerage website that is fully functional from account creation all the way to buying and selling crypto.

Technology used for this project: Vue.js & Vuetify (UI framework), Vuex (state management), Vue Router (router for Vue), Node.js & Express, Amazon Cognito & Amplify, SendGrid, Firebase Database, Netlify, Heroku

Structuring for optimum user experience

Routes

Individual routes were set up for each view/ page that a user may need to access again, some of which include the login, signup, buying, selling, order page (with unique ID).

Components

Page Layout components wrap each page to keep layouts consistent. Order and Order form layouts wrap each state of the order (e.g. 'unpaid', 'paid', 'pending', 'invalid') to keep order and order form layouts consistent.

Order flow built to protect against exploits

Live prices

Live prices are consumed by BTC Market's API and updated every 10 seconds. This means that the price on the order form is only an estimate.

Locked in price

Once a user submits their order form, the final price will be calculated on the next page. Here, the final price is locked in for 60 seconds or if prices fluctuate more than 2%.

Confirmed order

Once a user confirms the transaction, they will be taken to the order page where they have 5 minutes to make a payment. If they fail to confirm the transaction, they will be taken back to the order form which will be pre-filled with the previous order for their convenience.

Complete authentication flow with Amazon Cognito

Application includes complete authentication flows for logging in, creating an account, resetting password, changing password as well as setting up 2 Factor Authentication (TOTP) .

2 Factor Authentication is set up with Timed One Time Password (TOTP) which includes an option to scan a QR code or entering the setup key manually. Once 2FA is set up, a user will be prompted for a 6-digit verification code on top of their usual login details.

Features built with the user in mind

Full featured address book

When a user creates an order, they have an option to save the address to their address book (e.g. crypto wallet address, bank account or BPAY bill details). The address book includes all common features for the user's convenience: creating, updating, deleting as well as filtering addresses.

Convenient order history exports

Order history on user's dashboard includes the status of the orders as well as a link to the details of the order (or link to receipt if paid). The user can export the order history to keep for their personal records.

A validation system that proves least invasive for users

I built a simple validation system that was designed for forms to be least invasive. It includes the following features:
  • Error messages are only shown on blur (when user enters and leaves input field)
  • Fade in and out animation transitions are used to make the form smooth when multiple error messages are shown
  • Only one error message is shown at a time for input fields with multilpe rules
Implementation details
  • All validation rules and methods are centralised in one place such that other components can import them when required
  • When used inside a component, a metadata structure is imlpemented in such a way so that all methods will be the same
  • Metadata structure is flexible enough to deal with any type of nested data
  • Error messages can be default or custom override

Future plans

Plans to continuously improve this project include:
  • Implement more rules to protect against exploits
    (e.g. users who have 10 cancelled orders within 24 hours will have their account blocked from creating new orders)
  • Consume prices with realtime API (socket.io)
  • Include ID verification simulation
  • Implement a 2nd cryptocurrency