Skip to content

Design language overhaul: adaptive layouts, new navigation and customisable Zap page - #299

Merged
wizzomafizzo merged 18 commits into
mainfrom
wip/design-language-overhaul
Oct 13, 2026
Merged

wizzomafizzo merged 18 commits into
mainfrom
wip/design-language-overhaul

Conversation

@wizzomafizzo

Copy link
Copy Markdown
Member

Summary

Reworks the app's visual design and layout across phone, tablet and desktop widths, and adds a customisable Zap page.

  • Design language: a documented design language (docs/design-language.md), shared primitives, unified controls, dialogs, settings panels and reader interactions, new logos.
  • Adaptive layouts: one app at three layouts: phone with a bottom bar, a navigation rail from 760px, and a full sidebar from 1280px. Includes a details pane, breadcrumbs, workspace pages and a full-screen mode for always-on tablets.
  • Zap page: per-device customisable layout with built-in widgets, custom ZapScript buttons and collection rows, drag or button-based reordering, copy from another device, and a Customise entry in Settings.
  • ZapScript builder: rebuilt as a step builder backed by a command catalogue and a parser that mirrors Core's, with launcher lookup, media insert and a Steps/Text toggle. "Run" is now "Test".
  • Library and settings: v1.15.0 media preferences, decks and Online UI ported to the new design, Library collections, a reorganised Settings landing page, a virtualised Logs list, and device-keyed query caches so data never crosses devices.
  • Release-candidate fixes: the sidebar footer no longer hides Settings entries, play history keeps timestamps and system names, Library rows are named by title, manual address entry closes on Escape, and cancelled Core requests no longer log as errors.

Notes for reviewers

  • The Warp trial billing copy (online.warp.trialImmediateBilling) is a best guess and needs owner confirmation.
  • New strings in the eight non-English locales have not had a native-speaker review.
  • The layout version is always normalised to 1; migration handling is left for when a version 2 exists.
  • No Core, native or release configuration changes. The branch was device-tested on an Android phone and an iPhone with local debug builds.

wizzomafizzo and others added 18 commits September 29, 2026 05:44
Keep game and deck writes in their action rails with explicit cancellation and unclipped reader feedback.

Distinguish settings radios from navigation tabs; refine help, toggles, selects, reader ordering and Online layout.

Add Recent and Top Played collections, Warp trial handling, regression coverage and design guidance.

Make the pre-commit hook honor the no-stash workflow while retaining lint and formatting checks.
Group sidebar destinations to match the phone landing pages, keep one
section open, and add Systems and Collections views. Widen the details
pane, use it for deck items, and replace side columns on search, Collections
and deck pages with single-column layouts. Mark selected rows on their
content, name known tag values, and tidy titles and spacing.
Replace the ZapScript editor with a step builder backed by a command
catalogue and a parser that mirrors Core's, with launcher lookup and
expressions in any field. Turn the Settings landing page into status panels
beside the sidebar, lay short settings forms out as rows, and rework Help
and the Logs toolbar. Size page buttons to their content on wide layouts,
start bounded pages at the left edge, and make play history rows open
details like Library rows.
…d new logos

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…s and collection rows

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Fix the sidebar footer covering Settings entries, the orphaned Customise
tile, NFC page gutters, play history timestamps and system names, deck edit
actions, device detail dates and the German widget name. Name Library rows by
title with tags as a description, close manual address entry on Escape, and
log cancelled Core requests at debug level.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 13, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 468 files, which is 368 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration
  • Configuration used: Repository: ZaparooProject/zaparoo-app/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 0d05f3d8-77dd-45f2-8f5d-5cc09bbe6136
📥 Commits

Reviewing files that changed from the base of the PR and between cf5875c and 3ddd52d.

