Live cryptocurrency market dashboard β prices, charts, portfolio tracker, price alerts, and news. 100% free data sources, no paid APIs, no accounts required.
Open source & fully self-hostable. No database, no login, no secret required β all data comes from free, keyless public APIs with automatic multi-source failover so rate limits rarely bite.
| Home β Bitcoin hero chart, top markets & hot news | Coin detail β Binance-style layout |
|---|---|
![]() |
![]() |
| Candlestick chart (Candle + indicators) | News feed |
|---|---|
![]() |
![]() |
| Home (light theme) |
|---|
![]() |
| Layer | Tech |
|---|---|
| Frontend | React 19 Β· TypeScript Β· Vite Β· Tailwind CSS v4 Β· TanStack Query |
| Charts | lightweight-charts (TradingView, OSS) Β· Recharts |
| State | Zustand (persisted to localStorage) |
| Backend | Node Β· Express Β· TypeScript Β· WebSocket (ws) |
| Data | CoinGecko (market/chart) Β· Binance (live WS: ticker/depth/trades) Β· alternative.me (F&G) Β· RSS (news) |
- π Home β Bitcoin hero chart at top, global stats, hot news feed, top-100 market table
- π Markets dashboard β global market cap, BTC/ETH dominance, Fear & Greed gauge
- π Coin detail (Binance-style) β header + 24h stat strip, tabbed Chart/Info/News, chart-left & order-book-right layout
- π―οΈ Rich chart β chart types (Area / Line / Candle / Bar), ranges, fullscreen, reset zoom
- π Deep-linkable charts β share a URL with the exact view, e.g.
/coin/bitcoin?type=candle&range=30 - π Technical indicators β SMA 20/50, EMA 200, Bollinger Bands, Volume, RSI (14), MACD (12,26,9)
- π‘οΈ Order book heatmap β live bid/ask depth with liquidity intensity bars + spread
- β‘ Realtime trades β streaming trade tape (price/size/side/value), pausable
- π° News β aggregated from free crypto RSS feeds (+ per-coin news tab)
- β Watchlist β persisted locally, live-updating
- πΌ Portfolio tracker β holdings, cost basis, P&L, allocation donut chart
- π Price alerts β browser notifications via the free Web Notifications API
- π± Multi-currency (USD/IDR/EUR) with live FX conversion of realtime prices
- π Dark/Light theme, π± PWA β installable + offline shell caching
- π Multi-source failover β CoinGecko β CoinCap β CoinPaprika (markets), CoinGecko β Binance (chart/candles), so rate limits rarely bite
# 1) Backend
cd backend
cp .env.example .env # optional: add a free CoinGecko demo key
npm install
npm run dev # http://localhost:8787
# 2) Frontend (new terminal)
cd frontend
npm install
npm run dev # http://localhost:5173Open http://localhost:5173 β the Vite dev server proxies /api and /ws to the
backend, so there is no CORS setup needed during development.
# Backend
cd backend && npm run build && npm start
# Frontend (set the API origin, then build)
cd frontend
VITE_API_URL=https://your-backend.example.com npm run build
# deploy the ./dist folder to any static host (Vercel, Netlify, Render, ...)When
VITE_API_URLis empty, the frontend talks to the same origin β useful when you serve the built frontend from the backend or behind a reverse proxy.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/health |
Health check |
| GET | /api/global |
Global market stats |
| GET | /api/markets?currency&per_page |
Top coins (multi-source failover) |
| GET | /api/fx |
USDβIDR/EUR FX rates |
| GET | /api/sources |
Last data source used per domain |
| GET | /api/coin/:id |
Coin detail |
| GET | /api/chart/:id?currency&days&type=line|candle |
Price history / OHLC |
| GET | /api/search?q |
Coin search |
| GET | /api/fear-greed |
Fear & Greed index |
| GET | /api/news |
Aggregated crypto news |
| WS | /ws |
Live tickers ({symbols:[...]}) |
Send a JSON message after connecting to /ws:
Server pushes messages tagged with a stream field: ticker, depth, or
trade. Order book and trades require the coin be listed on Binance (USDT pair).
| Var | Default | Notes |
|---|---|---|
PORT |
8787 |
|
COINGECKO_API_KEY |
(empty) | Free Demo key β stable higher rate limit |
CACHE_TTL_PRICES |
30 |
seconds |
CACHE_TTL_CHART |
300 |
seconds |
CACHE_TTL_NEWS |
600 |
seconds |
CORS_ORIGINS |
dev origins | comma-separated allowed origins |
cd backend && npm test # vitest
cd frontend && npm test # vitest + testing-library- CoinGecko public API is rate-limited (~10β30 req/min). The backend caches
responses and falls back to CoinCap / CoinPaprika automatically.
For heavier use you may add a free Demo key via
COINGECKO_API_KEY. - Binance WebSocket & public data mirror are free and need no key; charts fall back to Binance klines when CoinGecko is unavailable.
- News uses public RSS feeds β no API key required.
- Live prices from Binance are quoted in USDT (βUSD) and converted to the selected currency using live FX rates.
AGENTS.mdβ architecture & conventions for contributors and AI agents.CONTRIBUTING.mdβ how to contribute.TODO.mdβ recent feature work log.
This project is fully open source, released under the MIT License. You are free to use, modify, and distribute it (including commercially) as long as you keep the copyright notice. No warranty is provided.
Feel free to β the repo and open issues / PRs!




