Drag-and-drop web viewer for EUC trip logs (.dbb, .csv, .gpx, .xlsx): a 3D
map with terrain, playback, and charts, all client-side. No backend, no upload to
anyone's server. Your files are parsed in your browser and never leave it.
Pairs with the EUC Planet app, which records the logs directly, but exports from DarknessBot or euc.world work too.
If it's useful to you, a PayPal donation keeps it going.
- I wanted to look at my own rides without uploading them to somebody else's cloud first,
- the trip viewers that exist are mostly dead, ad-stuffed, or want a login,
- a 3D map beats a spreadsheet.
index.html Main map + trip list
inspector.html Single-trip inspector (3D map + playback)
static/
favicon.svg
css/style.css Main app styles
css/inspector.css Inspector styles
js/app.js Main app (Leaflet map, trip tree, recent files)
js/inspector.js Inspector (MapLibre GL 3D map, charts, playback)
js/parser-worker.js Web Worker: parses .dbb/.csv client-side with JSZip
js/euc-world-export.js euc.world bookmarklet: exports your tours as a .dbb
js/source-hints.js upload-screen "how to export from DarknessBot / euc.world"
External libraries (all loaded from CDN):
- Leaflet 1.9.4 (main map)
- MapLibre GL 4.7.1 (inspector 3D map with terrain)
- JSZip 3.10.1 (in worker, unpacks
.dbbzip archives) - AWS terrarium DEM tiles (elevation):
s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png
- IndexedDB
eucplanet-trip-viewer, primary storagerecentFilesstore: up to 5 recently uploaded files with their parsed trackscurrentSessionstore: last-loadedallTracksarray (key"tracks")
- localStorage
dbb_tracks, fallback/fast cache for small datasets (silently fails over quota)
The inspector (inspector.html?i=<index>) reads from IndexedDB first, then falls back to localStorage.
Each track object:
{
name, date, dateStart, dateEnd,
points: [[lat, lon, speed, alt, volt, temp, battery], ...], // only GPS-bearing rows
timeseries: [[sec, speed, voltage, temp, battery, altitude, lat, lon], ...], // max 500 rows
stats: { points, rows, distanceKm, maxSpeed, avgSpeed, maxAlt, minAlt, maxVoltage, minVoltage, maxTemp }
}
The viewer can be embedded in any app (Android, iOS, Electron, iframe). A JavaScript API (window.loadFileFromBase64) accepts base64-encoded .dbb or .csv data and displays it on the map without manual upload. Add ?embedded to the URL to hide the upload UI on load. See INTEGRATION.md for details and code examples.
It's static, so any static file server works:
python -m http.server 8000
# then open http://localhost:8000/
Note: inspector.html uses a Web Worker, which requires serving via http:// (not file://).