A local-first Windows app that turns a chaotic folder of dashcam footage into a searchable, GPS-accurate trip library. No cloud, ever.
- Built at
- RaftWorks
- Client
- A private client (fixed-price engagement)
- Role
- Full-stack developer: scoped, built and QA'd end to end
- Platform
- Windows desktop
- Year
- 2026
A day of dual-channel dashcam recording produces roughly 500 clips and 490GB of footage, GPS telemetry in a proprietary format no general tool reads, and a camera clock that disagrees with GPS.
The client needed to find any moment by time and place, with no cloud services involved at any point.
- Wrote the scope and acceptance criteria for a three-milestone fixed-price engagement
- Built the Python/FastAPI backend, the GPS telemetry parser and the trip engine
- Built the React interface and the FFmpeg-based player
- Tested every acceptance criterion against the client's own footage
Every recording keeps GPS time, camera time, filename time, container time and filesystem time side by side, with a defined fallback order and the source of the resolved time always shown. Duplicate or missing GPS seconds are preserved as-is; invalid fixes are flagged, not dropped.
Files are identified by content fingerprint, not path: a clip renamed or moved to another drive is still the same file, and the same clip filed twice is stored once.
Trips are derived from stored metadata and GPS, grouped by a configurable gap threshold, and rebuilt automatically when that threshold changes. Every extraction run is versioned, so a better parser later can re-decode the raw telemetry already stored with each clip without touching the video files again.
- Backend
- PythonFastAPISQLite
- Frontend
- React
- Media
- FFmpeg
Delivered as a $1,000, three-milestone fixed-price engagement (scoping and design, development, then QA and handover), with every acceptance criterion passed on real footage.
- footage per day, per camera
- ~490GB
- time sources reconciled
- 5
- cloud services
- 0
Scroll the grid · click any screen to open it larger · ← → to browse