Skip to content

Release BETA → main: landing page UX overhaul + mobile garage polish#194

Merged
TheAngryRaven merged 10 commits into
mainfrom
BETA
Jun 13, 2026
Merged

Release BETA → main: landing page UX overhaul + mobile garage polish#194
TheAngryRaven merged 10 commits into
mainfrom
BETA

Conversation

@TheAngryRaven

Copy link
Copy Markdown
Owner

Promotes the current BETA line to main. UX/layout work only — no color or design-token changes, and the in-session app view is untouched apart from the mobile header tweaks called out below.

Landing page UX overhaul (2.5.1)

The home screen was a cramped dropzone with a cluster of small buttons bundled inside it. Reworked into a simple, Bambu-Studio-style layout:

  • One clear primary actionFileImport is now a single large drag-and-drop / click-to-browse zone.
  • Big, scannable action tiles (new reusable ActionTile): load sample data (featured), browse saved files, download from logger (Bluetooth), manage tracks, build your own logger.
  • DataloggerDownload gains a renderTrigger prop so it drives a tile while keeping its transfer modal — still lazy, so the BLE module stays off the initial bundle.
  • Pricing cards removed from the landing page — plan selection already lives on the registration page (PricingCards variant="register"). Bonus: drops Supabase off the offline-first landing payload entirely.
  • Reference dialogs and resource links tidied into clear rows; every prior feature remains reachable.

Mobile garage & header polish

  • Full-screen garage on mobile. The Garage/Device drawer now covers the full viewport on phones (w-full), staying at half width on sm+ — much easier to use on a small screen.
  • Reachable Garage button. In the loaded-session header, the play/pause button is hidden on mobile to free up room so the Garage button stays reachable when space is tight.
  • Consolidated course control. The separate Track : Course label + edit button are merged into a single control using a clearer route icon to represent a race course (shown at every screen size), with the current Track : Course as its label on wider screens and a title tooltip on mobile.

Checks

  • npm run lint
  • npm run typecheck
  • npm run test:run ✅ (109 files, 1497 tests)
  • npm run build ✅ (BLE stays in its own lazy chunk; Supabase stays a separate vendor chunk)

CHANGELOG: 2.5.1 section for the landing overhaul; the mobile polish sits under [Unreleased] pending the next version cut.

Draft for review — opened against main as the release rollup. The mobile garage/header polish is described here as part of the promotion (it lands on BETA ahead of merge).

https://claude.ai/code/session_014P9qC1xKvJUajTTdHuAh7P


Generated by Claude Code

claude and others added 4 commits June 13, 2026 05:08
The home screen bundled every action (upload, browse, BLE download, manage
tracks) into the file dropzone as a cluster of small outline buttons, which
read as cramped and unhelpful. Rework it into a Bambu-Studio-style layout:

- FileImport is now just one large drag-and-drop / click-to-browse zone — the
  single primary action. The secondary buttons it used to host are gone.
- Every other action is a big, scannable ActionTile (icon + title + one-line
  description): load sample data (featured), browse saved files, download from
  the logger over Bluetooth, manage tracks, and build your own logger.
- New reusable ActionTile presentational component keeps all tiles consistent
  (button or external-link variants, optional featured accent + spinner).
- DataloggerDownload gains a renderTrigger prop so it can be driven from a tile
  while still owning its transfer modal; it stays lazy so the BLE module is off
  the initial bundle.
- Pricing cards are removed from the landing page — plan selection already lives
  on the registration page. This also drops Supabase off the offline-first
  landing payload entirely.
- Reference dialogs (supported files, about, weather, browser compat, contact)
  and resource links are tidied into clear rows.

Colors and design tokens are unchanged — this is a UX/layout pass, not a
restyle. The in-session app view is untouched.
Bump package + lockfile to 2.5.1 and move the landing-page UX overhaul from
[Unreleased] to the 2.5.1 changelog section.
Landing page UX overhaul — simpler, bigger-button home screen
- FileManagerDrawer covers the full screen on mobile (w-full), staying at half
  width on sm+ — easier to use on a phone.
- Hide the play/pause button on mobile in the loaded-session header so the
  Garage button stays reachable when space is tight.
- Consolidate the compact track/course label + edit button into a single course
  control: a route icon (shown at every size, a clearer race-course glyph) with
  the current track : course as the label on wider screens and a title tooltip.
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 13, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
dovesdataviewer 411337f Commit Preview URL

Branch Preview URL
Jun 13 2026, 05:56 AM

@supabase

supabase Bot commented Jun 13, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project tdxloldxzvnzdivdazzd because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@github-actions

github-actions Bot commented Jun 13, 2026

Copy link
Copy Markdown

Coverage Summary

Lines: 58.45% (5209/8911) · Statements: 57.49% · Functions: 55.27% · Branches: 52.67%

