The Problem
Tesla owners who want to review dash‑camera footage must stitch together dozens of 1‑minute MP4 clips, then manually decode the embedded telemetry (speed, GPS, steering, etc.). Existing tools either require server‑side processing or lack a synchronized overlay, making post‑drive analysis time‑consuming and error‑prone.
What This Does
ExportDash is a client‑only web app that consumes a folder of TeslaCam recordings and produces a single, continuous playback with live telemetry overlays. The core logic lives in src/lib/dashcam-mp4.ts (MP4 parsing and SEI extraction) and src/hooks/useSeiData.ts (maps SEI timestamps to video frames). UI components such as src/components/VideoPlayer.tsx, TelemetryCard.tsx, MapView.tsx, and TelemetryTimeline.tsx render the video, telemetry cards, an interactive Leaflet map, and an event timeline respectively. Sequence detection that merges consecutive clips is implemented in src/lib/sequence-detector.ts, enabling seamless playback across clip boundaries.
How To Use It
Clone and install
git clone https://github.com/nobig-deals/exportdash.cam.git cd exportdash.cam npm ci # installs exact versions from package-lock.json
Development server
npm run dev # starts Next.js on http://localhost:3000
Production container
docker build -t exportdash . docker run -p 8080:80 exportdash # Next.js served via nginx (nginx.conf)
Docker Compose is also supported:
docker compose up # builds and runs the service, listening on port 8080
The entry point for the web UI is src/app/page.tsx, which renders the drop‑zone component (DropZone.tsx) that accepts a TeslaCam folder. After drop, the app reads files from the browser’s File System Access API, processes them through the SEI parser, and updates the React state used by the playback components.
No environment variables or external services are required; all processing occurs in the browser, as noted in the README.
Real‑World Use
A fleet manager can host the Docker image behind an internal reverse proxy. Technicians drop a vehicle’s TeslaCam directory into the UI, then export a trimmed clip with telemetry burned in using VideoExporter.tsx (WebCodecs). The resulting MP4 can be attached to incident reports without exposing raw footage to a cloud service.
// Example: trigger export from a button click import { exportVideo } from '@/components/VideoExporter';
<button onClick={() => exportVideo(videoRef.current, seiData)}>Export</button>
Code Health & Issues
Med – Untested code – No .test. files in the repo; core parsers (dashcam-mp4.ts, sequence-detector.ts) lack unit coverage. Med – Missing CI/CD – No .github/workflows or other pipeline definitions; builds and linting are not automatically enforced. Low – Limited error handling – File‑read errors and malformed SEI payloads are only logged in the console; UI does not surface user‑friendly messages. Low – TypeScript strictness – tsconfig.json enables strict mode, but some libraries (e.g., protobufjs) are used without explicit type guards, which could surface runtime type errors. Low – Documentation gaps – README covers basic setup but does not list required browser permissions for the File System Access API or describe the expected folder structure beyond “drop your TeslaCam folder”.
No license file is present, which could restrict commercial reuse.
The Bottom Line
ExportDash delivers a functional, zero‑backend solution for reviewing Tesla dash‑cam footage with synchronized telemetry and export capability. The codebase is compact and the Docker setup works out‑of‑thebox, but the lack of tests, CI, and thorough error handling means additional engineering effort is needed before deploying in a production or compliance‑sensitive environment. Suitable for internal tooling or proof‑of‑concepts; for enterprise use, augment with testing and a CI pipeline.