Giter Club home page Giter Club logo

jvandenaardweg / coinaly Goto Github PK

View Code? Open in Web Editor NEW
30.0 7.0 14.0 6.11 MB

πŸš€ Fast and easy to use mobile trade interface for cryptocurrencies. Track your trades to the moon and beyond. Currently only for Bittrex.

Home Page: https://coinaly.io

License: Mozilla Public License 2.0

JavaScript 37.51% HTML 0.82% Vue 61.23% CSS 0.44%
bitcoin btc bittrex bittrex-api bittrex-exchange bittrexapi ethereum eth blockchain blockchain-technology

coinaly's Introduction

Hi there πŸ‘‹

My name is Jordy van den Aardweg, I am a freelance frontend developer based in Amsterdam and creator of Writekit - AI-Powered Writing Made Simple.

I have a passion for building beautiful and functional web applications, and skilled in using TypeScript, React, and Node.

In my free time, I enjoy working on open source projects and staying up to date with the latest developments in the tech industry.

Reach out to me on LinkedIn or visit Writekit.ai

coinaly's People

Contributors

adis-me avatar jvandenaardweg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

coinaly's Issues

Known issues

An overview of currently known issue's

Open:

  • Only BTC currency pairs are properly shown. ETH and USD pairs do not work correctly (yet)
  • You cannot place a buy order
  • You cannot place a sell order
  • Website may not work properly yet on Android browsers. Haven't tested this

All of the above is planned to be fixed

Fixed:

  • Calculating profits/loss percentage on orders takes a few seconds
  • Calculating USD on balance takes a few seconds
  • "Markets" page is empty
  • Open buy orders will show β€œInfinity%”

Convert USD to any fiat currency

Worth calculation is now done using the exchange it's BTC-USD market.

With the known USD worth we can also convert it to any other currency using the last known market data. There are NPM packages that handle this. Should try a good package.

Create seperate Heroku services

In order to use websockets (#8) we need to seperate processes on Heroku

1. web
the front-facing website (Node, VueJS)

2. api
server that returns exchange API data (Node, Express)

3. socket
server that returns exchange socket data (ticker information) (Node, Websocket)

Heroku does not support multiple "web" processes in 1 Procfile. So I came accross this:
https://github.com/heroku/heroku-buildpack-multi-procfile

This issue is to seperate those 3 processes by the use of that Heroku buildpack.

So we end up with:
https://coinaly.io (web)
https://api.coinaly.io (api)
https://socket.coinaly.io (socket)

Make USD pairs work properly

Currently we have hardcoded in some data processing using BTC-, but this should be dynamic.

I've marked these things with a TODO in the code.

Namechange to Coinaly and made repo public

The previous name "Simpletrade" was just a name to get the project started. Now we changed to "Coinaly".

It's really hard to find a suitable name for a project these days, but i think Coinaly fits this one.

The coin party is really obvious; this is a trade interface for cryptocurrencies (aka coins)
The aly part references to "analyzing" and "easy". Since trading is part analyzing. And the platform must be easy to use.

Also, saying "Coinaly" sounds pretty good. So, this is the name we are going to use :-)

Coinaly.io is already bought.

I'm currently in the process of changing all the references.

Alpha website will be: https://coinaly.io (can take 24hrs for it to be available)
Repo will be: https://github.com/jvandenaardweg/coinaly
Slack: coinaly.slack.com > direct invite link

The reason I made this repository public is to allow other dev's to join in on this.

Need a better project name and domain name

Simpletrade is just a name in order to get this project started. But I personally don't feel like this is a name that fits the overal thing we try to solve.

Ofcourse, the interface we create must be simple in it's use. But it's more an "on the go", "everywhere you are" trade and portfolio interface. Fast and easy to use.

We can use this thread to come up with better names :-)

A big requirement is that it cannot conflict with other Trademarks and business names

Some names I came up with:
EasyTrade
BitTrader
CryptoTrader
GoCrypto
CoinTrader
Crypty

^ havent checked the above yet on availability, but this should get the brainstorm started

Cancel a SELL order: nothing happens

Expected Behavior

When Cancelling a SELL order I except the the sell order is cancelled and the screen refreshes to show the outstanding (pending) sell orders.

Actual Behavior

I get a confirmation dialog but when I click on OK nothing happens (visually).

Steps to Reproduce the Problem (assuming you have pending SELL order)

  1. Go to Orders on coinaly.io
  2. Expand one of your sell orders and click on Cancel
  3. Notice that nothing is happening

Specifications

  • OS: macOS High Sierra 10.13.2
  • Browser: Google Chrome 63.0.3239.132

Console errors:

Only messages I see in the console are:

created homepage
created orderspage

On the network tab I see these 2 requests:

screen shot 2018-01-17 at 11 18 42

Note on the highlighted request there is no response body? Perhaps by design?

I you do not have time I will try to investigate this issue further or even fix it :-)

Use Websocket to update market ticker data

