The idea
I've been trading for years - you can find me on TradingView as crypto_poet. But I kept running into the same problem when friends asked how to get started: there's no good way to practise without putting real money on the line.
I wanted to build a free trading simulator anyone could use to learn the basics. My first instinct was stocks, but reliable stock market data requires expensive paid plans that don't make sense for a free product. Crypto market data, on the other hand, is freely available - so I went with that.
The result is tradegame.org - a crypto trading simulator where you start with $100,000 in virtual cash and trade against real market data. No sign-up fees, no real money, no risk.
How it works
The app pulls live prices from CoinGecko across an extensive list of cryptocurrencies - not just the top 10, but a broad selection you can browse on the market page. You buy and sell with your virtual balance, and a persistent leaderboard tracks everyone's total portfolio value. Whoever makes the most money wins - no resets, no gimmicks.
If your trades go sideways, you can choose to reset your account back to $100k and start fresh. But the leaderboard stays intact - it's a real competition.
The core loop is simple: check prices, make a trade, watch your portfolio. But the learning happens in the patterns - you start recognising momentum, understanding spreads, and developing instincts about when to hold and when to cut losses.
The stack
The backend is Go with the Gin framework, serving a Next.js frontend. Market data comes from the CoinGecko API, and PostgreSQL handles user portfolios and trade history. Caddy sits in front as the reverse proxy and TLS terminator, and the whole thing runs as three Docker Compose services (db, backend, caddy), same as everything else I deploy.
I chose Go over Python for this one because goroutines made handling concurrent price updates and trade executions much cleaner, and a single static binary keeps the backend container tiny. Deploys are one command: git pull and rebuild the service that changed.
What I learned
Building a trading simulator forces you to think about problems you don't encounter in typical CRUD apps:
- Race conditions - what happens when two trades execute against the same balance simultaneously?
- Data freshness - how stale can a price be before a trade becomes unfair?
- Leaderboard performance - recalculating portfolio values across all users adds up fast when the crypto list is large
The voluntary reset mechanic was an important design choice. Without it, a bad run of trades could leave someone stuck with no buying power and no way to recover. Letting users reset to $100k keeps the learning going without undermining the leaderboard's integrity.
Try it
The app is live at tradegame.org. Start with $100k, make some trades, see where you land on the leaderboard. No account needed to browse - and if things go wrong, you can always reset and try again.