⛔ Files ignored due to path filters (4)
  • package-lock.json is excluded by !**/package-lock.json
  • public/fonts/OpenSans-VariableFont_wdth,wght.woff2 is excluded by !**/*.woff2
  • public/fonts/Outfit-VariableFont_wght.ttf is excluded by !**/*.ttf
  • src/generated/thirdPartyLicenses.json is excluded by !**/generated/**
📒 Files selected for processing (468)
  • .gitignore
  • .husky/pre-commit
  • components.json
  • docs/accessibility.md
  • docs/capacitor.md
  • docs/design-language.md
  • docs/playwright-testing.md
  • docs/testing.md
  • eslint.config.js
  • index.html
  • package.json
  • public/fonts/Outfit-OFL.txt
  • public/fonts/README.md
  • public/lockup-light.webp
  • public/lockup.webp
  • public/thirdPartyLicenseNotices.bed28e43c74e.json
  • scripts/sync-zapscript-commands.mjs
  • src/App.tsx
  • src/__tests__/integration/CoreOutdatedNotice.test.tsx
  • src/__tests__/integration/InboxModal.test.tsx
  • src/__tests__/integration/adaptive-create.test.tsx
  • src/__tests__/integration/adaptive-devices.test.tsx
  • src/__tests__/integration/adaptive-dialogs.test.tsx
  • src/__tests__/integration/adaptive-library.test.tsx
  • src/__tests__/integration/adaptive-settings.test.tsx
  • src/__tests__/integration/adaptive-shell.test.tsx
  • src/__tests__/integration/adaptive-zap.test.tsx
  • src/__tests__/integration/appearance.test.tsx
  • src/__tests__/integration/create-mappings-edit.test.tsx
  • src/__tests__/integration/create-mappings.test.tsx
  • src/__tests__/integration/create-search.test.tsx
  • src/__tests__/integration/device-sheet-discovery.test.tsx
  • src/__tests__/integration/home-cover-rows.test.tsx
  • src/__tests__/integration/home-page-scan.test.tsx
  • src/__tests__/integration/home-page.test.tsx
  • src/__tests__/integration/home-reader-strip.test.tsx
  • src/__tests__/integration/index-route.test.tsx
  • src/__tests__/integration/library-metadata-exploration.test.tsx
  • src/__tests__/integration/library-search-rows.test.tsx
  • src/__tests__/integration/library-virtual-scroll-origin.test.tsx
  • src/__tests__/integration/network-scan-modal.test.tsx
  • src/__tests__/integration/nfc-write-blank-tag.test.tsx
  • src/__tests__/integration/recent-searches-modal.test.tsx
  • src/__tests__/integration/root-layout.test.tsx
  • src/__tests__/integration/scan-spinner.test.tsx
  • src/__tests__/integration/settings-accessibility.test.tsx
  • src/__tests__/integration/settings-logs.test.tsx
  • src/__tests__/integration/settings-readers.test.tsx
  • src/__tests__/integration/tour-media-highlight.test.tsx
  • src/__tests__/unit/App.integration.test.tsx
  • src/__tests__/unit/components/BackToTop.test.tsx
  • src/__tests__/unit/components/BottomNav.test.tsx
  • src/__tests__/unit/components/CommandsModal.test.tsx
  • src/__tests__/unit/components/ConnectionStatusBar.test.tsx
  • src/__tests__/unit/components/CopyButton.test.tsx
  • src/__tests__/unit/components/DeviceConnectionCard.test.tsx
  • src/__tests__/unit/components/DeviceConnectionSummary.test.tsx
  • src/__tests__/unit/components/DeviceLinkButton.test.tsx
  • src/__tests__/unit/components/ErrorComponent.test.tsx
  • src/__tests__/unit/components/HeaderOverflowMenu.test.tsx
  • src/__tests__/unit/components/InboxButton.test.tsx
  • src/__tests__/unit/components/MediaDatabaseCard.test.tsx
  • src/__tests__/unit/components/MediaDetailsModal.test.tsx
  • src/__tests__/unit/components/MediaIndexingToast.test.tsx
  • src/__tests__/unit/components/MediaScrapeCard.test.tsx
  • src/__tests__/unit/components/MediaSearchModal.test.tsx
  • src/__tests__/unit/components/OnlineDeviceSetup.test.tsx
  • src/__tests__/unit/components/PageFrame.test.tsx
  • src/__tests__/unit/components/PairingModal.test.tsx
  • src/__tests__/unit/components/ProPurchase.test.tsx
  • src/__tests__/unit/components/ProfileManager.test.tsx
  • src/__tests__/unit/components/ReaderActivityControl.test.tsx
  • src/__tests__/unit/components/RemoteKeyboardModal.test.tsx
  • src/__tests__/unit/components/RequirementsModal.test.tsx
  • src/__tests__/unit/components/SidebarDeviceStatus.test.tsx
  • src/__tests__/unit/components/SimpleSystemSelect.test.tsx
  • src/__tests__/unit/components/SlideModal.test.tsx
  • src/__tests__/unit/components/SystemFilterControls.test.tsx
  • src/__tests__/unit/components/SystemSelector.test.tsx
  • src/__tests__/unit/components/TagSelector.test.tsx
  • src/__tests__/unit/components/VirtualSearchResults.test.tsx
  • src/__tests__/unit/components/WarpSubscription.test.tsx
  • src/__tests__/unit/components/WriteModal.test.tsx
  • src/__tests__/unit/components/ZapScriptInput.test.tsx
  • src/__tests__/unit/components/ZapScriptSteps.test.tsx
  • src/__tests__/unit/components/home/ConnectionStatus.test.tsx
  • src/__tests__/unit/components/home/DeviceSheet.test.tsx
  • src/__tests__/unit/components/home/HistoryModal.test.tsx
  • src/__tests__/unit/components/home/LastScannedInfo.test.tsx
  • src/__tests__/unit/components/home/NowPlayingInfo.test.tsx
  • src/__tests__/unit/components/home/NowPlayingPreferences.test.tsx
  • src/__tests__/unit/components/home/ScanControls.test.tsx
  • src/__tests__/unit/components/home/ScanSettings.test.tsx
  • src/__tests__/unit/components/library/DeckArtwork.test.tsx
  • src/__tests__/unit/components/library/DeckItemDetailsModal.test.tsx
  • src/__tests__/unit/components/library/LibraryArtwork.test.tsx
  • src/__tests__/unit/components/library/LibraryBrowseList.test.tsx
  • src/__tests__/unit/components/library/LibraryMediaDetailsModal.test.tsx
  • src/__tests__/unit/components/library/MediaPreferenceActions.test.tsx
  • src/__tests__/unit/components/navigation/BackHandler.test.tsx
  • src/__tests__/unit/components/nfc/ReadTab.test.tsx
  • src/__tests__/unit/components/nfc/ToolsTab.ios.test.tsx
  • src/__tests__/unit/components/nfc/ToolsTab.test.tsx
  • src/__tests__/unit/components/safeArea.regression.test.tsx
  • src/__tests__/unit/components/ui/button.test.tsx
  • src/__tests__/unit/components/ui/dialog.test.tsx
  • src/__tests__/unit/components/wui/Button.test.tsx
  • src/__tests__/unit/components/wui/Card.test.tsx
  • src/__tests__/unit/components/wui/HeaderButton.test.tsx
  • src/__tests__/unit/components/wui/PinInput.test.tsx
  • src/__tests__/unit/components/wui/RadioGroup.test.tsx
  • src/__tests__/unit/components/wui/SettingHelp.test.tsx
  • src/__tests__/unit/components/wui/StatusPill.test.tsx
  • src/__tests__/unit/components/wui/TabBar.test.tsx
  • src/__tests__/unit/components/wui/TextInput.test.tsx
  • src/__tests__/unit/components/wui/ToggleSwitch.test.tsx
  • src/__tests__/unit/coreApi.api-contract.test.ts
  • src/__tests__/unit/hooks/useContextualNfcWrite.test.tsx
  • src/__tests__/unit/hooks/useDebouncedSave.test.ts
  • src/__tests__/unit/hooks/useMediaSearchForm.test.tsx
  • src/__tests__/unit/hooks/useNetworkScan.test.ts
  • src/__tests__/unit/hooks/useRecentSearches.test.ts
  • src/__tests__/unit/hooks/useScanOperations.test.tsx
  • src/__tests__/unit/hooks/useSmartSwipe.test.tsx
  • src/__tests__/unit/hooks/useTrialAccessExpiry.test.ts
  • src/__tests__/unit/hooks/useVirtualInfiniteSearch.test.tsx
  • src/__tests__/unit/hooks/useVirtualListScrollMargin.test.tsx
  • src/__tests__/unit/hooks/useWarpSubscription.test.ts
  • src/__tests__/unit/hooks/useWriteQueueProcessor.test.tsx
  • src/__tests__/unit/lib/appPreview.test.tsx
  • src/__tests__/unit/lib/coreApi.test.ts
  • src/__tests__/unit/lib/devices/discoveredDevice.test.ts
  • src/__tests__/unit/lib/formatDate.test.ts
  • src/__tests__/unit/lib/libraryMedia.test.ts
  • src/__tests__/unit/lib/librarySessionStore.test.ts
  • src/__tests__/unit/lib/libraryTagLabels.test.ts
  • src/__tests__/unit/lib/mediaHistory.test.ts
  • src/__tests__/unit/lib/nfcErrorMessages.test.ts
  • src/__tests__/unit/lib/preferencesStore.test.ts
  • src/__tests__/unit/lib/readers.test.ts
  • src/__tests__/unit/lib/tabSessionStore.test.ts
  • src/__tests__/unit/lib/warpSubscription.test.ts
  • src/__tests__/unit/lib/writeNfcHook.test.tsx
  • src/__tests__/unit/lib/zapButtonDefaults.test.ts
  • src/__tests__/unit/lib/zapLayout.test.ts
  • src/__tests__/unit/lib/zapscript/catalog.test.ts
  • src/__tests__/unit/lib/zapscript/script.test.ts
  • src/__tests__/unit/routes/create.custom.test.tsx
  • src/__tests__/unit/routes/create.index.test.tsx
  • src/__tests__/unit/routes/create.nfc.test.tsx
  • src/__tests__/unit/routes/create.search.loader.test.ts
  • src/__tests__/unit/routes/create.search.test.tsx
  • src/__tests__/unit/routes/library.decks.test.tsx
  • src/__tests__/unit/routes/library.favorites.test.tsx
  • src/__tests__/unit/routes/library.history.test.tsx
  • src/__tests__/unit/routes/library.index.test.tsx
  • src/__tests__/unit/routes/library.search.test.tsx
  • src/__tests__/unit/routes/library.system.test.tsx
  • src/__tests__/unit/routes/settings.about.test.tsx
  • src/__tests__/unit/routes/settings.devices-detail.test.tsx
  • src/__tests__/unit/routes/settings.devices.test.tsx
  • src/__tests__/unit/routes/settings.help.test.tsx
  • src/__tests__/unit/routes/settings.index.test.tsx
  • src/__tests__/unit/routes/settings.language-region.test.tsx
  • src/__tests__/unit/routes/settings.licenses.test.tsx
  • src/__tests__/unit/routes/settings.media.test.tsx
  • src/__tests__/unit/routes/settings.online.test.tsx
  • src/__tests__/unit/routes/settings.play-controls.test.tsx
  • src/__tests__/unit/routes/settings.readers.test.tsx
  • src/assets/lockup.webp
  • src/components/AdaptiveNavigation.tsx
  • src/components/AppBadgeManager.tsx
  • src/components/BackToTop.geometry.ts
  • src/components/BackToTop.tsx
  • src/components/BottomNav.tsx
  • src/components/CommandsModal.tsx
  • src/components/ConfirmClearModal.tsx
  • src/components/ConnectionProvider.tsx
  • src/components/ConnectionStatusBar.tsx
  • src/components/ConnectionStatusDisplay.tsx
  • src/components/CopyButton.tsx
  • src/components/CoreOutdatedNotice.tsx
  • src/components/CreateActionIcon.tsx
  • src/components/DeepLinkConfirmModal.tsx
  • src/components/DeviceConnectionCard.tsx
  • src/components/DeviceConnectionSummary.tsx
  • src/components/DeviceLinkButton.tsx
  • src/components/DeviceRow.tsx
  • src/components/DeviceSheetProvider.tsx
  • src/components/ErrorComponent.tsx
  • src/components/HeaderOverflowMenu.tsx
  • src/components/HistoryListRow.tsx
  • src/components/InboxButton.tsx
  • src/components/InboxModal.tsx
  • src/components/InlineLoading.tsx
  • src/components/LauncherSelector.tsx
  • src/components/MappingRow.tsx
  • src/components/MediaDatabaseCard.tsx
  • src/components/MediaDetailsModal.tsx
  • src/components/MediaFinishedToast.tsx
  • src/components/MediaIndexingToast.tsx
  • src/components/MediaScrapeCard.tsx
  • src/components/MediaSearchForm.tsx
  • src/components/MediaSearchModal.tsx
  • src/components/MediaWriteTargetSelector.tsx
  • src/components/NetworkScanModal.tsx
  • src/components/NotificationBadge.tsx
  • src/components/OnlineDeviceSetup.tsx
  • src/components/PageFrame.tsx
  • src/components/PageParentLink.tsx
  • src/components/PairingModal.tsx
  • src/components/ProPurchase.tsx
  • src/components/ProfileManager.tsx
  • src/components/ProgressBar.tsx
  • src/components/ReaderActivityAction.tsx
  • src/components/ReaderActivityControl.tsx
  • src/components/ReaderStatusRow.tsx
  • src/components/RecentSearchesModal.tsx
  • src/components/RemoteKeyboardModal.tsx
  • src/components/RequirementsModal.tsx
  • src/components/ResponsiveContainer.tsx
  • src/components/RowSelectionChevron.tsx
  • src/components/ScanSpinner.tsx
  • src/components/SearchResults.tsx
  • src/components/SelectorParts.tsx
  • src/components/SettingsFieldGroup.tsx
  • src/components/SidebarDeviceStatus.tsx
  • src/components/SidebarNavigation.tsx
  • src/components/SimpleSystemSelect.tsx
  • src/components/SkipLink.tsx
  • src/components/SlideModal.tsx
  • src/components/SlideModalProvider.tsx
  • src/components/StatRow.tsx
  • src/components/SwipeBackIndicator.tsx
  • src/components/SystemFilterControls.tsx
  • src/components/SystemSelector.tsx
  • src/components/TagSelector.tsx
  • src/components/TestErrorComponent.tsx
  • src/components/VirtualSearchResults.tsx
  • src/components/WarpSubscription.tsx
  • src/components/WriteModal.tsx
  • src/components/ZapScriptInput.tsx
  • src/components/home/ActiveDeviceStatus.tsx
  • src/components/home/ConnectionStatus.tsx
  • src/components/home/DeviceConnectionPanel.tsx
  • src/components/home/DeviceSheet.tsx
  • src/components/home/HistoryModal.tsx
  • src/components/home/HistoryQueryState.tsx
  • src/components/home/HomeDevicePill.tsx
  • src/components/home/LastScannedInfo.tsx
  • src/components/home/MediaCoverRow.tsx
  • src/components/home/NowPlayingCard.tsx
  • src/components/home/NowPlayingInfo.tsx
  • src/components/home/NowPlayingPreferences.tsx
  • src/components/home/NowPlayingTransport.tsx
  • src/components/home/PlayedHistoryList.tsx
  • src/components/home/PlaylistQueue.tsx
  • src/components/home/ReaderStrip.tsx
  • src/components/home/ScanActions.tsx
  • src/components/home/ScanControls.tsx
  • src/components/home/ScanHistoryList.tsx
  • src/components/home/ScanSettings.tsx
  • src/components/home/StagedTokenModal.tsx
  • src/components/home/StopConfirmModal.tsx
  • src/components/home/ZapButtonEditor.tsx
  • src/components/home/ZapButtonFrame.tsx
  • src/components/home/ZapButtonWidget.tsx
  • src/components/home/ZapCollectionEditor.tsx
  • src/components/home/ZapCollectionWidget.tsx
  • src/components/home/ZapLayoutEditor.tsx
  • src/components/home/ZapWidgetFrame.tsx
  • src/components/home/useDeviceConnectionFlow.tsx
  • src/components/home/useEditorBar.ts
  • src/components/home/zapButtonIcons.ts
  • src/components/library/ContextualWriteRail.tsx
  • src/components/library/DeckArtwork.tsx
  • src/components/library/DeckDescriptionInput.tsx
  • src/components/library/DeckItemDetailsModal.tsx
  • src/components/library/DeckMarkdown.tsx
  • src/components/library/DeckShareModal.tsx
  • src/components/library/FavoriteButton.tsx
  • src/components/library/LibraryAddToDeck.tsx
  • src/components/library/LibraryArtwork.tsx
  • src/components/library/LibraryArtworkFrame.tsx
  • src/components/library/LibraryBrowseList.tsx
  • src/components/library/LibraryCollectionList.tsx
  • src/components/library/LibraryCollectionPage.tsx
  • src/components/library/LibraryDetailArtwork.tsx
  • src/components/library/LibraryDetailsSurface.tsx
  • src/components/library/LibraryGameSearch.tsx
  • src/components/library/LibraryHeader.tsx
  • src/components/library/LibraryHistoryCollection.tsx
  • src/components/library/LibraryLaunchableModal.tsx
  • src/components/library/LibraryLetterJumpModal.tsx
  • src/components/library/LibraryLinkButton.tsx
  • src/components/library/LibraryMediaDetailsModal.tsx
  • src/components/library/LibraryMediaFacts.tsx
  • src/components/library/LibraryMediaOptionsModal.tsx
  • src/components/library/LibraryMediaRow.tsx
  • src/components/library/LibraryMetadataLink.tsx
  • src/components/library/LibrarySortOptionList.tsx
  • src/components/library/LibrarySystemFiltersModal.tsx
  • src/components/library/LibrarySystemRefinementBar.tsx
  • src/components/library/LibrarySystemSortModal.tsx
  • src/components/library/LibraryTaggedCollection.tsx
  • src/components/library/MediaPreferenceActions.tsx
  • src/components/library/SortableDeckItemRow.tsx
  • src/components/library/libraryMediaRowGeometry.ts
  • src/components/library/useLibraryAddToDeck.ts
  • src/components/library/useLibraryBreadcrumbs.ts
  • src/components/library/useLibraryMediaFacts.ts
  • src/components/nfc/ReadTab.tsx
  • src/components/nfc/ToolsTab.tsx
  • src/components/selectorOptionClassName.ts
  • src/components/theme-provider.tsx
  • src/components/ui/accordion.tsx
  • src/components/ui/button.tsx
  • src/components/ui/card-variants.ts
  • src/components/ui/card.tsx
  • src/components/ui/checkbox.tsx
  • src/components/ui/dialog.tsx
  • src/components/ui/drawer.tsx
  • src/components/ui/tabs.tsx
  • src/components/wui/Badge.tsx
  • src/components/wui/Button.tsx
  • src/components/wui/Card.tsx
  • src/components/wui/HeaderButton.tsx
  • src/components/wui/ModalActionBar.tsx
  • src/components/wui/ModalActionRail.tsx
  • src/components/wui/PinInput.tsx
  • src/components/wui/RadioGroup.tsx
  • src/components/wui/Segmented.tsx
  • src/components/wui/Select.tsx
  • src/components/wui/SettingHelp.tsx
  • src/components/wui/StatusPill.tsx
  • src/components/wui/TabBar.tsx
  • src/components/wui/TextInput.tsx
  • src/components/wui/ToggleChip.tsx
  • src/components/wui/ToggleSwitch.tsx
  • src/components/zapscript/ZapScriptSteps.tsx
  • src/hooks/useAppUi.ts
  • src/hooks/useBackButtonHandler.ts
  • src/hooks/useContextualNfcWrite.ts
  • src/hooks/useCoreSettingsUpdate.ts
  • src/hooks/useDebouncedSave.ts
  • src/hooks/useDevicePresentation.ts
  • src/hooks/useDeviceSheetController.ts
  • src/hooks/useFocusTrap.ts
  • src/hooks/useHistoryReplay.ts
  • src/hooks/useHomeCoverRows.ts
  • src/hooks/useHomeScanLayout.ts
  • src/hooks/useKnownCoreFeature.ts
  • src/hooks/useLibraryMediaSelection.ts
  • src/hooks/useLiveCoreControls.ts
  • src/hooks/useMediaQuery.ts
  • src/hooks/useMediaSearchForm.ts
  • src/hooks/useMediaWriteTarget.ts
  • src/hooks/useMetadataDetailsReturn.ts
  • src/hooks/useNavigationMode.ts
  • src/hooks/useNetworkScan.ts
  • src/hooks/useNfcEnabled.ts
  • src/hooks/useNowPlayingArtwork.ts
  • src/hooks/useNowPlayingControls.ts
  • src/hooks/useReaderStatus.ts
  • src/hooks/useRecentSearches.ts
  • src/hooks/useReturnableMediaDetails.ts
  • src/hooks/useScanOperations.tsx
  • src/hooks/useSlideModalManager.ts
  • src/hooks/useSmartSwipe.ts
  • src/hooks/useTactilePress.ts
  • src/hooks/useTrialAccessExpiry.ts
  • src/hooks/useVirtualInfiniteSearch.ts
  • src/hooks/useVirtualListScrollMargin.ts
  • src/hooks/useWarpSubscription.ts
  • src/hooks/useWriteQueueProcessor.tsx
  • src/hooks/useZapDecks.ts
  • src/index.css
  • src/lib/appPreviewStore.ts
  • src/lib/appSections.ts
  • src/lib/appearance.ts
  • src/lib/clipboard.ts
  • src/lib/coreApi.ts
  • src/lib/devices/discoveredDevice.ts
  • src/lib/featureGates.ts
  • src/lib/formatDate.ts
  • src/lib/images.tsx
  • src/lib/libraryMedia.ts
  • src/lib/libraryMetadataSearch.ts
  • src/lib/librarySessionStore.ts
  • src/lib/libraryTagLabels.ts
  • src/lib/mediaHistory.ts
  • src/lib/models.ts
  • src/lib/nfc.ts
  • src/lib/nfcErrorMessages.ts
  • src/lib/nfcPreview.ts
  • src/lib/onlineSignOut.ts
  • src/lib/preferencesStore.ts
  • src/lib/purchasePreviewStore.ts
  • src/lib/purchasesSetup.ts
  • src/lib/readers.ts
  • src/lib/scanMode.ts
  • src/lib/systemFilters.ts
  • src/lib/tabSessionStore.ts
  • src/lib/tourService.ts
  • src/lib/warpSubscription.ts
  • src/lib/writeNfcHook.tsx
  • src/lib/zapButtonDefaults.ts
  • src/lib/zapCollections.ts
  • src/lib/zapLayout.ts
  • src/lib/zapscript/catalog.ts
  • src/lib/zapscript/commandNames.json
  • src/lib/zapscript/script.ts
  • src/lib/zapscript/types.ts
  • src/main.tsx
  • src/routeTree.gen.ts
  • src/routes/-pages/DeviceDetail.tsx
  • src/routes/-pages/Devices.tsx
  • src/routes/-pages/Index.tsx
  • src/routes/-pages/IndexRoute.tsx
  • src/routes/-pages/LibrarySearch.tsx
  • src/routes/-pages/Logs.tsx
  • src/routes/-pages/MappingEditor.tsx
  • src/routes/-pages/Search.tsx
  • src/routes/-pages/ZapHistory.tsx
  • src/routes/__root.tsx
  • src/routes/create.custom.tsx
  • src/routes/create.index.tsx
  • src/routes/create.mappings.tsx
  • src/routes/create.nfc.tsx
  • src/routes/create.search.tsx
  • src/routes/index.tsx
  • src/routes/library.$system.tsx
  • src/routes/library.decks.$deckId.tsx
  • src/routes/library.decks.$deckId_.add.tsx
  • src/routes/library.decks.new.tsx
  • src/routes/library.index.tsx
  • src/routes/library.recent.tsx
  • src/routes/library.search.tsx
  • src/routes/library.top.tsx
  • src/routes/settings.about.tsx
  • src/routes/settings.accessibility.tsx
  • src/routes/settings.advanced.tsx
  • src/routes/settings.help.tsx
  • src/routes/settings.index.tsx
  • src/routes/settings.language-region.tsx
  • src/routes/settings.licenses.tsx
  • src/routes/settings.media.tsx
  • src/routes/settings.online.tsx
  • src/routes/settings.play-controls.tsx
  • src/routes/settings.readers.tsx
  • src/routes/zap.play-history.tsx
  • src/routes/zap.scan-history.tsx
  • src/styles/components.css
  • src/styles/theme.css
  • src/test-setup.ts
  • src/test-utils/msw-handlers.ts
  • src/test-utils/responsiveWindow.ts
  • src/translations/de-DE.json
  • src/translations/en-GB.json
  • src/translations/en-US.json
  • src/translations/es-ES.json
  • src/translations/fr-FR.json
  • src/translations/ja-JP.json
  • src/translations/ko-KR.json
  • src/translations/nl-NL.json
  • src/translations/zh-CN.json
  • tailwind.config.js
  • vitest.config.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codecov

codecov Bot commented Oct 13, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 51.61290% with 15 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/App.tsx 51.61% 15 Missing ⚠️

📢 Thoughts on this report? Let us know!

@wizzomafizzo
wizzomafizzo merged commit 3afda1a into main Oct 13, 2026
5 of 6 checks passed
@wizzomafizzo
wizzomafizzo deleted the wip/design-language-overhaul branch October 13, 2026 11:07
wizzomafizzo added a commit that referenced this pull request Oct 13, 2026
…isable Zap page (#299)

* WIP: overhaul app design language

* WIP: refine app design language and Zap page

* WIP: unify reader interactions and refine app pages

* WIP: port v1.15.0 media preferences, decks and Online UI to the new design language

* WIP: audit fixes for design-language consistency, legacy cleanup and tab scroll chevrons

* WIP: focus ring, back-to-top positioning and button icon consistency

* WIP: refine controls, contextual NFC writing and Library collections

Keep game and deck writes in their action rails with explicit cancellation and unclipped reader feedback.

Distinguish settings radios from navigation tabs; refine help, toggles, selects, reader ordering and Online layout.

Add Recent and Top Played collections, Warp trial handling, regression coverage and design guidance.

Make the pre-commit hook honor the no-stash workflow while retaining lint and formatting checks.

* WIP: unify device selection and refine UI interactions

* WIP: polish controls and unify Settings panels

* WIP: adapt layouts and refine hierarchical navigation

* WIP: refine adaptive pages, dialogs and text reflow

* WIP: add breadcrumbs, metadata exploration and dialog refinements

* WIP: audit fixes, shared primitives and translation sync

* WIP: reorganise sidebar, desktop layouts and details pane

Group sidebar destinations to match the phone landing pages, keep one
section open, and add Systems and Collections views. Widen the details
pane, use it for deck items, and replace side columns on search, Collections
and deck pages with single-column layouts. Mark selected rows on their
content, name known tag values, and tidy titles and spacing.

* WIP: rebuild ZapScript builder and settle desktop settings layouts

Replace the ZapScript editor with a step builder backed by a command
catalogue and a parser that mirrors Core's, with launcher lookup and
expressions in any field. Turn the Settings landing page into status panels
beside the sidebar, lay short settings forms out as rows, and rework Help
and the Logs toolbar. Size page buttons to their content on wide layouts,
start bounded pages at the left edge, and make play history rows open
details like Library rows.

* WIP: rework navigation into rail and full sidebar, add full screen and new logos

* WIP: add customisable Zap page with per-device layouts, custom buttons and collection rows

* WIP: release-candidate sweep fixes and Zap customisation polish

Fix the sidebar footer covering Settings entries, the orphaned Customise
tile, NFC page gutters, play history timestamps and system names, deck edit
actions, device detail dates and the German widget name. Name Library rows by
title with tags as a description, close manual address entry on Escape, and
log cancelled Core requests at debug level.

---------
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.

1 participant