Product Architecture

Local-first by design

DashVault runs entirely on-device. Ingestion, indexing, thumbnailing, search, and rules execute against local files and a SQLite metadata store.

System Layers
Presentation — React Dashboard
LibraryTripsMapIncidents
API — FastAPI
/videos/trips/incidents/search
Services — Import • Trip Segmenter • Rules • Search
IngestSegmentRulesQuery
Workers — FFmpeg • Metadata Extractor
ThumbnailTranscodeProbe
Storage — SQLite + Local Filesystem
metadata.dbvault/videos/*vault/thumbs/*

Ingestion Pipeline

Step 1
Detect
Watches source folders & SD cards.
Step 2
Probe
FFprobe extracts codec, GPS, timing.
Step 3
Thumbnail
HW-accelerated frame capture.
Step 4
Segment
Groups clips by time gap → trips.
Step 5
Index
Writes rows to SQLite metadata.

Rules Engine

      ┌──────────────┐
      │  New Video   │
      └──────┬───────┘
             ▼
   ┌──────────────────────┐
   │  Extract GPS + IMU   │
   └─────────┬────────────┘
             ▼
   ┌──────────────────────┐        ┌──────────────────┐
   │  Match Rules (yaml)  │──yes──▶│  Create Incident │
   └─────────┬────────────┘        └────────┬─────────┘
             │no                              │
             ▼                                ▼
   ┌──────────────────┐              ┌──────────────────┐
   │  Mark Processed  │              │  Notify + Flag   │
   └──────────────────┘              └──────────────────┘

Rules:
  - id: harsh_brake      when: decel > 0.5g
  - id: sharp_turn        when: yaw_rate > 60deg/s
  - id: speeding          when: speed > limit + 15
  - id: lane_drift        when: hdg_var > threshold

Data Model

videos
  • id
  • trip_id
  • path
  • duration
  • resolution
  • recorded_at
  • status
trips
  • id
  • driver_id
  • started_at
  • ended_at
  • distance_km
  • origin
  • destination
incidents
  • id
  • video_id
  • type
  • severity
  • timestamp
  • status
  • notes
Full-text Search
SQLite FTS5 indexes filenames, tags, driver, and place.
Privacy Model
Files never leave the device. Optional encrypted export.
Extensibility
Plugin API for detectors and third-party importers.