Crypto Vault โ€” Invest Smarter in Digital Assets
Platform live โ€” 180+ countries supported

Invest in Digital
Assets with Confidence

Institutional-grade security, real-time analytics, and a portfolio built around your goals โ€” all in one regulated platform.

๐Ÿง‘๐Ÿ‘ฉ๐Ÿง‘โ€๐Ÿ’ผ๐Ÿ‘จโ€๐Ÿ’ป

Trusted by 2.4M+ investors
across 180 countries

๐Ÿ“ˆ
Portfolio Today
+$1,284.50
Total Portfolio Value
$48,392.10
โ–ฒ +8.4%
โ‚ฟ
Bitcoin
BTC ยท 0.42
$26,820
โ–ฒ +5.2%
ฮž
Ethereum
ETH ยท 3.8
$1,640
โ–ฒ +3.1%
โ—Ž
Solana
SOL ยท 58
$24.80
โ–ผ โˆ’1.4%
๐Ÿ”’
Security Status
256-bit Encrypted
BTC$26,820+5.2%
ETH$1,640+3.1%
SOL$24.80โˆ’1.4%
BNB$218.30+2.7%
XRP$0.512โˆ’0.9%
ADA$0.286+1.2%
MATIC$0.731+4.8%
AVAX$9.44โˆ’2.1%
DOT$4.12+0.8%
BTC$26,820+5.2%
ETH$1,640+3.1%
SOL$24.80โˆ’1.4%
BNB$218.30+2.7%
XRP$0.512โˆ’0.9%
ADA$0.286+1.2%
MATIC$0.731+4.8%
AVAX$9.44โˆ’2.1%
DOT$4.12+0.8%

Everything you need to invest
smarter, not harder

From first purchase to advanced portfolio strategies โ€” Crypto Vault has the tools serious investors rely on.

๐Ÿ“Š

Real-Time Analytics

Live market data, customizable dashboards, and deep-dive charts to track every movement in your portfolio as it happens.

๐Ÿค–

Automated Strategies

Set recurring buys, price alerts, and rule-based automation. Let your strategy run even when you're offline.

๐Ÿฆ

Institutional Custody

Your assets are held in segregated cold storage with multi-signature wallets, never commingled with company funds.

๐ŸŒ

Global Fiat On-Ramps

Deposit in 35+ currencies via bank transfer, card, or local payment rails. Convert and invest in seconds.

๐Ÿ“ฑ

Native Mobile Apps

Full-featured iOS and Android apps with biometric login, push price alerts, and one-tap trading on the go.

๐Ÿงพ

Tax & Reporting

Automated gain/loss reports, capital events log, and one-click export for your accountant or tax software.

The numbers behind the trust

$4.8B+
Assets Under Management
2.4M+
Registered Investors
180+
Countries Supported
99.98%
Platform Uptime (2023)

Real people, real returns

โ˜…โ˜…โ˜…โ˜…โ˜…

"Switched from two other platforms last year. Crypto Vault's portfolio view is leaps ahead โ€” I can see everything in one place without having to juggle spreadsheets."

AK
Amara K.
Entrepreneur ยท Lagos
โ˜…โ˜…โ˜…โ˜…โ˜…

"The automated DCA feature alone saved me hours every month. I set my rules once, and the platform executes perfectly. Sleep-well investing, honestly."

MR
Marco R.
Software Engineer ยท Milan
โ˜…โ˜…โ˜…โ˜…โ˜…

"Their support team answered my compliance question in 12 minutes on a Saturday. That kind of responsiveness makes me confident they actually care about customers."

SL
Sandra L.
Financial Advisor ยท Singapore

Featured & verified by

Forbes
Bloomberg
CoinDesk
TechCrunch
FT
Wired

Regulated, audited,
and battle-tested

We hold licences in the EU, UK, and US, and undergo quarterly independent security audits. Your funds never touch our operating balance.

๐Ÿ”
AES-256 Encryption
Military-grade encryption at rest and in transit across all endpoints.
๐Ÿ›๏ธ
FCA & MiCA Licensed
Fully regulated under EU MiCA framework and UK FCA registration.
๐ŸงŠ
95% Cold Storage
Majority of assets held offline in geographically distributed vaults.
๐Ÿ›ก๏ธ
$250M Insurance
Custodial assets insured against theft, fraud, and operational failure.
๐Ÿ”’

Learn as you invest

Guides, market breakdowns, and strategy articles written for every experience level.

Browse All Articles โ†’
๐Ÿ›๏ธ
Regulation

