Ethereum wallet monitoring app. Track addresses, view balances and transactions, and get Discord alerts for new activity.
- Ethereum only — Monitor one Ethereum address per bot (native ETH + token transfers).
- Bots — Create multiple bots; each has a name, one wallet address, and an optional Discord webhook.
- Run / Stop — When a bot is running, the server polls Etherscan and stores new transactions.
- Discord alerts — New transactions can be sent to a Discord channel via webhook (optional).
- Dashboard — View balance, USD value, and transaction history with date filters and Etherscan links.
- Node.js >= 18
- MongoDB (local or remote)
- (Optional) Discord webhook URL for alerts
-
Install all dependencies (run once in the project root):
npm install
This installs root, backend, and frontend dependencies (postinstall runs
npm installinbackendandfrontend). -
Configure environment
Copy the backend example env and set your values:
cp backend/.env.example backend/.env
On Windows (PowerShell):
copy backend\.env.example backend\.envEdit
backend/.envand set at least:MONGODB_URI— Your MongoDB connection stringADMIN_PASSWORD— A strong password for the admin lock screen (never commit real values)
You can run backend and frontend together (one command) or separately (two terminals). No build is required for development.
From the project root:
npm run devThis starts the backend (port 8001) and frontend (port 3000). Open http://localhost:8001 — the backend proxies the UI from Vite.
npm run dev:backendOpen http://localhost:8001. You get the API and a short info page with instructions: run npm run dev:frontend and open http://localhost:3000 for the UI.
npm run dev:frontendOpen http://localhost:3000 for the UI. The frontend proxies /api to http://localhost:8001, so start the backend in another terminal for the app to work.
-
Build the frontend:
npm run build
-
Start the backend (it will serve the built frontend):
npm start --prefix backend
Or from the
backendfolder:npm start.App is at http://localhost:8001 (or your
PORT).
| Command | Description |
|---|---|
npm run dev |
Run backend + frontend; open http://localhost:8001 |
npm run dev:backend |
Backend only; open http://localhost:8001 |
npm run dev:frontend |
Frontend only; open http://localhost:3000 (needs backend on 8001) |
npm run build |
Build frontend into frontend/dist |
npm start --prefix backend |
Start backend (use after build) |
Create backend/.env from backend/.env.example. Keep all values private.
| Variable | Description | Default |
|---|---|---|
PORT |
Server port | 8001 |
MONGODB_URI |
MongoDB connection string | — |
ADMIN_PASSWORD |
Admin login password | — |
ETH_REFRESH_INTERVAL_MS |
Polling interval for Ethereum (ms) | 6000 |
CHAIN_DELAY_MS |
Delay between wallets per poll (ms) | 400 |
FETCH_INTERVAL_MINUTES |
Cron interval to refresh all wallets | 30 |
ETHERSCAN_BASE |
Etherscan base URL | https://etherscan.io |
VITE_DEV_URL |
Vite dev server URL (when using proxy) | http://localhost:3000 |
PROXY_TO_VITE |
Set to 1 when running npm run dev so backend proxies UI |
— |
Wallet-monitoring-bot/
├── backend/ # Express API + monitoring
│ ├── config/ # DB connection
│ ├── models/ # Bot, Wallet, Transaction (Mongoose)
│ ├── routes/ # /api/bots, /api/wallets, /api/auth
│ ├── services/ # Etherscan, wallet logic, Discord
│ ├── server.js
│ └── .env.example
├── frontend/ # React + Vite
│ ├── public/icons/ # eth.svg (Ethereum only)
│ ├── src/
│ │ ├── components/ # Admin, Dashboard, LockScreen
│ │ └── App.jsx
│ └── vite.config.js
├── package.json # Root scripts (dev, build)
├── .gitignore
└── README.md # This file
- Login — Open the app and enter your admin password.
- Create a bot — Click “Add bot”, set name, optional Discord webhook, and one Ethereum address (0x…).
- Run — Click “Run” on a bot to start monitoring.
- Alerts — If a Discord webhook is set, new transactions are posted to that channel.
- Dashboard — Click a bot to see balance, USD value, and transaction list with date filters and Etherscan links.
POST /api/auth/login— Body:{ "password": "<your-admin-password>" }GET /api/bots— List botsPOST /api/bots— Create bot (name,walletEthereum,discordWebhookUrl)PATCH /api/bots/:id— Update botDELETE /api/bots/:id— Delete botPOST /api/bots/:id/run— Start monitoringPOST /api/bots/:id/stop— Stop monitoringGET /api/wallets/:address— Get wallet + transactionsPOST /api/wallets/:address/refresh— Manually refresh walletGET /health— Health check
- Never commit
backend/.envor any file with real passwords, MongoDB URIs, or Discord webhook URLs. - Use
backend/.env.exampleonly as a template; set your own values and keep them secret. - Do not paste or log credentials in issues, docs, or code.
Private / unlicensed unless stated otherwise.