We need a websocket connection for this to off-load the exchange API.

Since a websocket requires it's own connection we need a seperate service running for this.

So we probably end up with 3 services:

  • web (NodeJS serving static frontend files (JS, assets etc...)
  • api (NodeJS rest API server)
  • websocket (NodeJS websocket server)

Currently web and API are one: http://simpletrade.herokuapp.com/

Make ETH pairs work properly

Currently we have hardcoded in some data processing using BTC-, but this should be dynamic.

I've marked these things with a TODO in the code.

Use Service Workers to add offline capabilities

  • Give the user a notification when the network is offline, so he cannot place a buy/sell order
  • Allow browsing all pages when the network is offline but we already have initial data (i think we already do this, but need to check if it all goes well)

Buy/Implement SSL certificate

Of course we need SSL for our domain after #2 has resolved. After installing SSL we need to get the highest available score. I often use https://www.ssllabs.com/ssltest/ for this purpose.

I'm not sure if the Google Lighthouse will extensively test our SSL config, if so this issue will be resolved in #21

Add ability to only show buy orders you have coins for in your balance

The homepage of the app gives you information on how much profit you are making with your trades.

But, it also shows orders from coins you already sold. It could be that you don't want to see those orders because they are not relevant to you anymore.

We can filter out orders from coins you don't have in your balance anymore.

Add coin icons on the balances page

Proposal:
Place currency icons 😍 in front of the currency shortcode

Url:
/#/balances

WDYT?

If you agree what would be the best approach? Gather all icons as static files? svgs or pngs?

Show a notice when Bitcoin is having a run

Lately (i’m not that long in the crypto trade world) i notice when BTC/USD rises with more than 5-10%, 99% of the altcoins seem to suffer and instantly go down.

I think its useful to show a site wide notice when bitcoin is running up, so you kinda know why your altcoins are performing bad

Would love to know if others might find this useful

Project goes private

Hi! :-)

I've got a little announcement to make.

As you noticed, there's not a lot of things happening here anymore, which is too bad. I'm currently working hard on a freelance project at a client's office. Which is thΓ© reason I don't have time for this project at the moment and also keep my girlfriend happy during the evenings and weekends.

So, when my freelance project ends, I've decided to work on this project fulltime (on workdays) for at least the next 3 months in a private repository. That's a huge commitment of time, resources and energy. The reason for this is I want to try to scale and monetize it, I don't think open sourcing the whole project is the way to do that.

The first version of Coinaly was a good test to see what needs to be done to scale this project. The current setup only allows a few users concurrently. That's just not working when the project grows bigger. Scaling this project is a costly setup since it involves a cluster of servers, to serve request to exchange API's and still respect their rate limitations. All of this is not free. Hence the monetization part.

Request invite
I've updated the website so you can get an invite when the project is ready for it's first release: https://coinaly.io. You'll be the first to know.

Also, feel free to join the Telegram channel as I try to give an update once in a while: https://t.me/coinaly

If you are in or around Amsterdam, come say hi at WeWork Metropool, since i'll be renting a desk there to work on this project.

Thanks @adis-me for your help, really appreciate it!

I'll remove this Github repo from the public in the next coming weeks.

Ability to sell all coins in balance

I think it might be handy to have a feature to sell all (or a portion) of your coins all at once. For example, when the market is crashing down and you want to secure profits before it's too late.

Below is a use case how I think it should work:

Use case:

  1. User panics and wants to sell his coins to secure already made profits quickly
  2. User clicks [Sell all coins] on the balance page
  3. System opens a "sell coins" page
  4. User has the ability to set a price per coin (or an easy quick option to sell all below/above current market price)
  5. User clicks [Place orders]
  6. System will cancel all open orders for that user
  7. System will place a new sell order for each coin
  8. User can track the progress of those orders on the /orders page
  9. User is happy when orders fill

Would love to get some input on this :)

Encrypt API key and secret using JWT

API key and secret are now stored in your browser as a cookie. So the security lies at the user side. But I think we can do better.

I think JSON Web Tokens is a perfect example to securely store the api key and secret and transfer it over the web

https://jwt.io/

How i think it should work:

  1. User fills in API key and secret on the setup page
  2. API key and secret are send to the server (https)
  3. On the server, we create a web token and sign it with a secret
  4. We return the web token to the user
  5. We store the web token in the user's browser
  6. We can use that web token to connect to the API's through our server

That web token can be used to connect with the exchange API's through our server, since only our server can decrypt the signed web token. The secret used to sign the web token is a server environment variable, so not included in the git repo.

Pro's:

  • no plain text API key and secret in the user's browser
  • API key and secret is transfered only once (securely, https) over the internet
  • safe, API keys and secrets are not stored anywhere in plain text

Con's:

  • maybe decrypting it with every API call is a performance problem? Need to research this

Note: the exchange API's need the decrypted API key and secret. See https://github.com/ccxt/ccxt/wiki/Manual#exchange-structure

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.