Skip to content

Add snapshot quota meter + "local is free" hint to the Storage section#80

Merged
TheAngryRaven merged 1 commit into
BETAfrom
claude/lap-snapshot-feature-VBWDI
May 28, 2026
Merged

Add snapshot quota meter + "local is free" hint to the Storage section#80
TheAngryRaven merged 1 commit into
BETAfrom
claude/lap-snapshot-feature-VBWDI

Conversation

@TheAngryRaven
Copy link
Copy Markdown
Owner

Summary

The Profile → Storage section showed byte meters for documents + logs but had no visible indicator for the snapshot count quota (free 5 / plus 10 / premium 20 / pro 50). Users couldn't tell how close they were to the limit until a save was rejected. Also, with byte + count limits sitting side by side, it wasn't obvious that none of them apply on-device.

Changes

  • New "Lap snapshots" meter beneath the byte meters in the Storage section, count-based (used / limit), backed by the existing snapshot_usage() RPC via fetchSnapshotUsage(). Fetch is best-effort — a failure doesn't hide the documents/logs meters above.
  • New CountMeter component alongside the existing byte Meter (snapshots are a count quota, not bytes).
  • Inline "Local storage is always free." subtext next to the Storage header label, so the byte + count limits read clearly as cloud-only.

Files

src/plugins/cloud-sync/StoragePanel.tsx.

Test plan

  • npm run lint, npm run typecheck, npm run test:run (737 passing), npm run build all green
  • Signed-in Profile → Storage shows the three meters (Documents · Logs · Lap snapshots) with the "Local storage is always free." hint next to the header
  • Saving a new snapshot bumps the snapshot meter's count; deleting one in Profile → Lap snapshots decreases it
  • At-limit user (e.g. free × 5 snapshots) sees 5 / 5 filled but not over; if quota is ever exceeded the bar + counter go destructive

https://claude.ai/code/session_01L9h3QDcyTEXmVe6tWMio6T


Generated by Claude Code

The Profile-tab Storage section showed bytes for documents + logs but had no
sign of the snapshot count quota (free 5 / plus 10 / premium 20 / pro 50), so
users couldn't see how close they were to the limit before a save was rejected.

- Add a count-based meter for "Lap snapshots" beneath the byte meters, fetched
  from the snapshot_usage RPC (best-effort, doesn't hide the byte meters if it
  fails).
- Add inline "Local storage is always free." subtext next to the Storage label
  so the byte+count limits read as cloud-only.

https://claude.ai/code/session_01L9h3QDcyTEXmVe6tWMio6T
@github-actions
Copy link
Copy Markdown

Coverage Summary

Lines: 35.5% (2397/6752) · Statements: 34.53% · Functions: 28.92% · Branches: 36.07%