Per-file coverage
File Lines Functions Branches
src/components/map/positionArrowMarker.ts 0% 0% 0%
src/components/video-overlays/dataSourceResolver.ts 85.07% 71.42% 80.82%
src/components/video-overlays/overlayUtils.ts 100% 100% 100%
src/components/video-overlays/registry.ts 100% 100% 100%
src/components/video-overlays/sectorUtils.ts 94.73% 100% 84.37%
src/components/video-overlays/themes.ts 100% 100% 100%
src/components/video-overlays/types.ts 100% 100% 100%
src/hooks/use-mobile.tsx 0% 0% 100%
src/hooks/use-toast.ts 0% 0% 0%
src/hooks/useAuth.ts 100% 100% 100%
src/hooks/useDataLoader.ts 15.66% 18.18% 16%
src/hooks/useDocumentHead.ts 0% 0% 0%
src/hooks/useEngineManager.ts 0% 0% 0%
src/hooks/useFileManager.ts 0% 0% 0%
src/hooks/useFirmwareUpdate.ts 0% 0% 0%
src/hooks/useKartManager.ts 100% 100% 100%
src/hooks/useLapManagement.ts 0% 0% 0%
src/hooks/useLapOverlays.ts 0% 0% 0%
src/hooks/useLapSnapshots.ts 0% 0% 0%
src/hooks/useNoteManager.ts 0% 0% 0%
src/hooks/useOnlineStatus.ts 0% 0% 0%
src/hooks/usePlayback.ts 0% 0% 0%
src/hooks/useReferenceLap.ts 0% 0% 0%
src/hooks/useSessionData.ts 0% 0% 0%
src/hooks/useSessionMetadata.ts 0% 0% 0%
src/hooks/useSettings.ts 0% 0% 0%
src/hooks/useSetupManager.ts 0% 0% 100%
src/hooks/useStripePrices.ts 0% 0% 0%
src/hooks/useSubscription.ts 0% 0% 0%
src/hooks/useTemplateManager.ts 0% 0% 0%
src/hooks/useTrackEditorForm.ts 0% 0% 0%
src/hooks/useVehicleManager.ts 0% 0% 100%
src/hooks/useVideoSync.ts 0% 0% 0%
src/hooks/useWaybackImagery.ts 0% 0% 0%
src/integrations/lovable/index.ts 0% 0% 0%
src/lib/test/idb.ts 100% 100% 100%
src/lib/aimParser.ts 95.85% 100% 81.46%
src/lib/alfanoParser.ts 83.22% 100% 61.9%
src/lib/billing.ts 96.55% 100% 97.36%
src/lib/billingClient.ts 0% 0% 0%
src/lib/ble/test/mockBle.ts 96% 90% 50%
src/lib/ble/battery.ts 93.33% 100% 87.5%
src/lib/ble/connection.ts 0% 0% 0%
src/lib/ble/dfu/dfuPackage.ts 96.66% 100% 71.87%
src/lib/ble/dfu/dfuTypes.ts 100% 100% 100%
src/lib/ble/dfu/firmwareManifest.ts 96.92% 92.85% 93.18%
src/lib/ble/dfu/index.ts 100% 100% 100%
src/lib/ble/dfu/version.ts 96.77% 100% 83.33%
src/lib/ble/fileTransfer.ts 90.69% 95% 72.91%
src/lib/ble/firmwareCrc.ts 100% 100% 100%
src/lib/ble/firmwareUpload.ts 90.4% 87.5% 84.31%
src/lib/ble/format.ts 50% 100% 66.66%
src/lib/ble/index.ts 100% 100% 100%
src/lib/ble/internal.ts 100% 100% 50%
src/lib/ble/settings.ts 93.6% 100% 85.29%
src/lib/ble/trackSync.ts 89.69% 90.9% 70.96%
src/lib/ble/types.ts 100% 100% 100%
src/lib/bleDatalogger.ts 100% 100% 100%
src/lib/brakingZones.ts 97.14% 100% 86.11%
src/lib/browserCompat.ts 0% 0% 0%
src/lib/buildInfo.ts 100% 100% 100%
src/lib/canvas2d.ts 100% 100% 91.66%
src/lib/channels.ts 100% 100% 84.61%
src/lib/chartAxis.ts 98% 100% 82.92%
src/lib/chartColors.ts 100% 100% 100%
src/lib/chartUtils.ts 100% 100% 97.05%
src/lib/courseDetection.ts 97.16% 100% 80.23%
src/lib/courseSectors.ts 100% 100% 94.59%
src/lib/datalogParser.ts 83.56% 80% 81.81%
src/lib/db/index.ts 0% 0% 0%
src/lib/db/supabaseAdapter.ts 0% 0% 0%
src/lib/db/types.ts 100% 100% 100%
src/lib/dbUtils.ts 75.75% 80% 16.48%
src/lib/debugConsole.ts 57.74% 61.11% 47.72%
src/lib/deviceSettingsSchema.ts 93.33% 100% 96.42%
src/lib/deviceTrackSync.ts 100% 100% 100%
src/lib/doveParser.ts 89.6% 72.72% 73.63%
src/lib/dovexParser.ts 87.5% 84.61% 69.09%
src/lib/emailValidation.ts 100% 100% 100%
src/lib/engineStorage.ts 100% 75% 100%
src/lib/engineUtils.ts 100% 100% 91.66%
src/lib/fieldResolver.ts 100% 100% 83.33%
src/lib/fileBrowserTree.ts 98.87% 97.5% 88.23%
src/lib/fileLoadingState.ts 100% 100% 100%
src/lib/fileStorage.ts 82.6% 78.12% 72.22%
src/lib/garageEvents.ts 100% 100% 100%
src/lib/gforceCalculation.ts 100% 100% 97.22%
src/lib/ggDiagram.ts 100% 100% 94.73%
src/lib/graphPrefsStorage.ts 100% 100% 100%
src/lib/iracingParser.ts 91.93% 80% 76.47%
src/lib/kartStorage.ts 100% 75% 100%
src/lib/lapAlignment.ts 100% 80% 76.92%
src/lib/lapCalculation.ts 96.31% 100% 90%
src/lib/lapDelta.ts 99.2% 100% 82.08%
src/lib/lapOverlays.ts 100% 100% 86%
src/lib/lapSnapshot.ts 100% 100% 88.46%
src/lib/lapSnapshotStorage.ts 100% 83.33% 100%
src/lib/logFileType.ts 100% 100% 100%
src/lib/mapMarker.ts 100% 100% 100%
src/lib/motecParser.ts 89.61% 81.48% 55.71%
src/lib/nmeaParser.ts 85.62% 92.85% 71.22%
src/lib/noteStorage.ts 100% 80% 100%
src/lib/overlayCanvasRenderer.ts 0% 0% 0%
src/lib/parserUtils.ts 100% 100% 98.52%
src/lib/pendingCheckout.ts 58.82% 25% 100%
src/lib/profanity.ts 100% 100% 75%
src/lib/referenceUtils.ts 100% 100% 91.11%
src/lib/satelliteImagery.ts 100% 100% 90%
src/lib/setupRevision.ts 100% 100% 94.11%
src/lib/setupRevisionStorage.ts 84.48% 78.26% 36.84%
src/lib/setupStatus.ts 100% 100% 100%
src/lib/setupStorage.ts 81.35% 58.62% 100%
src/lib/speedBounds.ts 94.28% 66.66% 87.17%
src/lib/speedEvents.ts 86.56% 100% 76%
src/lib/speedHeatmap.ts 100% 100% 100%
src/lib/submittedTracksStorage.ts 0% 0% 0%
src/lib/templateStorage.ts 92.79% 68.75% 100%
src/lib/trackStorage.ts 16.4% 28.3% 18.18%
src/lib/trackSubmission.ts 100% 100% 95.91%
src/lib/trackUtils.ts 100% 100% 100%
src/lib/ubxParser.ts 99% 100% 89.58%
src/lib/units.ts 100% 100% 100%
src/lib/utils.ts 100% 100% 100%
src/lib/vboParser.ts 90.66% 100% 71.59%
src/lib/vehicleStorage.ts 100% 75% 100%
src/lib/videoExport.ts 0% 0% 0%
src/lib/videoExportTarget.ts 100% 100% 84.61%
src/lib/videoFileStorage.ts 100% 76% 61.11%
src/lib/videoStorage.ts 100% 76.92% 77.77%
src/lib/weatherService.ts 23.8% 35.29% 25.89%
src/lib/xrk/xrkClient.ts 3.57% 0% 0%
src/lib/xrk/xrkConfig.ts 100% 100% 100%
src/lib/xrk/xrkImporter.ts 70% 75% 80%
src/lib/xrk/xrkMapping.ts 98.7% 100% 82.81%
src/lib/xrk/xrkResample.ts 100% 100% 90.9%
src/lib/xrk/xrkTypes.ts 100% 100% 100%
src/lib/xrk/xrkWorker.ts 0% 0% 0%
src/plugins/cloud-sync/accountDeletion.ts 100% 100% 100%
src/plugins/cloud-sync/accountExport.ts 0% 0% 0%
src/plugins/cloud-sync/activeUser.ts 100% 100% 100%
src/plugins/cloud-sync/autoSync.ts 0% 0% 0%
src/plugins/cloud-sync/cloudClient.ts 69.23% 42.85% 87.5%
src/plugins/cloud-sync/CloudLogsPanel.tsx 0% 0% 0%
src/plugins/cloud-sync/DataPrivacyPanel.tsx 0% 0% 0%
src/plugins/cloud-sync/exportManifest.ts 100% 100% 100%
src/plugins/cloud-sync/FileDeleteToggle.tsx 0% 0% 0%
src/plugins/cloud-sync/fileSync.ts 100% 100% 100%
src/plugins/cloud-sync/FileSyncToggle.tsx 0% 0% 0%
src/plugins/cloud-sync/index.ts 0% 0% 0%
src/plugins/cloud-sync/LapSnapshotsPanel.tsx 0% 0% 0%
src/plugins/cloud-sync/localUsage.ts 100% 100% 75%
src/plugins/cloud-sync/merge.ts 100% 100% 100%
src/plugins/cloud-sync/pendingSync.ts 100% 100% 100%
src/plugins/cloud-sync/profile.ts 100% 100% 100%
src/plugins/cloud-sync/setupRevisionTombstones.ts 100% 100% 83.33%
src/plugins/cloud-sync/snapshotSync.ts 97.22% 87.5% 75%
src/plugins/cloud-sync/snapshotTombstones.ts 100% 100% 100%
src/plugins/cloud-sync/StoragePanel.tsx 0% 0% 0%
src/plugins/cloud-sync/storageTypes.ts 100% 100% 100%
src/plugins/cloud-sync/storeAccessors.ts 100% 100% 90%
src/plugins/cloud-sync/syncEngine.ts 98.9% 95% 80%
src/plugins/cloud-sync/syncStores.ts 100% 100% 100%
src/plugins/fileSources.ts 0% 0% 100%
src/plugins/index.ts 0% 0% 0%
src/plugins/mounts.ts 71.42% 75% 100%
src/plugins/panels.ts 75% 83.33% 100%
src/plugins/PluginMount.tsx 0% 0% 0%
src/plugins/PluginPanelHost.tsx 0% 0% 0%
src/plugins/registry.ts 77.27% 50% 100%
src/plugins/storage.ts 90.32% 70.83% 66.66%
src/plugins/tools/index.ts 0% 0% 100%
src/plugins/tools/seat-position/model.ts 100% 100% 60%
src/plugins/tools/seat-position/SeatDiagram.tsx 0% 0% 0%
src/plugins/tools/seat-position/SeatPositionTool.tsx 0% 0% 0%
src/plugins/tools/toolList.ts 0% 0% 100%
src/plugins/tools/ToolsPanel.tsx 0% 0% 0%
src/plugins/types.ts 100% 100% 100%
src/types/racing.ts 0% 0% 0%

