This project provides a web application for displaying information about cryptocurrency coin daemon nodes using RPC. It visualizes node data on an OpenStreetMap and displays detailed information in a table format. The backend is a TypeScript + Express API (run directly with tsx); the frontend is a React 19 + Vite app styled with Tailwind CSS 4.
- Visual representation of coin nodes on an OpenStreetMap.
- Light / dark mode toggle (remembers your choice).
- Reverse-DNS hostnames with a public-resolver fallback for IPv6 (
ip6.arpa), plus per-address PTR overrides — all configurable insite.config.ts. - Node data will be cached for 60 minutes.
- Detailed table view showing using IPinfo.io:
- IP address and Hostname (if available)
- User agent (Wallet Version)
- Coin block height
- Country and Timezone
- Location (City, States)
- Network details, ASN Number
Before you begin, ensure you have met the following requirements:
- You have installed Node.js 20+ and npm 10+.
- You have a basic understanding of JavaScript and Node.js.
- You have a cryptocurrency daemon node can accessible via RPC.
- You have a IPinfo.io token or something else.
- You have a Reverse Proxy and web server. (Recommend Nginx)
To install Node Map, follow these steps:
-
Clone the repository:
git clone https://github.com/ROZ-MOFUMOFU-ME/nodemap.git
-
Navigate to the project directory:
cd nodemap -
Install the necessary packages:
npm install
-
Add RPC client settings and your IPinfo token to the
.envfile:# RPC server settings DAEMON_RPC_HOST=127.0.0.1 DAEMON_RPC_PORT=8333 DAEMON_RPC_USERNAME=your_username DAEMON_RPC_PASSWORD=your_password DAEMON_RPC_SSL=false DAEMON_RPC_TIMEOUT=30000 # IPinfo.io token IPINFO_TOKEN=your_ipinfo_token # Reverse-DNS resolvers (comma-separated). Many hosts cannot answer IPv6 PTR # (ip6.arpa) queries, so reverse lookups fall back to these public resolvers. # Leave empty to use only the system resolver. DNS_SERVERS=1.1.1.1,8.8.8.8 # Interval to update data CACHE_REFRESH_INTERVAL=3600000 # Node Map server port PORT=3000 # Vite development server port VITE_DEV_PORT=5173
To use Node Map, run the following command from the root of the project:
npm run buildand
npm run startor
pm2 start npm --name nodemap -- startOpen your web browser and navigate to http://localhost:3000 to view nodemap.
All user-facing text and branding lives in a single top-level file: site.config.ts.
Edit it to change the page headings, the table column labels, the map defaults, and every
part of the footer (links, social icons, GitHub star button, and donation addresses) — there is
no need to dig through the React components. It also holds dnsOverrides, a map for forcing the
reverse-DNS (PTR) hostname of specific IPv4/IPv6 addresses (handy for nodes with no PTR record). After editing, run npm run build (production) or
just save while npm run dev is running and the page hot-reloads.
The backend and frontend are no longer split across src/server and src/client:
server.ts— the Express API (run withtsx, no build step).src/— the React + Vite client (main.tsx,App.tsx,index.css).site.config.ts— shared, user-editable site configuration.test/— Vitest tests (run against the API with supertest).
| Script | Description |
|---|---|
npm run dev |
Run the API (tsx watch) and the Vite dev server. |
npm run build |
Build the production client into dist/. |
npm run start |
Serve the built client + API (tsx server.ts). |
npm run typecheck |
Type-check the whole project with tsc --noEmit. |
npm run lint |
Lint with ESLint 10 + typescript-eslint. |
npm run format |
Format the project with Prettier. |
npm test |
Run the Vitest suite. |
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name nodemap.example.com;
root /path/to/nodemap/dist;
# SSL
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
# logging
access_log /var/log/nginx/access.log combined buffer=512k flush=1m;
error_log /var/log/nginx/error.log warn;
# reverse proxy
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
# Proxy SSL
proxy_ssl_server_name on;
# Proxy headers
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Forwarded $proxy_add_forwarded;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
# Proxy timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
nginxconfig.io This site is useful to setup Nginx!
sudo systemctl start nginx
sudo systemctl enable nginx
Accessing example.com will show nodemap.
To contribute to Node Map, follow these steps:
- Fork this repository.
- Create a branch:
git checkout -b <branch_name>. - Make your changes and commit them:
git commit -m '<commit_message>' - Push to the original branch:
git push origin <project_name>/<location> - Create the pull request.
Alternatively, see the GitHub documentation on creating a pull request.
This project is licensed under the MIT License - see the LICENSE file for details.
ROZ: @ROZ_mofumofu_me
Aoi Emerauda: @Aoi_Emerauda Alternative
Project Link: https://github.com/ROZ-MOFUMOFU-ME/nodemap
-
ROZ - Author
-
Aoi Emerauda - Alternative
Donations for development are greatly appreciated!
BTC: 3FpbJ5cotwPZQn9fcdZrPv4h72XquzEvez
ETH: 0xc664a0416c23b1b13a18e86cb5fdd1007be375ae
LTC: Lh96WZ7Rw9Wf4GDX2KXpzieneZFV5Xe5ou
BCH: pzdsppue8uwc20x35psaqq8sgchkenr49c0qxzazxu
ETC: 0xc664a0416c23b1b13a18e86cb5fdd1007be375ae
MONA: MLEqE3vi11j4ZguMjkvMn5rUtze6kXbAzQ
