diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e2caf13..004b4162 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 > from git history and grouped by theme rather than exhaustive per-commit > detail. -## [2.8.1] - unreleased +## [2.9.0] - 2026-06-22 ### Added - **Password strength rules + a realtime checker on sign-up.** The registration @@ -67,6 +67,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 screen) instead of always jumping to the home screen. ### Changed +- **Open-source links moved into About.** The GitHub repository links left the + landing page and now live in the About dialog under "Free & Open Source", above + the feature list. The About feature list was also refreshed with the headline + additions from the last month (7 languages, native Android app + MyChron Wi-Fi + download, phone-as-logger GPS timing, optional cloud sync, AI driving coach). - **Logger picker polish.** Real product photos replace the placeholder art, and the picker is now mobile-friendly: compact horizontal cards on phones (instead of full-height ones that filled the screen), a height cap so it scrolls within the diff --git a/package.json b/package.json index 8fe06bcb..bfbb1644 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "doves-dataviewer", "private": true, - "version": "2.8.1", + "version": "2.9.0", "description": "Open-source, offline-first motorsport telemetry viewer (Dove's DataViewer / LapWing).", "license": "GPL-3.0-or-later", "author": "TheAngryRaven", diff --git a/src/components/AboutDialog.tsx b/src/components/AboutDialog.tsx index 01eb0217..7e0b93cd 100644 --- a/src/components/AboutDialog.tsx +++ b/src/components/AboutDialog.tsx @@ -1,14 +1,24 @@ -import { Info } from "lucide-react"; +import { Info, Github } from "lucide-react"; import { useTranslation, Trans } from "react-i18next"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; +import { interceptExternal } from "@/lib/platform"; // Section ids — order is the display order; the heading/body text lives in the // `landing` locale (about.sections.). const SECTION_IDS = ["offline", "data", "community", "oss"] as const; +// Open-source repositories — shown under the "Free & Open Source" section. Repo +// names are proper nouns, intentionally not translated. +const GITHUB_LINKS: Array<{ href: string; label: string }> = [ + { href: "https://github.com/TheAngryRaven/DovesDataViewer", label: "DataViewer" }, + { href: "https://github.com/TheAngryRaven/DovesDataLogger", label: "Datalogger" }, + { href: "https://github.com/TheAngryRaven/DovesLapTimer", label: "Timer Library" }, + { href: "https://github.com/TheAngryRaven/DataViewer_coach", label: "Coach Plugin" }, +]; + export function AboutDialog() { const { t } = useTranslation("landing"); const features = t("about.features", { returnObjects: true }) as string[]; @@ -39,6 +49,23 @@ export function AboutDialog() { ))} + {/* Source repos — sits with the open-source section, above the feature list. */} +
+ {GITHUB_LINKS.map((link) => ( + interceptExternal(e, link.href)} + className="inline-flex items-center gap-1.5 text-muted-foreground hover:text-foreground transition-colors" + > + + {link.label} + + ))} +
+

{t("about.featuresHeading")}

diff --git a/src/components/LandingPage.tsx b/src/components/LandingPage.tsx index 3724cc53..2fcc6e60 100644 --- a/src/components/LandingPage.tsx +++ b/src/components/LandingPage.tsx @@ -1,6 +1,5 @@ import { Fragment } from "react"; import { - Github, Heart, Shield, Play, @@ -52,13 +51,6 @@ interface LandingPageProps { enableCloud: boolean; } -const GITHUB_LINKS: Array<{ href: string; label: string }> = [ - { href: "https://github.com/TheAngryRaven/DovesDataViewer", label: "DataViewer" }, - { href: "https://github.com/TheAngryRaven/DovesDataLogger", label: "Datalogger" }, - { href: "https://github.com/TheAngryRaven/DovesLapTimer", label: "Timer Library" }, - { href: "https://github.com/TheAngryRaven/DataViewer_coach", label: "Coach Plugin" }, -]; - /** * The pre-data-load home screen shown by Index.tsx when no telemetry file is * loaded. The layout is deliberately simple: a large drag-and-drop dropzone @@ -283,25 +275,6 @@ export function LandingPage({
- {/* Open-source repos — web only; the native shell drops outbound GitHub links. */} - {!native && ( -
- {GITHUB_LINKS.map((link) => ( - interceptExternal(e, link.href)} - className="inline-flex items-center gap-2 text-muted-foreground hover:text-foreground transition-colors" - > - - {link.label} - - ))} -
- )} - {enableAdmin && isAdmin && (