Releases: TheAngryRaven/DovesDataViewer
Releases · TheAngryRaven/DovesDataViewer
Release list
3.0.0 leaderboard and profiles
v3.0.0 — 2026-06-30
Added
- Public-vehicle badge. Vehicles marked Show on profile now carry a small
Public badge in the garage's Vehicles tab, so you can see at a glance which are
shared on your driver profile. - Request a datalogger. The contact form has a new New datalogger connection
category, and the "Download from logger" picker has a Request additional
dataloggers button that opens the contact form with that category preselected. - Custom tracks ride along with leaderboard snapshots. When you submit a snapshot
for a track that isn't in the built-in list, its layout + sectors are included with
the snapshot (so others can view the lap) and the track is automatically submitted
to the community track database for review — same flow as the manual submitter, no
CAPTCHA for signed-in users, deduped so it's only sent once. - Alfano logger groundwork. Picking the Alfano tile in the logger picker now
explains that Alfano transfers over Bluetooth serial (Classic Bluetooth SPP),
which browsers can't access in-browser, so it will require the native app. The
native-side download flow is scaffolded (src/lib/loggers/alfano/,
AlfanoDownload) against the shared native IPC client; the Rust backend that
drives it is still to come. - Public driver profiles (plan 0006). A new public
/driver/{name}page (shareable,
viewable signed-out) shows a driver's profile picture, display name, their opt-in
vehicles (name/type/engine only — never weights or setups), and their uploaded
leaderboard snapshots as cards. URLs are case-insensitive. Click a driver's
avatar on the Leaderboards to open their profile, and click any snapshot card to
load that lap in the read-only viewer. - Profile pictures. Tap your profile picture on the Profile tab to upload one; it's
cropped to a centred square and downscaled to ≤256px on-device, then stored in the
cloud. Avatar thumbnails now appear next to names on the Leaderboards. - Copy profile link. A button under Sign out on the Profile tab copies your public
driver-profile link. - Show a vehicle on your profile. Each vehicle in the garage now has a Show on
profile toggle that publishes a public-safe projection (no weight, no setup). - A ← Back to home button on the Leaderboards and driver-profile pages.
- Leaderboards (plan 0005). A new public Leaderboards page (linked from the
landing page) where anyone — signed in or not — can browse fastest community laps
by track → course → engine class, with an optional Group by weight toggle
and a Show top selector (3/10/25/50/100/All). Picking a group launches the
normal telemetry viewer in a new read-only mode (alert-coloured header,
Coach/Tools/Setups + video/weather/snapshots hidden) where every submitted lap is
a row, fastest first, labelled by the submitter's name. - Submit snapshots to the leaderboards. From the Profile tab, signed-in users
with lap snapshots get a Submit to leaderboards dialog. GPS, engine name and a
listed weight are public; engine-telemetry channels (RPM, temps) stay
private unless you opt to share them. Setup data is never uploaded. The listed
weight defaults to the vehicle's weight and can be overridden (e.g. show a class
weight). Identical snapshots can't be resubmitted. - Engine classification + moderation (admin). A new admin Leaderboards tab
lists every submission with approve/deny (allow-by-default), a per-record engine
class override, and admin notes. Engine classes are keyword groups that
collapse free-text engine names ("Tillotson 225" / "225RS" / "Tilly") into one
class automatically, with a Reclassify action — without ever mutating the
user's raw engine string.
Changed
- Display names are now unique case-insensitively so a name can't be impersonated by
changing case (existing case-duplicates are auto-suffixed by the migration). - Leaderboard names update live. A submitter's name on the leaderboards now comes from
their current profile (linked by account) instead of a copy frozen at submit time, so
renaming your display name updates all your existing entries.
Full changelog: v2.9.2...main
v2.9.2 prepping for big things
v2.9.2 — 2026-06-25
Added
- Frame-by-frame stepping in the header. Two new buttons flank the play button to step the data cursor one sample back/forward. A synced video follows the step (through the same sync path), landing on the exact frame — so drivers and coaches can compare a lap literally frame by frame. Stepping pauses any running playback.
- Split graphs — side-by-side lap comparison (Pro tab). On tablet and larger, a new Split graphs button (top-right of the Pro tab, where the Simple tab's Overlay toggle sits) splits the graph area into a draggable two-up view. Pick one of your enabled overlay laps and the right panel mirrors the main panel's graphs for that lap; a single playback control drives both, kept on the same point on track. If a synced video is relocated into the graph stack and the chosen lap is from the current session, a second video plays alongside it — frame-locked to the main player and showing the same point on track in the comparison lap's own footage (an out-of-session lap shows graphs only, leaving the main video untouched). Opening the side panel — or pressing Combine graphs — returns to the single view. Not available on phones.
- Download from a Fledgling over Bluetooth in the native app. On the native (Tauri) app the PerchWerks Fledgling tile in the logger picker now runs a real Bluetooth download through the native shell (the native webview has no Web Bluetooth). The flow scans for nearby loggers, lets you pick yours from an in-app list, then connects, lists sessions and downloads + imports the chosen one — the same device files (
.dove/.dovex/.csv) and parser as the browser path. Built on a newcreateDovesloggerConnection()adapter behind the existingLoggerConnectioninterface, sharing the native IPC client with MyChron. Settings, track sync and firmware update stay on the Web Bluetooth path for now. Web downloads are unchanged.
Changed
- The Pro tab's side panel can now be collapsed on any screen size (previously phone-only), giving the graphs the full width when you want it.
- Video sync is now anchored to absolute session time. Sync a video once and it stays put — switching laps (or cropping the range) never needs a re-sync. The app understands where the footage sits on the session timeline, so partial videos are handled cleanly: when the camera started after the logger or stopped before the session ended, the out-of-footage stretches show "Video starts later" / "Video ended" while the charts keep playing, instead of a generic message.
- Simple-view graph controls are easier to reach. The collapse/expand button on the map/graph divider is now larger and lives on the left, grouped with a new legend toggle in a single floating control flag — clear of the map's weather/info buttons on the right that it used to crowd. The legend toggle hides the chart's legend bar to reclaim vertical space (handy for logs with many channels), and collapsing the graph now shows a clean grey panel instead of a cramped chart. The "data crop" sector dropdown keeps a minimum width so it no longer squishes on mobile in the Simple or Pro views.
Fixed
- Smoother playback with a video loaded. Pressing play in Pro graph view with a synced video stuttered: the video's playhead time lived inside the shared video state, so every video frame re-created the whole session context and re-rendered every tab and panel ~30–60×/sec. The per-frame playhead now lives in its own tiny context (like the playback cursor already does), so only the video time readout re-renders per frame and the rest of the view stays quiet.
- A synced video no longer stutters when you play or scrub the data. Pressing the top play button used to advance the data cursor on its own clock and seek the locked video to chase it — every seek forces the decoder back to a keyframe, so the picture juddered instead of playing. The top play button now drives the video itself when it's locked over footage (the same smooth path as the video's own play button), with the cursor derived from the video's playhead.
- Scrubbing a synced video is smoother and lands on the same frame every time. Dragging the data cursor fired a fresh video seek every frame regardless of whether the previous one had finished, so the decoder thrashed (cancel/restart) and the picture juddered; a fixed seek-throttle also dropped the final seek, parking the video on a stale frame. Seeks are now paced on the video's own
seekedevent — the next seek is issued only when the last completes, always to the latest cursor position — using a fast approximate seek during the drag and one precise seek once the cursor settles, so the parked frame is exact and repeatable. Scrub cursor updates are also coalesced to one per animation frame, so a high-rate mouse or trackpad no longer floods the main thread with graph redraws while the video seeks. - Split-graphs comparison video no longer drifts lap-by-lap. Two causes are fixed. First, the comparison player seeked off the overlay lap's snapped first sample (a sub-sample fraction before the true start/finish crossing); it now anchors to each lap's true crossing times and interpolates the seek by track distance. Second — the bigger one — a single sync offset can't absorb a camera/datalogger clock-rate difference, so far-from-sync laps drifted by seconds. Video sync is now rate-aware: a manual ± nudge (50 ms steps) on the comparison video fine-tunes one lap, and the ✓ Lock in button turns that into a calibration anchor — the clock rate is fit through it (refined as you lock more laps) and applied to every lap automatically, keeping the lap you originally synced pixel-exact. Nudges never touch the saved sync until you lock them.
- Approving a track/course submission now adds it to the database. In the admin Submissions tab, approving a submission previously only flipped its status — it never created the track or course, so an approved new track/course silently never appeared in the live tables. Approval now materializes the submission: it upserts the track (creating it for a new track), upserts the course from the submitted geometry/sectors, sets a new track's default course, and attaches any drawn outline — covering new tracks, new courses, and course modifications. A bad payload now errors and leaves the submission pending instead of being marked approved while landing nothing.
- Simple-graph legend no longer lists g-force lines it doesn't draw. With the default "hardware" G-force source, the simple telemetry chart draws the hardware accel channels and hides the GPS-derived Lat G/Lon G — but the legend still listed them, so they appeared without ever drawing. The legend now matches what's drawn; switch the G-force source to GPS in Settings to see Lat G/Lon G.
- Landing-page header layout. The Sponsor button now sits at the far left next to the LapWing brand, and the account control sits at the far right. A new Settings button (opening the settings panel) sits just left of it. When signed in, the account control is now a Profile button that opens the file-manager drawer straight to the Profile tab, replacing the old Sign-out button.
- Support contact email. The Terms of Service and Privacy Policy now point to support@perchwerks.com for questions and requests (replacing the interim address), and the Code of Conduct's enforcement contact was updated to match.
Removed
- "Continue with Google" sign-in. Google OAuth routed through a third-party hosted broker; it has been removed (along with its build-time scaffolding and the
VITE_ENABLE_GOOGLE_AUTHflag) pending a native Supabase Google OAuth setup. Email sign-in/registration is unaffected. No public backend credentials ship in the repo anymore — the Supabase fallbacks are blank, so a fresh clone runs fully offline-first until you supply your ownVITE_SUPABASE_*values.
Full Changelog: v2.9.1...v2.9.2
v2.9.1 Prep for big things
What's Changed
- 2.9.1: offline-first landing copy + device-aware compatibility dialog by @TheAngryRaven in #283
- v2.9.1 by @TheAngryRaven in #284
- Rename production Worker → lapwing (isolate from old site) by @TheAngryRaven in #261
- Rename production Worker → lapwing (BETA sync) by @TheAngryRaven in #262
- Beta by @TheAngryRaven in #263
- update app icons by @TheAngryRaven in #264
- Purple theme + LapWing header logo by @TheAngryRaven in #266
- Mobile UI cleanup: logo → home + safe-area insets by @TheAngryRaven in #267
- Image-based logger picker for "Download from logger" by @TheAngryRaven in #268
- Fix home download button + generic logger-connection layer by @TheAngryRaven in #269
- UI cleanup: landing page split, leaner native shell, footer/login link tidy-up by @TheAngryRaven in #270
- Document the DovesDataLogger BLE protocol as a portable wire spec by @TheAngryRaven in #271
- Profile: separate cloud + local storage bars with a local-limit tooltip by @TheAngryRaven in #272
- Fix login rate limiter locking out valid sign-ins by @TheAngryRaven in #274
- Add deploy-version check independent of the service worker by @TheAngryRaven in #275
- Add password rules + realtime strength checker to sign-up by @TheAngryRaven in #276
- CI: auto-deploy the beta-proxy Worker by @TheAngryRaven in #273
- Extend safe-area insets to drawer + full-page routes by @TheAngryRaven in #277
- Native mychron downloads by @TheAngryRaven in #278
- Make MyChron Wi-Fi SSID prefix configurable in Settings by @TheAngryRaven in #279
- Landing/auth UI polish + native gating tweaks by @TheAngryRaven in #280
- Release 2.9.0: About-dialog GitHub links + feature refresh + version cut by @TheAngryRaven in #281
- Picker name tidy, delete-account header, drop landing tagline by @TheAngryRaven in #282
- v2.9.0 - rebrand and native app prep by @TheAngryRaven in #265
Full Changelog: v2.9.0...v2.9.1
2.9.0 prep for big things
What's Changed
- Rename production Worker → lapwing (isolate from old site) by @TheAngryRaven in #261
- Rename production Worker → lapwing (BETA sync) by @TheAngryRaven in #262
- Beta by @TheAngryRaven in #263
- update app icons by @TheAngryRaven in #264
- Purple theme + LapWing header logo by @TheAngryRaven in #266
- Mobile UI cleanup: logo → home + safe-area insets by @TheAngryRaven in #267
- Image-based logger picker for "Download from logger" by @TheAngryRaven in #268
- Fix home download button + generic logger-connection layer by @TheAngryRaven in #269
- UI cleanup: landing page split, leaner native shell, footer/login link tidy-up by @TheAngryRaven in #270
- Document the DovesDataLogger BLE protocol as a portable wire spec by @TheAngryRaven in #271
- Profile: separate cloud + local storage bars with a local-limit tooltip by @TheAngryRaven in #272
- Fix login rate limiter locking out valid sign-ins by @TheAngryRaven in #274
- Add deploy-version check independent of the service worker by @TheAngryRaven in #275
- Add password rules + realtime strength checker to sign-up by @TheAngryRaven in #276
- CI: auto-deploy the beta-proxy Worker by @TheAngryRaven in #273
- Extend safe-area insets to drawer + full-page routes by @TheAngryRaven in #277
- Native mychron downloads by @TheAngryRaven in #278
- Make MyChron Wi-Fi SSID prefix configurable in Settings by @TheAngryRaven in #279
- Landing/auth UI polish + native gating tweaks by @TheAngryRaven in #280
- Release 2.9.0: About-dialog GitHub links + feature refresh + version cut by @TheAngryRaven in #281
- Picker name tidy, delete-account header, drop landing tagline by @TheAngryRaven in #282
- v2.9.0 - rebrand and native app prep by @TheAngryRaven in #265
Full Changelog: v2.8.0...v2.9.0
2.8.0 LapWing Rebrand
What's Changed
- Prepare frontend to serve the Tauri/Android shell (Google Play compliance) by @TheAngryRaven in #255
- Rename brand from HackTheTrack to LapWing by @TheAngryRaven in #256
- Add data-export importer (cross-origin migration path) by @TheAngryRaven in #260
- Wire up lapwingdata.com + beta.lapwingdata.com proxy by @TheAngryRaven in #258
- 2.8.0 by @TheAngryRaven in #257
Full Changelog: v2.7.2...v2.8.0
v2.7.2 Rebrand Warning
What's Changed
- Migration banner on hackthetrack.net → LapWing (emergency, into main) by @TheAngryRaven in #259
Full Changelog: v2.7.1...v2.7.2
UX Flow Fixes
What's Changed
- Hide major toggle on non-major sectors once the 3-major cap is reached by @TheAngryRaven in #252
- Pad video panel hints + add bulk-select tip by @TheAngryRaven in #253
- Release 2.7.1 by @TheAngryRaven in #254
Full Changelog: v2.7.0...v2.7.1
UX flow fixes
What's Changed
- Track coach BETA branch again post-2.6.0 release by @TheAngryRaven in #221
- docs: slim CLAUDE.md to a map + rules, relocate deep detail to docs/ by @TheAngryRaven in #226
- Cache per-session historical weather in local IndexedDB by @TheAngryRaven in #228
- Add setup revision history panel by @TheAngryRaven in #224
- Treat the sample log as an ordinary seeded file by @TheAngryRaven in #225
- Attribute track submissions to accounts + basic admin user management by @TheAngryRaven in #227
- Surface the free-cloud-storage nudge at the submit button + landing card by @TheAngryRaven in #229
- Reorder track manager tabs: Tracks left, Courses right by @TheAngryRaven in #231
- Comped plans expire into a 60-day grace + a clear "logs trim in N days" warning by @TheAngryRaven in #230
- Landing: admin-only Admin link, USD price note, feature roadmap panel by @TheAngryRaven in #232
- Landing roadmap: add native app + video editor updates by @TheAngryRaven in #234
- Device settings: add Device Name field with "use profile name" shortcut by @TheAngryRaven in #233
- Post-session tire pressure & weight on the Notes tab by @TheAngryRaven in #235
- Add GoPro chunked-video playback & telemetry sync by @TheAngryRaven in #236
- Export video across GoPro chapters by @TheAngryRaven in #237
- Video: pick which recording to load from a messy multi-select by @TheAngryRaven in #238
- Self-host fonts so they render offline (offline-first fix) by @TheAngryRaven in #244
- Remove Labs feature; move Notes to the main toolbar by @TheAngryRaven in #239
- Mobile Pro panel: collapsible left column + relocatable Video/Mini-Map by @TheAngryRaven in #246
- Setups + Notes: responsive split panel and a pile of garage UX fixes by @TheAngryRaven in #245
- Vehicle history cards (shared, modular history-card module) by @TheAngryRaven in #247
- Rename phone Datalogger tool to Lap Timer + keep screen awake by @TheAngryRaven in #249
- Edit vehicle types: add a "Manage Vehicle Types" editor by @TheAngryRaven in #248
- Changelog: date 2.6.0 (2026-06-15) and move post-cut work to 2.7.0 by @TheAngryRaven in #250
- Release cut 2.7.0 by @TheAngryRaven in #251
- Beta - 2.7.0 sweeping UX changes by @TheAngryRaven in #223
Full Changelog: v2.6.0...v2.7.0
v2.6.0 localization and phone datalogger
What's Changed
- i18n / translation system: plan + Phase 0 (engine, landing & settings, 7 languages) by @TheAngryRaven in #197
- i18n Phase 1: translate the core in-session UI by @TheAngryRaven in #198
- i18n Phase 2: translate the live analysis views (map + pro graphs) by @TheAngryRaven in #199
- i18n Phase 3: translate the video player + overlay/export system by @TheAngryRaven in #200
- i18n Phase 4 (garage 1/2): drawer shell + Files + Vehicles by @TheAngryRaven in #202
- i18n Phase 4 (garage 2/3): Setups + Notes by @TheAngryRaven in #203
- i18n Phase 4 (garage 3/3): Device + weather by @TheAngryRaven in #204
- i18n (Phase 5): translate the tracks editor + community submission by @TheAngryRaven in #205
- i18n (Phase 6, slice 1): translate the Cloud Sync plugin UI by @TheAngryRaven in #207
- i18n (Phase 6, slice 2): plugin-local translations for the Tools plugin by @TheAngryRaven in #208
- docs: note deferred cloud-sync plugin-local i18n retrofit by @TheAngryRaven in #209
- fix(track-editor): make the start/finish line placeable on a new course by @TheAngryRaven in #210
- Phone Datalogger tool (.dovep) + plugin landing-page surface by @TheAngryRaven in #201
- i18n (Phase 7): translate the auth pages by @TheAngryRaven in #211
- i18n: translate the About and Supported Files dialogs by @TheAngryRaven in #212
- beta: pull AI coach from coach repo BETA branch (git dep) by @TheAngryRaven in #213
- i18n: translate the Credits, Contact and browser-compatibility dialogs by @TheAngryRaven in #214
- i18n: translate the file drop zone (Open a datalog) by @TheAngryRaven in #215
- i18n: translate the registration pricing section by @TheAngryRaven in #217
- i18n (Phase 8a): admin shell + Messages/Tracks/Tools/Banned IPs tabs by @TheAngryRaven in #216
- i18n (Phase 8b): translate admin Submissions + Courses tabs by @TheAngryRaven in #218
- Release prep: datalogger track-confirmation fix, cut 2.6.0, ship coach as published npm by @TheAngryRaven in #219
- Release prep: cut 2.6.0 and switch coach to published npm (re-land) by @TheAngryRaven in #220
- Beta by @TheAngryRaven in #206
Full Changelog: v2.5.1...v2.6.0
v2.5.1 - UX cleanup
What's Changed
- Landing page UX overhaul — simpler, bigger-button home screen by @TheAngryRaven in #193
- Mobile garage drawer + in-session header polish by @TheAngryRaven in #195
- Add log-type bubble to file browser rows by @TheAngryRaven in #196
- Release BETA → main: landing page UX overhaul + mobile garage polish by @TheAngryRaven in #194
Full Changelog: v2.5.0...v2.5.1