MiCA Explained: What the EU's New Crypto Law Means for Your Portfolio

7 min read Feb 2024

๐Ÿ“
Strategy

Dollar-Cost Averaging vs. Lump-Sum: Which Strategy Wins in Volatile Markets?

9 min read Jan 2024

Your portfolio starts with
one decision.

Open a free account in under 3 minutes. No minimum deposit. No hidden fees.

Scroll to Top
* 6. Save & Activate * That's it โ€” prices update live on every page automatically. * ================================================================ */ (function () { 'use strict'; /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ CONFIG Change REFRESH_MS to update more/less frequently. CoinGecko free tier allows ~30 calls/min โ€” 60s is safe. โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ var REFRESH_MS = 60000; // 60 seconds var API_URL = 'https://api.coingecko.com/api/v3/simple/price' + '?ids=bitcoin,ethereum,tether,binancecoin,solana,ripple' + '&vs_currencies=usd' + '&include_24hr_change=true' + '&include_market_cap=true' + '&include_24hr_vol=true'; /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ COIN MAP Maps CoinGecko IDs โ†’ display config used across the site โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ var COINS = { bitcoin: { sym: 'BTC', decimals: 2, minDecimals: 0 }, ethereum: { sym: 'ETH', decimals: 2, minDecimals: 0 }, tether: { sym: 'USDT', decimals: 4, minDecimals: 2 }, binancecoin: { sym: 'BNB', decimals: 2, minDecimals: 0 }, solana: { sym: 'SOL', decimals: 2, minDecimals: 0 }, ripple: { sym: 'XRP', decimals: 4, minDecimals: 3 }, }; /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ CACHED PRICES Stored after each fetch so page elements added later (e.g. by Elementor) can be updated immediately on load. โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ var cachedData = {}; /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ FORMAT HELPERS โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ function fmtPrice(price, coin) { var c = COINS[coin]; if (!c) return '$' + price; // Show fewer decimals for large prices var dec = price >= 100 ? 2 : price >= 1 ? 3 : c.decimals; return '$' + price.toLocaleString('en-US', { minimumFractionDigits: c.minDecimals, maximumFractionDigits: dec }); } function fmtChange(change) { if (change === null || change === undefined) return { text: '0.00%', up: true }; var up = change >= 0; var text = (up ? 'โ–ฒ +' : 'โ–ผ ') + Math.abs(change).toFixed(2) + '%'; return { text: text, up: up }; } function fmtBigNum(n) { if (n >= 1e12) return '$' + (n / 1e12).toFixed(2) + 'T'; if (n >= 1e9) return '$' + (n / 1e9).toFixed(1) + 'B'; if (n >= 1e6) return '$' + (n / 1e6).toFixed(1) + 'M'; return '$' + n.toLocaleString('en-US'); } /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ FLASH ANIMATION Briefly highlights an element when its value changes โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ function flash(el, up) { if (!el) return; el.style.transition = 'color 0.25s ease'; el.style.color = up ? '#10b981' : '#f87171'; setTimeout(function () { el.style.color = ''; }, 700); } /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ SET TEXT SAFELY โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ function setText(el, text) { if (el && el.textContent !== text) { el.textContent = text; } } function setHTML(el, html) { if (el && el.innerHTML !== html) { el.innerHTML = html; } } /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ UPDATE ALL PRICE ELEMENTS ON THE PAGE Called after every successful API fetch. Uses data-cv-* attributes so any element anywhere on the site can show live prices โ€” just add the right attribute. โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ function updateAllElements(data) { /* โ”€โ”€ 1. Homepage ticker bar (scrolling strip) โ”€โ”€ */ updateHomepageTicker(data); /* โ”€โ”€ 2. Dashboard mini ticker strip โ”€โ”€ */ updateDashboardTicker(data); /* โ”€โ”€ 3. Dashboard market overview coin table โ”€โ”€ */ updateMarketOverview(data); /* โ”€โ”€ 4. Dashboard hero asset cards (hero panel) โ”€โ”€ */ updateHeroAssets(data); /* โ”€โ”€ 5. Homepage hero asset list โ”€โ”€ */ updateHomepageHeroAssets(data); /* โ”€โ”€ 6. Trading analysis BTC chart header โ”€โ”€ */ updateTradingAnalysis(data); /* โ”€โ”€ 7. Any element with data-cv-price attribute โ”€โ”€ */ updateDataAttributes(data); } /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 1. HOMEPAGE TICKER BAR Targets: .ticker-item spans inside #ticker The ticker duplicates items for seamless scroll, so we update both sets. โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ function updateHomepageTicker(data) { var track = document.getElementById('ticker'); if (!track) return; var items = track.querySelectorAll('.ticker-item'); items.forEach(function (item) { var symEl = item.querySelector('.ticker-symbol'); var priceEl = item.querySelector('.ticker-price'); var changeEl = item.querySelector('.ticker-up, .ticker-down'); if (!symEl || !priceEl) return; var sym = symEl.textContent.trim().toUpperCase(); var coin = symToCoinId(sym); if (!coin || !data[coin]) return; var price = data[coin].usd; var change = data[coin].usd_24h_change; var chg = fmtChange(change); var oldPrice = priceEl.textContent; setText(priceEl, fmtPrice(price, coin)); if (oldPrice !== priceEl.textContent) flash(priceEl, chg.up); if (changeEl) { changeEl.textContent = chg.text; changeEl.className = chg.up ? 'ticker-up' : 'ticker-down'; } }); } /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 2. DASHBOARD MINI TICKER (Trading Analysis section) Targets: #cv-ticker-mini items with id t-btc, t-eth etc. โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ function updateDashboardTicker(data) { var idMap = { 'bitcoin': 't-btc', 'ethereum': 't-eth', 'binancecoin': 't-bnb', 'solana': 't-sol', 'ripple': 't-xrp', }; Object.keys(idMap).forEach(function (coinId) { if (!data[coinId]) return; var el = document.getElementById(idMap[coinId]); if (!el) return; var price = data[coinId].usd; var change = data[coinId].usd_24h_change; var chg = fmtChange(change); var old = el.textContent; setText(el, fmtPrice(price, coinId)); if (old !== el.textContent) flash(el, chg.up); // Update the adjacent change span var parent = el.parentElement; var changeEl = parent ? parent.querySelector('.cv-ticker-item__chg--up, .cv-ticker-item__chg--down') : null; if (changeEl) { changeEl.textContent = chg.text; changeEl.className = chg.up ? 'cv-ticker-item__chg--up' : 'cv-ticker-item__chg--down'; } }); // USDT is always stable โ€” update text only var usdt = document.getElementById('t-usdt'); if (usdt) setText(usdt, '$1.00'); } /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 3. DASHBOARD MARKET OVERVIEW COIN TABLE Targets: .cv-coin-row elements โ€” matched by coin logo class โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ function updateMarketOverview(data) { var classMap = { 'cv-coin-logo--btc': 'bitcoin', 'cv-coin-logo--eth': 'ethereum', 'cv-coin-logo--usdt': 'tether', 'cv-coin-logo--bnb': 'binancecoin', 'cv-coin-logo--sol': 'solana', 'cv-coin-logo--xrp': 'ripple', }; document.querySelectorAll('.cv-coin-row').forEach(function (row) { var logoEl = row.querySelector('[class*="cv-coin-logo--"]'); if (!logoEl) return; var coinId = null; Object.keys(classMap).forEach(function (cls) { if (logoEl.classList.contains(cls.replace('cv-coin-logo--', '').length > 0 ? cls.split('cv-coin-logo--')[1] ? cls : cls : cls)) { coinId = classMap[cls]; } }); // Simpler: check each known class if (!coinId) { var classes = logoEl.className; if (classes.indexOf('btc') > -1) coinId = 'bitcoin'; if (classes.indexOf('eth') > -1) coinId = 'ethereum'; if (classes.indexOf('usdt') > -1) coinId = 'tether'; if (classes.indexOf('bnb') > -1) coinId = 'binancecoin'; if (classes.indexOf('sol') > -1) coinId = 'solana'; if (classes.indexOf('xrp') > -1) coinId = 'ripple'; } if (!coinId || !data[coinId]) return; var price = data[coinId].usd; var change = data[coinId].usd_24h_change; var chg = fmtChange(change); var priceEl = row.querySelector('.cv-coin-price'); var changeEl = row.querySelector('.cv-coin-change'); if (priceEl) { var old = priceEl.textContent; setText(priceEl, fmtPrice(price, coinId)); if (old !== priceEl.textContent) flash(priceEl, chg.up); } if (changeEl) { changeEl.textContent = (chg.up ? 'โ–ฒ +' : 'โ–ผ ') + Math.abs(data[coinId].usd_24h_change).toFixed(2) + '%'; changeEl.className = 'cv-coin-change ' + (chg.up ? 'cv-change--up' : 'cv-change--down'); } }); } /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 4. DASHBOARD HERO PANEL ASSET CARDS Targets: .asset-price .price spans with adjacent .asset-ticker โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ function updateHeroAssets(data) { // Asset rows in the hero panel โ€” matched by ticker text content document.querySelectorAll('.asset-row').forEach(function (row) { var tickerEl = row.querySelector('.asset-ticker'); var priceEl = row.querySelector('.price'); var changeEl = row.querySelector('.change-pos, .change-neg'); if (!tickerEl || !priceEl) return; var tickerText = tickerEl.textContent.trim().toUpperCase(); var coinId = null; if (tickerText.indexOf('BTC') > -1) coinId = 'bitcoin'; if (tickerText.indexOf('ETH') > -1) coinId = 'ethereum'; if (tickerText.indexOf('SOL') > -1) coinId = 'solana'; if (!coinId || !data[coinId]) return; var price = data[coinId].usd; var change = data[coinId].usd_24h_change; var chg = fmtChange(change); var old = priceEl.textContent; setText(priceEl, fmtPrice(price, coinId)); if (old !== priceEl.textContent) flash(priceEl, chg.up); if (changeEl) { changeEl.textContent = chg.text; changeEl.className = chg.up ? 'change-pos' : 'change-neg'; } }); } /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 5. HOMEPAGE HERO ASSET LIST (chart card prices) Targets: .asset-price .price inside .chart-card โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ function updateHomepageHeroAssets(data) { // Same structure as dashboard hero โ€” already handled above // This is a safe no-op if elements aren't found } /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 6. TRADING ANALYSIS SECTION Updates BTC chart header price and 7D High/Low stat boxes โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ function updateTradingAnalysis(data) { if (!data.bitcoin) return; var btcPrice = data.bitcoin.usd; var btcChange = data.bitcoin.usd_24h_change; var chg = fmtChange(btcChange); // Update BTC chart card header pill document.querySelectorAll('.cv-chart-pill').forEach(function (pill) { var parent = pill.closest('.cv-chart-card'); if (!parent) return; var titleEl = parent.querySelector('.cv-chart-card__title'); if (titleEl && titleEl.textContent.indexOf('BTC') > -1) { pill.textContent = chg.text.replace('โ–ฒ ', '+').replace('โ–ผ ', ''); pill.className = 'cv-chart-pill ' + (chg.up ? 'cv-pill--up' : 'cv-pill--down'); } }); // Update market cap display if present document.querySelectorAll('.cv-mkt-stat').forEach(function (stat) { var label = stat.querySelector('.cv-mkt-stat__label'); var val = stat.querySelector('.cv-mkt-stat__val'); if (!label || !val) return; if (label.textContent.indexOf('Total Mkt Cap') > -1 && data.bitcoin.usd_market_cap) { // Rough global market cap approximation from BTC dominance var btcMcap = data.bitcoin.usd_market_cap; var globalMcap = btcMcap / 0.542; // BTC ~54.2% dominance setText(val, fmtBigNum(globalMcap)); } if (label.textContent.indexOf('24h Volume') > -1 && data.bitcoin.usd_24h_vol) { var totalVol = Object.keys(data).reduce(function (acc, id) { return acc + (data[id].usd_24h_vol || 0); }, 0); setText(val, fmtBigNum(totalVol)); } }); } /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 7. DATA-ATTRIBUTE API Any HTML element can show live prices by adding: data-cv-price="bitcoin" โ†’ shows price data-cv-change="bitcoin" โ†’ shows 24h change data-cv-mcap="bitcoin" โ†’ shows market cap data-cv-vol="bitcoin" โ†’ shows 24h volume Example: Loading... Loading... โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ function updateDataAttributes(data) { document.querySelectorAll('[data-cv-price]').forEach(function (el) { var coinId = el.getAttribute('data-cv-price'); if (data[coinId]) { var old = el.textContent; setText(el, fmtPrice(data[coinId].usd, coinId)); if (old !== el.textContent) flash(el, data[coinId].usd_24h_change >= 0); } }); document.querySelectorAll('[data-cv-change]').forEach(function (el) { var coinId = el.getAttribute('data-cv-change'); if (data[coinId]) { var chg = fmtChange(data[coinId].usd_24h_change); setText(el, chg.text); el.style.color = chg.up ? '#10b981' : '#f87171'; } }); document.querySelectorAll('[data-cv-mcap]').forEach(function (el) { var coinId = el.getAttribute('data-cv-mcap'); if (data[coinId] && data[coinId].usd_market_cap) { setText(el, fmtBigNum(data[coinId].usd_market_cap)); } }); document.querySelectorAll('[data-cv-vol]').forEach(function (el) { var coinId = el.getAttribute('data-cv-vol'); if (data[coinId] && data[coinId].usd_24h_vol) { setText(el, fmtBigNum(data[coinId].usd_24h_vol)); } }); } /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ SYMBOL โ†’ COINGECKO ID CONVERTER โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ function symToCoinId(sym) { var map = { 'BTC': 'bitcoin', 'ETH': 'ethereum', 'USDT': 'tether', 'BNB': 'binancecoin', 'SOL': 'solana', 'XRP': 'ripple', 'ADA': 'cardano', 'MATIC':'matic-network', 'AVAX': 'avalanche-2', 'DOT': 'polkadot', }; return map[sym] || null; } /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ STATUS INDICATOR Shows a small "Live" or "Offline" badge if you add an element with id="cv-live-status" anywhere on the page โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ function setStatus(online, lastUpdate) { var el = document.getElementById('cv-live-status'); if (!el) return; if (online) { el.innerHTML = 'โฌค LIVE' + (lastUpdate ? ' ยท Updated ' + lastUpdate + '' : ''); } else { el.innerHTML = 'โฌค Reconnecting...'; } } /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ LOADING SKELETON While the first fetch is in-flight, replace static prices with a subtle pulse so users know it's loading โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ function showLoadingState() { var style = document.createElement('style'); style.id = 'cv-price-loading'; style.textContent = [ '@keyframes cv-price-pulse {', ' 0%,100% { opacity:1; }', ' 50% { opacity:0.4; }', '}', '.cv-price-loading {', ' animation: cv-price-pulse 1.2s ease infinite;', ' color: #64748b !important;', '}' ].join(''); document.head.appendChild(style); // Add loading class to known price elements var selectors = [ '.ticker-price', '.cv-coin-price', '#t-btc, #t-eth, #t-bnb, #t-sol, #t-xrp', ]; selectors.forEach(function (sel) { document.querySelectorAll(sel).forEach(function (el) { el.classList.add('cv-price-loading'); }); }); } function clearLoadingState() { var style = document.getElementById('cv-price-loading'); if (style) style.remove(); document.querySelectorAll('.cv-price-loading').forEach(function (el) { el.classList.remove('cv-price-loading'); }); } /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ FETCH PRICES FROM COINGECKO โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ var fetchCount = 0; var errorCount = 0; var MAX_ERRORS = 5; function fetchPrices() { fetch(API_URL, { method: 'GET', headers: { 'Accept': 'application/json' }, cache: 'no-store', }) .then(function (res) { if (!res.ok) throw new Error('HTTP ' + res.status); return res.json(); }) .then(function (data) { cachedData = data; errorCount = 0; fetchCount++; clearLoadingState(); updateAllElements(data); var now = new Date().toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', second: '2-digit' }); setStatus(true, now); console.log('[CryptoVault] Prices updated at ' + now + ' (fetch #' + fetchCount + ')'); }) .catch(function (err) { errorCount++; setStatus(false, null); console.warn('[CryptoVault] Price fetch failed (' + errorCount + '/' + MAX_ERRORS + '):', err.message); if (errorCount >= MAX_ERRORS) { console.error('[CryptoVault] Too many errors โ€” stopping auto-refresh. Reload page to retry.'); return; // Stop scheduling } // Retry sooner on error (15s) setTimeout(fetchPrices, 15000); }); } /* โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ INITIALISE โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ */ function init() { showLoadingState(); // First fetch immediately fetchPrices(); // Then every 60 seconds setInterval(function () { if (errorCount < MAX_ERRORS) { fetchPrices(); } }, REFRESH_MS); } // Run after DOM is ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })(); /* ================================================================ OPTIONAL: DATA-ATTRIBUTE EXAMPLES Add these to any element anywhere on your site to show live prices without any extra code: ================================================================ Show BTC price: Loading... Show ETH price: Loading... Show SOL 24h change: Loading... Show BNB market cap: Loading... Show XRP 24h volume: Loading... Valid coin IDs: bitcoin | ethereum | tether | binancecoin | solana | ripple ================================================================ ADDING LIVE STATUS BADGE TO ANY PAGE: ================================================================ Add this HTML anywhere on your page/dashboard:
It will automatically show: โฌค LIVE ยท Updated 09:42:15 ================================================================ */