React
Tailwindcss
Ethers
MongoDB
Express
Socket.io
ChainWatcher
Decentralized, real-time wallet tracker for Ethereum-VM chains
Overview
ChainWatcher lets you monitor any Ethereum-compatible wallet—Ethereum, Binance Smart Chain, Arbitrum, and more—in one clean dashboard.
The user can add the addresses they care about, and get instant browser notifications as soon as on-chain events happen.
Dark mode, custom accent colors, responsive layout—everything adapts to your tastes and screen size.
My Role
- Sole planner, architect, and developer
- Drafted feature list and prioritized the MVP
- Built a clickable prototype for user feedback
- Iterated on performance, reliability, and UX
- Rolled the app out to production and monitored real traffic
Tech Stack
- Frontend: React, Tailwind CSS, React Context API (API & UI contexts), Socket.io client, Ethers.js
- Backend: Node.js, Express, MongoDB (Mongoose), Socket.io server
- Blockchain data: public RPC endpoints (Infura, Alchemy, BSC RPC), Etherscan-style APIs for metadata and internal transactions
How It Works
- User registers and adds wallet addresses.
- Backend polls or subscribes via WebSocket to each chain’s RPC endpoint, enriching raw TX data via a scanner API.
- New events are stored in MongoDB (users, wallets, notifications, error logs) and pushed to connected clients via Socket.io.
-
On the frontend, APIContext manages REST calls, sockets,
and blockchain connections. AppStateContext
handles UI preferences—dark mode, sidebar toggles, toast messages, custom
colors, and screen-size flags. Components use local
useStatehooks for internal state.
Key Features
- Real-time transaction alerts (incoming, outgoing, token transfers, contract events)
- Multi-chain support—track wallets across any Ethereum-VM network
- Custom filters by value, token type, or contract address
- Fully themeable UI with dark/light modes and accent-color picker
- Resilient error handling and auto-reconnect for RPC and socket failures
Challenges & Solutions
- Polling vs. subscriptions: Use WebSocket subscriptions when available; fallback to light polling (every 10 s).
- State sprawl: Split concerns into API and UI contexts to keep components focused.
- Event flooding: Batch DB writes and debounce socket pushes to prevent user spam during high-traffic periods.
Outcome & Learnings
ChainWatcher is now a stable, production-ready dApp used by early adopters to monitor dozens of wallets in real time.
I deepened my expertise in Ethereum tooling (Ethers.js, RPC/WebSocket patterns), real-time communication (Socket.io), and clean state management with React Context. The modular architecture makes adding new chains straightforward.