deckhearth/components
Randall Stillwell cf9fea0726 feat(scanner): rebuild as mobile-first three-phase flow
Replace the desktop-first, everything-at-once scanner layout with a
phased mobile-optimized experience: Setup → Scanning → Review.

Phase 1 (Setup): destination picker, game filter, deck mode toggle,
scan history (last 5 sessions).

Phase 2 (Scanning): full-screen camera with auto-start, haptic + sound
feedback on card detection, torch/flash toggle, count pill, bottom-sheet
disambiguation (replaces full-screen modal).

Phase 3 (Review): card list with inline condition/foil/qty edits,
batch confirm, 30-second undo, deck progress indicator.

New features:
- Deck mode (progress toward 40/60/99 card target)
- Scan history (persisted to localStorage)
- Sound feedback (Web Audio oscillator, configurable)
- Offline queue (localStorage persistence + auto-retry on reconnect)
- Camera flash/torch toggle
- Batch ownership API (replaces N+1 per-card fetches)
- Visibility pause (detection loop stops when tab is backgrounded)

Convoy: scanner-rebuild
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-13 08:42:58 -05:00
..
scanner feat(scanner): rebuild as mobile-first three-phase flow 2026-06-13 08:42:58 -05:00
ui refactor(glass): migrate Button.secondary + Input + MobileNav off bespoke glass-surface (#131) 2026-06-05 06:23:55 -05:00
AdminProtected.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
AnimatedFireLogo.js fix(lint): clear ESLint baseline in components/ (#61) 2026-06-02 01:03:36 -05:00
AuthLayout.js fix(lint): clear ESLint baseline in components/ (#61) 2026-06-02 01:03:36 -05:00
BulkSelectionToolbar.js refactor(bulk-toolbar): migrate to .glass-panel-strong + token sweep (#125) 2026-06-04 16:25:17 -05:00
CameraScanner.js refactor(scanner): extract CameraScannerView presentational component (#73) 2026-06-02 16:04:02 -05:00
CameraScannerView.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardDetailDeckModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CardDetailQuantityModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CardDetailView.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardEditorForm.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardEditorPreview.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardEditorSearchPanel.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardEditorView.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
CardItem.js refactor(card-item): tokenize list-mode palette (Brief 1) (#128) 2026-06-04 16:55:36 -05:00
CardsPageView.js refactor(design): site-wide sweep — broken Tailwind tokens, rounded corners, SearchBar primitive (#117) (#117) 2026-06-04 14:06:22 -05:00
CollaboratorFacepile.js fix(lint): clear ESLint baseline in components/ (#61) 2026-06-02 01:03:36 -05:00
CollectionDeleteModal.js feat(design-system): Liquid Glass redesign portfolio — foundation + primitives + Layout (#95) 2026-06-03 20:12:33 -05:00
CollectionEditModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CollectionPageView.js convoy: enable no-undef ESLint rule + fix 3 latent bugs it surfaced 2026-06-13 01:17:18 -05:00
CollectionsCreateModal.js feat(design-system): Liquid Glass redesign portfolio — foundation + primitives + Layout (#95) 2026-06-03 20:12:33 -05:00
CollectionsEditModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CollectionSelectionModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CollectionsPageView.js refactor(styles): retire .card; migrate 7 consumers to .glass-panel (#122) 2026-06-04 15:30:29 -05:00
CollectionsSuccessModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
CollectionsThumbnail.js refactor(collections): useCollectionsPage + view (Brief 3) (#87) 2026-06-03 17:10:17 -05:00
DailyEmberWidget.js feat(design-system): redesign v2 #2 + #5 — sidebar pill, wordmark, Daily Ember (#103) 2026-06-04 10:59:44 -05:00
DashboardCardSpotlight.js feat(design-system): redesign v2 #7 + #8 — dashboard rebuild + right-rail Card Spotlight (#107) 2026-06-04 11:21:58 -05:00
DashboardFeaturedCollection.js feat(design-system): redesign v2 #7 + #8 — dashboard rebuild + right-rail Card Spotlight (#107) 2026-06-04 11:21:58 -05:00
DashboardRecentActivity.js feat(design-system): redesign v2 #7 + #8 — dashboard rebuild + right-rail Card Spotlight (#107) 2026-06-04 11:21:58 -05:00
DeckBuilderCardBrowser.js refactor(design): site-wide sweep — broken Tailwind tokens, rounded corners, SearchBar primitive (#117) (#117) 2026-06-04 14:06:22 -05:00
DeckBuilderDeckList.js refactor(design): site-wide sweep — broken Tailwind tokens, rounded corners, SearchBar primitive (#117) (#117) 2026-06-04 14:06:22 -05:00
DeckBuilderStatsBar.js refactor(design): site-wide sweep — broken Tailwind tokens, rounded corners, SearchBar primitive (#117) (#117) 2026-06-04 14:06:22 -05:00
DeckBuilderView.js refactor(design): site-wide sweep — broken Tailwind tokens, rounded corners, SearchBar primitive (#117) (#117) 2026-06-04 14:06:22 -05:00
DeckDetailCardList.js refactor(deck): extract grouped card list panel (Brief 2) (#143) 2026-06-13 01:11:50 -05:00
DeckDetailStatsSidebar.js refactor(deck): extract grouping lib and stats sidebar (Brief 1) (#137) 2026-06-13 00:44:16 -05:00
DeckDetailView.js refactor(deck): useDeckDetail + DeckDetailView (Brief 3) (#146) 2026-06-13 01:14:46 -05:00
DecksCreateModal.js refactor(decks): extract format utils and create modal (Brief 1) (#136) 2026-06-13 00:44:13 -05:00
DecksEditModal.js refactor(decks): extract edit modal and deck grid (Brief 2) (#142) 2026-06-13 01:11:47 -05:00
DecksGrid.js refactor(decks): extract edit modal and deck grid (Brief 2) (#142) 2026-06-13 01:11:47 -05:00
DecksPageView.js refactor(decks): useDecksPage + DecksPageView (Brief 3) (#145) 2026-06-13 01:14:43 -05:00
Layout.js refactor(layout): migrate 3 floating popovers to .glass-panel-strong (#124) 2026-06-04 16:25:14 -05:00
Layout.js.backup 🚀 Implement Mobile-First Navigation System 2025-08-01 18:18:21 -05:00
LoginCTA.js Align UI copy: My Collection vs Lists (#54) 2026-05-29 09:53:40 -05:00
ManaSymbols.js refactor(design): site-wide sweep — broken Tailwind tokens, rounded corners, SearchBar primitive (#117) (#117) 2026-06-04 14:06:22 -05:00
ManaSymbolSettings.js refactor(design): site-wide sweep — broken Tailwind tokens, rounded corners, SearchBar primitive (#117) (#117) 2026-06-04 14:06:22 -05:00
MobileNavigation.js refactor(glass): migrate Button.secondary + Input + MobileNav off bespoke glass-surface (#131) 2026-06-05 06:23:55 -05:00
OCRSettings.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00
PermissionIndicator.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
ProtectedRoute.js Major Scanner Improvements 2025-07-29 14:19:48 -05:00
PublicCardsView.js Extract PublicCardsView from pages/cards.js (Brief 2). (#78) 2026-06-03 12:06:24 -05:00
ScanDisambiguationDialog.js fix(scanner): import useFocusTrap in ScanDisambiguationDialog (#144) 2026-06-13 01:00:47 -05:00
ScannedCardItem.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
ScannerDestinationPicker.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
ScannerPageView.js feat(design-system): sweep authenticated body-content panels to glass (#97) 2026-06-03 21:28:52 -05:00
ShareModal.js convoy: enable no-undef ESLint rule + fix 3 latent bugs it surfaced 2026-06-13 01:17:18 -05:00
UploadImageModal.js feat(design-system): finish Liquid Glass — close all remaining sub-convoys (#96) 2026-06-03 20:34:06 -05:00