JSFiddle - React, Tailwind, and code Playground

by majesticcX

HTML

<main>
            <div id="curprice">
            <!-- USD -->
            <div class="btcspal">
                <p class="curtext">USD</p>
                <p id="btcusd"></p>
            </div>
            <!-- EUR -->
            <div class="btcspal">
                <p class="curtext">EUR</p>
                <p id="btceur"></p>
            </div>
            <!-- GBP -->
            <div class="btcspal">
                <p class="curtext">GBP</p>
                <p id="btcgbp"></p>
            </div>
            <!-- CNY -->
            <div class="btcspal">
                <p class="curtext">CNY</p>
                <p id="btccny"></p>
            </div>
            <!-- RUB -->
            <div class="btcspal">
                <p class="curtext">RUB</p>
                <p id="btcrub"></p> 
            </div>
        </div>
        
        <h2>Calculator</h2>
            <form id="meateccalculator">
		      <label for="hashrate">Hashrate</label>
                <input type="number" min="0" id="hashcalc" value="0" step="1"> Th/s
		      <label for="powerconsumption">Power Consumption</label>
                <input type="number" min="0" id="powercalc" value="0" step="0.01"> kW
		      <label for="powercosts">Power Costs</label>
                <input type="number" min="0" id="powercostcalc" value="0.058"> USD/kW/h
              <label for="powercosts">Fee</label>
                <input type="number" min="0" id="feecalc" value="15"> %    
		      <label for="fee">Exchange</label>
                <input type="number" min="0" id="exchangecalc" value="0"> $
              <label class="labeldiff">Difficulty:<p id="difficulty"></p></label>
              <label class="labeldiff">Block Reward:<p id="blockreward"></p></label>
              <label class="labeldiff">Current Block:<p id="currentblock"></p></label>

              <div id="revenuecontainer">
                <div class="day">
                    <h2>per Day</h2><br>
                    <p><span>...

CSS

@charset "UTF-8";

* {
    margin:0;
    padding:0;

}

header {
    width: 100vw;
    height: 6vw;
    background: yellow;
}

main {
    width: 100vw;
    height: auto;
}

main h2 {
    text-align: center;
}

#curprice {
    padding: 1vw 0vw;
    display: flex;
    justify-content: space-around;
}

.labeldiff {
    width: 20vw;
    display: flex;
}

#difficulty {
    font-weight: 100;
    margin-left: 8.2vw;
}

#blockreward {
    font-weight: 100;
    margin-left: 6.7vw;
}

#currentblock {
    font-weight: 100;
    margin-left: 6.7vw;
}

.curtext {
    width: 6vw;
    text-align: center;
    color: #11abba;
    font-size: 2vw;
}

#btcusd, #btceur, #btcgbp, #btccny, #btcrub {
    width: 6vw;
    text-align: center;
    font-size: 1vw;
    color: #11abba;
}

#btcusd::after {
    content: " $";
}

#btceur::after {
    content: " €";
}

#btcgbp::after {
    content: " £";
}

#btccny::after {
    content: " ¥";
}

#btcrub::after {
    content: " ₽";
}

#meateccalculator {
    margin: 2vw auto;
    padding: 1vw;
	width: 100vw;
}

input[type=number] {
    width: 7vw;
	text-align: right;
    border: none;
}

form label {
    display: inline-block;
    margin-left:38vw;
    width: 8vw;
    padding-bottom: 0.5vw;
}

#revenuecontainer {
    display: flex;
    justify-content: space-around;
    margin-top: 4vw;
}

span {
    display: inline-block;
    width: 8vw;
}

.day, .month, .year {
    width: 23vw;
}

form output {
	display: inline-block;
	width: 10vw;
}

form p {
	font-weight: bold;
}

output {
	width: 8em;
	text-align: right;
}

JavaScript

apiCall = async () => {
  let res = await fetch('https://blockchain.info/ticker');
  let data = await res.json();
  document.getElementById("exchangecalc").value = data.USD['15m'];
  document.getElementById("btcusd").innerText = data.USD['15m'];
  document.getElementById("btceur").innerText = data.EUR['15m'];
  document.getElementById("btcgbp").innerText = data.GBP['15m'];
  // usw.
};

setInterval(apiCall, 1000);

/** DIFFICULTY CALL **/
apiCall = async () => {   
  let res = await fetch('https://blockchain.info/q/getdifficulty');
  let data = await res.json();
 
  document.getElementById("difficulty").innerText = data;
};

setInterval(apiCall, 1000);

/** REWARD CALL **/
apiCall = async () => {   
  let res = await fetch('https://blockchain.info/q/bcperblock');
  let data = await res.json();
 
  document.getElementById("blockreward").innerText = data;
};

setInterval(apiCall, 1000);

/** CURRENT BLOCK CALL **/
apiCall = async () => {   
  let res = await fetch('https://blockchain.info/q/getblockcount');
  let data = await res.json();
 
  document.getElementById("currentblock").innerText = data;
};

setInterval(apiCall, 1000);


document.getElementById("meateccalculator").addEventListener("input", revenue );

    function revenue() {
        var hash    = document.getElementById("hashcalc"),
            diff    = document.getElementById("difficulty"),
            reward  = document.getElementById("blockreward");
        var dayrevenue = (hash.valueAsNumber * 86400 * reward.valueAsNumber)/(4294967296 * diff.valueAsNumber);
        
        dayrevenue = dayrevenue.toFixed(2);
        document.getElementById("revday").value = dayrevenue;
        
    }

document.getElementById("meateccalculator").addEventListener("input", energy );
	

    function energy() {
        var pcons  = document.getElementById("powercalc"),
            pcost  = document.getElementById("powercostcalc");
        var dayenergy  = pcons.valueAsNumber * pcost.valueAsNumber * 24;
        var...