Per-file coverage
File Lines Functions Branches
src/components/video-overlays/dataSourceResolver.ts 84.12% 70% 79.41%
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 0% 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 0% 0% 0%
src/hooks/useDocumentHead.ts 0% 0% 0%
src/hooks/useEngineManager.ts 0% 0% 0%
src/hooks/useFileManager.ts 0% 0% 0%
src/hooks/useKartManager.ts 100% 100% 100%
src/hooks/useLapManagement.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/integrations/lovable/index.ts 0% 0% 0%
src/lib/aimParser.ts 87.96% 100% 69.13%
src/lib/alfanoParser.ts 80.46% 100% 57.48%
src/lib/billing.ts 94.73% 100% 96.29%
src/lib/billingClient.ts 0% 0% 0%
src/lib/ble/test/mockBle.ts 100% 100% 50%
src/lib/ble/battery.ts 93.33% 100% 87.5%
src/lib/ble/connection.ts 0% 0% 0%
src/lib/ble/fileTransfer.ts 90.69% 95% 72.91%
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/channels.ts 100% 100% 84.61%
src/lib/chartColors.ts 100% 100% 100%
src/lib/chartUtils.ts 0% 0% 0%
src/lib/courseDetection.ts 99.01% 100% 84.14%
src/lib/datalogParser.ts 18.51% 50% 17.39%
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 3.12% 0% 0%
src/lib/deviceSettingsSchema.ts 93.33% 100% 96.42%
src/lib/deviceTrackSync.ts 100% 100% 90%
src/lib/doveParser.ts 89.6% 72.72% 73.63%
src/lib/dovexParser.ts 76.56% 76.92% 47.27%
src/lib/emailValidation.ts 100% 100% 100%
src/lib/engineStorage.ts 0% 0% 100%
src/lib/engineUtils.ts 100% 100% 91.66%
src/lib/fieldResolver.ts 100% 100% 83.33%
src/lib/fileStorage.ts 0% 0% 0%
src/lib/garageEvents.ts 100% 100% 100%
src/lib/gforceCalculation.ts 100% 100% 100%
src/lib/graphPrefsStorage.ts 0% 0% 0%
src/lib/kartStorage.ts 0% 0% 0%
src/lib/lapCalculation.ts 96.12% 100% 90.32%
src/lib/lapDelta.ts 98.96% 100% 82.35%
src/lib/lapSnapshot.ts 100% 100% 87.5%
src/lib/lapSnapshotStorage.ts 0% 0% 0%
src/lib/motecParser.ts 4.29% 3.44% 0.69%
src/lib/nmeaParser.ts 85.62% 92.85% 71.22%
src/lib/noteStorage.ts 0% 0% 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/referenceUtils.ts 100% 100% 89.28%
src/lib/setupStorage.ts 0% 0% 0%
src/lib/speedBounds.ts 94.11% 66.66% 89.18%
src/lib/speedEvents.ts 86.56% 100% 76%
src/lib/templateStorage.ts 0% 0% 0%
src/lib/trackStorage.ts 3.33% 0% 0%
src/lib/trackUtils.ts 100% 100% 100%
src/lib/ubxParser.ts 5% 0% 0%
src/lib/utils.ts 100% 100% 100%
src/lib/vboParser.ts 83.2% 100% 60.97%
src/lib/vehicleStorage.ts 0% 0% 0%
src/lib/videoExport.ts 0% 0% 0%
src/lib/videoFileStorage.ts 0% 0% 0%
src/lib/videoStorage.ts 0% 0% 0%
src/lib/weatherService.ts 0% 0% 0%
src/plugins/cloud-sync/accountDeletion.ts 0% 0% 0%
src/plugins/cloud-sync/accountExport.ts 0% 0% 0%
src/plugins/cloud-sync/autoSync.ts 0% 0% 0%
src/plugins/cloud-sync/cloudClient.ts 0% 0% 0%
src/plugins/cloud-sync/CloudFilesSection.tsx 0% 0% 0%
src/plugins/cloud-sync/CloudLogsPanel.tsx 0% 0% 0%
src/plugins/cloud-sync/CloudSyncPanel.tsx 0% 0% 0%
src/plugins/cloud-sync/DataPrivacyPanel.tsx 0% 0% 0%
src/plugins/cloud-sync/DownloadAllCloudLogs.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 68.42% 38.46% 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/merge.ts 90.9% 66.66% 100%
src/plugins/cloud-sync/pendingSync.ts 0% 0% 0%
src/plugins/cloud-sync/profile.ts 0% 0% 0%
src/plugins/cloud-sync/snapshotSync.ts 0% 0% 0%
src/plugins/cloud-sync/snapshotTombstones.ts 0% 0% 0%
src/plugins/cloud-sync/StoragePanel.tsx 0% 0% 0%
src/plugins/cloud-sync/storageTypes.ts 100% 100% 100%
src/plugins/cloud-sync/storeAccessors.ts 0% 0% 0%
src/plugins/cloud-sync/syncEngine.ts 0% 0% 0%
src/plugins/cloud-sync/syncStores.ts 100% 100% 100%
src/plugins/index.ts 0% 0% 0%
src/plugins/mounts.ts 100% 100% 100%
src/plugins/panels.ts 100% 100% 100%
src/plugins/PluginMount.tsx 0% 0% 0%
src/plugins/PluginPanelHost.tsx 0% 0% 0%
src/plugins/registry.ts 100% 100% 100%
src/plugins/storage.ts 32.25% 8.33% 33.33%
src/plugins/types.ts 100% 100% 100%
src/types/racing.ts 100% 100% 100%

@TheAngryRaven TheAngryRaven merged commit 8cb783c into BETA May 28, 2026
5 checks passed
@TheAngryRaven TheAngryRaven deleted the claude/lap-snapshot-feature-VBWDI branch May 28, 2026 04:03
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