← cd ../projects case study

Cryptofolio

A decoupled MERN-stack crypto portfolio platform — Next.js 14 frontend, Express REST API, and a virtual demo-trading engine that computes holdings by replaying transaction history.

role

Full Stack Developer

status

Live · Vercel + Render

stack

Next.js 14 · Express · MongoDB

Overview

Cryptofolio is a cryptocurrency portfolio platform where users track digital assets and practice trading without risking real money. It pairs live market data with a virtual trading engine — every account starts with a 10,000 balance, and holdings are derived entirely from the user's recorded buy and sell history.

The challenge

Crypto investors juggling holdings across exchanges had no single, calm view of their position — and no safe way to test a strategy before committing capital. The product needed live prices, a clean portfolio view, and a trading sandbox, all without a heavy backend or the risk of stale, drifting balances.

Architecture

Cryptofolio is a monorepo with separate client/ and server/ directories. The client is a Next.js 14 App Router frontend on Vercel; the server is an Express REST API on Render following an MVC structure — models → routes → controllers — with MongoDB accessed through Mongoose. The two talk over HTTP/JSON via Axios, while CoinGecko prices and TradingView charts are pulled straight into the browser to keep the backend lean.

architecture — cryptofolio
$ ./describe --stack

  monorepo/
  ├── client/   Next.js 14 · App Router        (Vercel)
  │      │  HTTP / JSON via Axios
  │      │  └──▶ CoinGecko (prices) · TradingView (charts)
  │      ▼
  ├── server/   Express REST API · MVC         (Render)
  │      │  models → routes → controllers
  │      ▼
  └── MongoDB  +  Mongoose

The demo trading engine

Rather than storing a mutable balance that can drift out of sync, the engine treats every buy and sell as an immutable transaction in MongoDB. A user's current coin holdings and portfolio value are computed dynamically by replaying that transaction history — so the portfolio is always a provable function of what the user actually did, and never a number that can quietly go wrong.

Security

The API is treated as a public surface and hardened accordingly.

JWT Stateless token-based authentication
bcrypt Salted password hashing at rest
Helmet Hardened HTTP security headers
rate-limit express-rate-limit guards API abuse
validation express-validator sanitises every input
CORS Scoped cross-origin access control

Key features

  • Live cryptocurrency prices via the CoinGecko API
  • Interactive TradingView charts embedded client-side
  • Virtual demo trading — every user starts at 10,000
  • Holdings replayed from buy/sell transaction history
  • JWT auth with bcrypt-hashed credentials
  • Light and dark theme support via next-themes

Tech stack

frontend

Next.js 14React 18Tailwind CSS 3.4PostCSSAutoprefixerAxiosnext-themesreact-iconsSharpESLintVercel

backend

Node.js 22Express 4Mongoose 6MongoDBbcryptjsonwebtokenHelmetexpress-rate-limitexpress-validatorCORSdotenvNodemonmongodb-memory-serverRender

Outcome

Cryptofolio is deployed and used for portfolio tracking and risk-free practice trading. The replay-based engine and offloaded third-party calls keep the backend lean while the platform stays accurate — a focused tool that does one thing, dependably.