๐ฅ๏ธ Kiosk Setup
Run a local MeshCore Canada display node on a Raspberry Pi, mini PC, or any computer.
The local server serves the emergency display page on your local network โ alerts sync from the cloud,
and the display keeps working offline using cached data.
What you need
โ Node.js 18+ โ Internet (for sync) Optional: MeshCore device
The local server is a lightweight Node.js app (~2 MB). It runs on Raspberry Pi 3/4, Windows, Linux, or macOS. No cloud account required for display-only mode.
Enter your city info
Fill in your city and province to generate a configured setup script.
Install & run
Run these commands in a terminal:
# Install Node.js if needed
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
# Download and start the local server
curl -fsSL https://ecommesh.live/local-server.js -o meshcore-local.js
node meshcore-local.js --city="Calgary" --province="AB" --port=3001 --cloud="https://ecommesh.live"
Then open http://localhost:3001 in Chrome kiosk mode:
chromium-browser --kiosk --noerrdialogs "http://localhost:3001/display"
๐ก To start on boot: pm2 start meshcore-local.js -- --city="Calgary" --province="AB"
Run in PowerShell or Command Prompt:
# Download local server script
Invoke-WebRequest "https://ecommesh.live/local-server.js" -OutFile "meshcore-local.js"
# Run it
node meshcore-local.js --city="Calgary" --province="AB" --port=3001
Then open the kiosk:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --kiosk --noerrdialogs "http://localhost:3001/display"
โ ๏ธ Install Node.js from nodejs.org if not already installed.
Use Docker for a fully isolated setup:
docker run -d \
--name meshcore-local \
--restart unless-stopped \
-p 3001:3001 \
-e CITY="Calgary" \
-e PROVINCE="AB" \
-e CLOUD_URL="https://ecommesh.live" \
node:18-alpine \
sh -c "wget -qO- https://ecommesh.live/local-server.js > /app.js && node /app.js"
Then navigate to http://YOUR-PI-IP:3001/display on any browser on your network.
How the local server works
The local server runs a small HTTP proxy that:
- Syncs alerts from the cloud every 5 seconds when online
- Caches the last 24 hours of alerts locally (survives internet outages)
- Serves the display page at
http://localhost:{PORT}/display - Serves a health check at
http://localhost:{PORT}/health - Uses the cloud weather & ad data when online; shows "Offline Mode" banner when not