This dashboard is a live Node.js application. It uses server-side routes for CSV upload, booking storage, reminder scheduling, email confirmation, and address search.
Use:
This keeps the current dashboard operational without rewriting the backend.
Create a new private GitHub repository, then from this folder run:
git init
git add .
git commit -m "Initial OMEXOM vehicle booking dashboard"
git branch -M main
git remote add origin https://github.com/YOUR-ACCOUNT/YOUR-REPO.git
git push -u origin main
Keep the repository private because customer vehicle, driver, and site data may be present.
On the host machine:
git clone https://github.com/YOUR-ACCOUNT/YOUR-REPO.git
cd YOUR-REPO
npm install
npm start
The app listens on:
http://localhost:3600
Use a process manager such as PM2 or the host platform’s service runner so the app restarts if the machine reboots.
Install cloudflared on the host, authenticate it, and create a tunnel:
cloudflared tunnel login
cloudflared tunnel create omexom-booking-dashboard
cloudflared tunnel route dns omexom-booking-dashboard booking.yourdomain.co.nz
Create a cloudflared config similar to:
tunnel: omexom-booking-dashboard
credentials-file: /path/to/tunnel-credentials.json
ingress:
- hostname: booking.yourdomain.co.nz
service: http://localhost:3600
- service: http_status:404
Then run:
cloudflared tunnel run omexom-booking-dashboard
In Cloudflare Zero Trust:
Settings > Authentication.One-time PIN.Access > Applications.Self-hosted application.booking.yourdomain.co.nz.AllowEmails or Email domain8 hours or 24 hours.When users visit the dashboard, Cloudflare will ask for their email address and send a one-time PIN before allowing access.
config.json, SMTP passwords, or private customer data.data/ folder if using JSON storage.vehicles, bookings, and outbox from JSON files into a database.