
Case Study · Personal Project
Token Portfolio
Interactive crypto dashboard for tracking token holdings, live prices, portfolio value, and watchlist data.
Helps users monitor a personalized portfolio with live data, visual summaries, and real-time updates.
Tech Stack
React + ViteRedux ToolkitTanStack QueryTailwind CSSWagmiRainbowKit
Role
Frontend Engineer · Sole Developer
Core Contribution
- 01Built the dashboard UI for portfolio value, holdings, and watchlist management.
- 02Implemented token search, add-token flow, and editable holdings.
- 03Created responsive views with a clean Figma-to-code implementation.
- 04Designed the watchlist and portfolio summary interface for clarity and fast scanning.
Engineering Decisions
- 01Used Redux Toolkit for centralized state management across portfolio and watchlist.
- 02Used TanStack Query for caching and reducing unnecessary API calls to CoinGecko.
- 03Integrated CoinGecko API for live token data and price updates.
- 04Persisted user watchlist and portfolio data in local storage for cross-session continuity.
- 05Used Wagmi + RainbowKit for wallet connection flow.
Product Thinking
- 01Built a portfolio overview with a donut chart for quick visual understanding of asset allocation.
- 02Added last-updated metadata to make refresh state visible and reduce user uncertainty.
- 03Designed the watchlist for fast comparison of price, change percentage, and holdings.
- 04Focused on keeping the UI readable and efficient for data-heavy usage.
Technical Highlights
- 01Reusable UI components for buttons, modals, and inputs.
- 02Infinite scrolling search for tokens.
- 03Responsive layout with clean mobile and desktop behavior.
- 04Custom donut chart implementation for portfolio allocation.
- 05Smooth state transitions and price refresh behavior.
Challenges
- 01Keeping portfolio and watchlist state in sync across interactions.
- 02Handling live API data without unnecessary rerenders.
- 03Maintaining a clean and readable layout while showing many token metrics.
- 04Ensuring local persistence worked reliably after refresh.