claude and others added 3 commits June 13, 2026 05:30
Reverse the mobile play/pause hide — there's room to keep it at all sizes — and
show the consolidated course control's track : course label from tablet (md) up
rather than desktop-only.
Resizable dividers (left/right split, InfoBox/MiniMap split, video panel)
stopped tracking a few pixels into a touch drag. The shadcn ResizableHandle is a
1px line with only a ~4px invisible grab strip, while react-resizable-panels
extends the drag-start hit margin 15px over the neighbouring chart/map. Only the
handle element gets touch-action:none, so a finger landing just off the divider
started the resize on a neighbour element; after the touch-slop the browser
reclaimed the gesture as a scroll (pointercancel) and the drag died.

Widen the touch-action:none grab strip to ~16px and shrink the library's
drag-start margin to match it, so every started drag begins on the handle
itself and touch drags track all the way. Mirrors the existing GraphResizeHandle
fix for the same root cause.
Mobile garage drawer + in-session header polish
@TheAngryRaven TheAngryRaven marked this pull request as ready for review June 13, 2026 05:43
claude and others added 3 commits June 13, 2026 05:49
The browser shows each session by date/time, so the file format wasn't visible
anywhere. Add a small type pill (Dove, Dovex, XRK, XRZ, iRacing, VBO, MoTeC,
UBX, NMEA, CSV, …) derived from the file extension — we don't persist the
detected format, so the extension is the source of truth.

- lib/logFileType.ts: pure extension → label mapping (unit-tested).
- components/FileTypeBadge.tsx: reusable pill, renders nothing without an extension.
- Wired into FilesTab local + cloud rows and the Profile Cloud logs panel.
The 2.5.1 beta version was already cut, so these changes belong under it rather
than a new [Unreleased] block. Merge the entries into ## [2.5.1] - unreleased
and add a CLAUDE.md note: once a beta version is picked, keep it as the heading
marked "unreleased" and accumulate changes there — no per-commit patch bumps.
…ubble

Add log-type bubble to file browser rows
@TheAngryRaven TheAngryRaven merged commit f7759ab into main Jun 13, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants