Skip to content

Commit bcb3062

Browse files
Merge pull request #284 from TheAngryRaven/BETA
v2.9.1
2 parents 3c60ceb + d3ec000 commit bcb3062

13 files changed

Lines changed: 92 additions & 25 deletions

File tree

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111
> from git history and grouped by theme rather than exhaustive per-commit
1212
> detail.
1313
14+
## [2.9.1] - unreleased
15+
16+
### Changed
17+
- **Landing hero wording.** Dropped "Online" from the main heading (it's an
18+
offline-first app), and added a line making the point directly: "Works entirely
19+
offline now that you've visited it!"
20+
- **Compatibility dialog is device-aware.** On the native app the "Browser
21+
Compatibility" button/title now reads **"Device Compatibility"**, and the list
22+
gained a **Wi-Fi Datalogger (MyChron)** row — shown as unavailable in the browser
23+
(it needs the native app) and supported on native.
24+
1425
## [2.9.0] - 2026-06-22
1526

1627
### Added

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,7 @@ the build script together, then re-run it and commit the regenerated artifacts.
570570
License notices for libxrk + TrackDataAnalysis ship at
571571
`src/lib/xrk/wasm/THIRD-PARTY-NOTICES.txt`.
572572

573+
573574
---
574575

575576
## Credits

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "doves-dataviewer",
33
"private": true,
4-
"version": "2.9.0",
4+
"version": "2.9.1",
55
"description": "Open-source, offline-first motorsport telemetry viewer (Dove's DataViewer / LapWing).",
66
"license": "GPL-3.0-or-later",
77
"author": "TheAngryRaven",

src/components/BrowserCompatDialog.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
DialogDescription,
1212
} from "@/components/ui/dialog";
1313
import { detectCapabilities, type CapabilityCheck } from "@/lib/browserCompat";
14+
import { isNativeApp } from "@/lib/platform";
1415

1516
const levelIcon = (level: CapabilityCheck["level"]) => {
1617
switch (level) {
@@ -27,6 +28,11 @@ export function BrowserCompatDialog() {
2728
const { t } = useTranslation("landing");
2829
const checks = useMemo(() => detectCapabilities(), []);
2930
const hasIssues = checks.some((c) => c.level !== "green");
31+
// On the native shell it's a device, not a browser — relabel accordingly.
32+
const native = isNativeApp();
33+
const triggerLabel = native ? t("browserCompat.triggerNative") : t("browserCompat.trigger");
34+
const titleLabel = native ? t("browserCompat.titleNative") : t("browserCompat.title");
35+
const descriptionLabel = native ? t("browserCompat.descriptionNative") : t("browserCompat.description");
3036

3137
return (
3238
<Dialog>
@@ -41,17 +47,17 @@ export function BrowserCompatDialog() {
4147
}
4248
>
4349
<Monitor className="w-3.5 h-3.5 mr-1.5" />
44-
{t("browserCompat.trigger")}
50+
{triggerLabel}
4551
</Button>
4652
</DialogTrigger>
4753
<DialogContent className="max-w-md">
4854
<DialogHeader>
4955
<DialogTitle className="flex items-center gap-2">
5056
<Monitor className="w-5 h-5" />
51-
{t("browserCompat.title")}
57+
{titleLabel}
5258
</DialogTitle>
5359
<DialogDescription>
54-
{t("browserCompat.description")}
60+
{descriptionLabel}
5561
</DialogDescription>
5662
</DialogHeader>
5763

src/components/LandingPage.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,9 @@ export function LandingPage({
146146
<p className="mx-auto max-w-xl text-sm text-muted-foreground">
147147
{t("landing:hero.subtitle")}
148148
</p>
149+
<p className="text-sm font-medium text-primary">
150+
{t("landing:hero.offlineNote")}
151+
</p>
149152
</div>
150153
)}
151154

src/lib/browserCompat.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
// module i18n-free. The ids match the `landing.browserCompat.features` /
44
// `.statuses` locale keys.
55

6+
import { isNativeApp } from "./platform";
7+
68
export type CapabilityLevel = "green" | "yellow" | "red";
79

810
export type FeatureId =
@@ -11,6 +13,7 @@ export type FeatureId =
1113
| "videoExport"
1214
| "audioInExport"
1315
| "bleDatalogger"
16+
| "wifiDatalogger"
1417
| "filePicker"
1518
| "pwaOffline";
1619

@@ -42,6 +45,9 @@ export function detectCapabilities(): CapabilityCheck[] {
4245
const hasFrameCallback = "requestVideoFrameCallback" in HTMLVideoElement.prototype;
4346
const hasFilePicker = "showOpenFilePicker" in window;
4447
const hasServiceWorker = "serviceWorker" in navigator;
48+
// Wi-Fi logger downloads (e.g. AiM MyChron) need raw sockets the browser can't
49+
// open — they only work in the native app.
50+
const native = isNativeApp();
4551

4652
return [
4753
{
@@ -69,6 +75,11 @@ export function detectCapabilities(): CapabilityCheck[] {
6975
status: hasBluetooth ? "supported" : "notAvailable",
7076
level: hasBluetooth ? "green" : "red",
7177
},
78+
{
79+
feature: "wifiDatalogger",
80+
status: native ? "supported" : "notAvailable",
81+
level: native ? "green" : "red",
82+
},
7283
{
7384
feature: "filePicker",
7485
status: hasFilePicker ? "native" : "fileInputFallback",

src/locales/de/landing.json

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
"_machine": true,
33
"tagline": "Telemetrie-Datenbetrachter",
44
"hero": {
5-
"title": "Kostenloser Online-Telemetrie-Viewer für VBO, MoTeC, AiM & NMEA",
6-
"subtitle": "Lade ein Datalog und erkunde deine Runden – Karten, Diagramme, Sektoren und Videosynchronisation. Alles läuft lokal in deinem Browser. Kein Upload, kein Konto erforderlich."
5+
"title": "Kostenloser Telemetrie-Viewer für VBO, MoTeC, AiM & NMEA",
6+
"subtitle": "Lade ein Datalog und erkunde deine Runden – Karten, Diagramme, Sektoren und Videosynchronisation. Alles läuft lokal in deinem Browser. Kein Upload, kein Konto erforderlich.",
7+
"offlineNote": "Funktioniert jetzt, wo du es besucht hast, komplett offline!"
78
},
89
"tiles": {
910
"sample": {
@@ -213,6 +214,7 @@
213214
"videoExport": "Videoexport (MP4)",
214215
"audioInExport": "Audio im Export",
215216
"bleDatalogger": "BLE-Datenlogger",
217+
"wifiDatalogger": "WLAN-Datenlogger (MyChron)",
216218
"filePicker": "Dateiauswahl",
217219
"pwaOffline": "PWA / Offline"
218220
},
@@ -226,7 +228,10 @@
226228
"silentExports": "Stumme Exporte",
227229
"native": "Nativ",
228230
"fileInputFallback": "Datei-Eingabe-Fallback"
229-
}
231+
},
232+
"triggerNative": "Gerätekompatibilität",
233+
"titleNative": "Gerätekompatibilität",
234+
"descriptionNative": "Funktionsunterstützung auf diesem Gerät."
230235
},
231236
"fileImport": {
232237
"title": "Datalog öffnen",

src/locales/en/landing.json

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
{
22
"tagline": "Telemetry Data Viewer",
33
"hero": {
4-
"title": "Free Online VBO, MoTeC, AiM & NMEA Telemetry Viewer",
5-
"subtitle": "Drop in a datalog and explore your laps — maps, charts, sectors and video sync. Everything runs locally in your browser. No upload, no account required."
4+
"title": "Free VBO, MoTeC, AiM & NMEA Telemetry Viewer",
5+
"subtitle": "Drop in a datalog and explore your laps — maps, charts, sectors and video sync. Everything runs locally in your browser. No upload, no account required.",
6+
"offlineNote": "Works entirely offline now that you’ve visited it!"
67
},
78
"tiles": {
89
"sample": {
@@ -168,6 +169,7 @@
168169
"videoExport": "Video Export (MP4)",
169170
"audioInExport": "Audio in Export",
170171
"bleDatalogger": "BLE Datalogger",
172+
"wifiDatalogger": "Wi-Fi Datalogger (MyChron)",
171173
"filePicker": "File Picker",
172174
"pwaOffline": "PWA / Offline"
173175
},
@@ -181,7 +183,10 @@
181183
"silentExports": "Silent exports",
182184
"native": "Native",
183185
"fileInputFallback": "File input fallback"
184-
}
186+
},
187+
"triggerNative": "Device Compatibility",
188+
"titleNative": "Device Compatibility",
189+
"descriptionNative": "Feature support on this device."
185190
},
186191
"supportedFiles": {
187192
"trigger": "Supported Files",

src/locales/es/landing.json

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
"_machine": true,
33
"tagline": "Visor de datos de telemetría",
44
"hero": {
5-
"title": "Visor de telemetría VBO, MoTeC, AiM y NMEA gratis en línea",
6-
"subtitle": "Carga un registro de datos y explora tus vueltas: mapas, gráficos, sectores y sincronización de vídeo. Todo funciona localmente en tu navegador. Sin subir nada, sin necesidad de cuenta."
5+
"title": "Visor de telemetría VBO, MoTeC, AiM y NMEA gratis",
6+
"subtitle": "Carga un registro de datos y explora tus vueltas: mapas, gráficos, sectores y sincronización de vídeo. Todo funciona localmente en tu navegador. Sin subir nada, sin necesidad de cuenta.",
7+
"offlineNote": "¡Funciona completamente sin conexión ahora que lo has visitado!"
78
},
89
"tiles": {
910
"sample": {
@@ -213,6 +214,7 @@
213214
"videoExport": "Exportación de vídeo (MP4)",
214215
"audioInExport": "Audio en la exportación",
215216
"bleDatalogger": "Datalogger BLE",
217+
"wifiDatalogger": "Registrador por Wi-Fi (MyChron)",
216218
"filePicker": "Selector de archivos",
217219
"pwaOffline": "PWA / Sin conexión"
218220
},
@@ -226,7 +228,10 @@
226228
"silentExports": "Exportaciones sin audio",
227229
"native": "Nativo",
228230
"fileInputFallback": "Alternativa de entrada de archivo"
229-
}
231+
},
232+
"triggerNative": "Compatibilidad del dispositivo",
233+
"titleNative": "Compatibilidad del dispositivo",
234+
"descriptionNative": "Compatibilidad de funciones en este dispositivo."
230235
},
231236
"fileImport": {
232237
"title": "Abrir un datalog",

src/locales/fr/landing.json

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
"_machine": true,
33
"tagline": "Visualiseur de données télémétriques",
44
"hero": {
5-
"title": "Visualiseur de télémétrie VBO, MoTeC, AiM et NMEA gratuit en ligne",
6-
"subtitle": "Importez un enregistrement et explorez vos tours : cartes, graphiques, secteurs et synchronisation vidéo. Tout fonctionne localement dans votre navigateur. Aucun envoi, aucun compte requis."
5+
"title": "Visualiseur de télémétrie VBO, MoTeC, AiM et NMEA gratuit",
6+
"subtitle": "Importez un enregistrement et explorez vos tours : cartes, graphiques, secteurs et synchronisation vidéo. Tout fonctionne localement dans votre navigateur. Aucun envoi, aucun compte requis.",
7+
"offlineNote": "Fonctionne entièrement hors ligne maintenant que vous l’avez visité !"
78
},
89
"tiles": {
910
"sample": {
@@ -213,6 +214,7 @@
213214
"videoExport": "Export vidéo (MP4)",
214215
"audioInExport": "Audio dans l'export",
215216
"bleDatalogger": "Datalogger BLE",
217+
"wifiDatalogger": "Enregistreur Wi-Fi (MyChron)",
216218
"filePicker": "Sélecteur de fichiers",
217219
"pwaOffline": "PWA / Hors ligne"
218220
},
@@ -226,7 +228,10 @@
226228
"silentExports": "Exports muets",
227229
"native": "Natif",
228230
"fileInputFallback": "Repli sur champ de fichier"
229-
}
231+
},
232+
"triggerNative": "Compatibilité de l’appareil",
233+
"titleNative": "Compatibilité de l’appareil",
234+
"descriptionNative": "Prise en charge des fonctionnalités sur cet appareil."
230235
},
231236
"fileImport": {
232237
"title": "Ouvrir un datalog",

0 commit comments

Comments
 (0)