Skip to content

Add Deck browsing feature with controller, UI, routing, and format helpers - #46

Open
ercmine wants to merge 1 commit into
mainfrom
codex/implement-deck-experience-in-flutter-frontend-k6h3b8
Open

Add Deck browsing feature with controller, UI, routing, and format helpers#46
ercmine wants to merge 1 commit into
mainfrom
codex/implement-deck-experience-in-flutter-frontend-k6h3b8

Conversation

@ercmine

@ercmine ercmine commented Mar 7, 2026

Copy link
Copy Markdown
Owner

Motivation

  • Introduce a swipable "Deck" experience to browse session suggestions and integrate it into existing sessions flows.
  • Provide client-side telemetry and location-aware fetching for deck results and a small set of UI helper formatters.

Description

  • Added a full Deck feature including state (deck_state.dart), controller (deck_controller.dart) with telemetry, location and repository integration, and a new route at /sessions/:id/deck wired into router.dart and session_page.dart.
  • Implemented the Deck UI in deck_page.dart and a set of widgets for cards and details (deck_card.dart, deck_card_skeleton.dart, deck_actions_bar.dart, card_details_sheet.dart, and several small badges/pills), and hooked link launching into existing linkLauncherProvider usage.
  • Registered a deckControllerProvider in providers/app_providers.dart, added format helpers in core/format/formatters.dart, and updated pubspec.yaml to include flutter_card_swiper, cached_network_image, and collection dependencies.
  • Added UI behaviors such as loading/fallback states, undo stack, batching/merge logic for plans, and telemetry enqueue/flush calls to the existing telemetry repository API.

Testing

  • Ran flutter analyze to ensure static analysis and imports are correct and it completed successfully.
  • Ran flutter test and unit/widget tests completed successfully (no failing tests).

Codex Task

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2061447167

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +214 to +217
_telemetryRepository().then((repo) async {
repo.enqueue(state.sessionId, event);
await repo.flush(state.sessionId);
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Serialize telemetry flushes per session

In DeckController, _swipe emits two telemetry events back-to-back (card_viewed then swipe), and _enqueueTelemetry starts repo.flush in a fire-and-forget callback each time. That allows concurrent TelemetryRepository.flush executions on the same queue; because each flush computes takeCount, awaits network I/O, then mutates with removeRange, overlapping completions can remove overlapping ranges and raise RangeError or lose/duplicate events during normal fast swiping.

Useful? React with 👍 / 👎.

nextCursor: response.nextCursor,
hasMore: response.nextCursor != null,
lastBatchMix: response.mix,
usedFallback: response.plans.isEmpty || fallbackCount >= (response.plans.length ~/ 2),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Correct fallback ratio check for odd batch sizes

The fallback flag uses fallbackCount >= (response.plans.length ~/ 2), which floors odd lengths and makes the threshold too low (for example, 1-card batches always mark fallback active because the threshold becomes 0, and 3-card batches mark it active at only 33%). This causes false fallback labeling and misleading deck quality signals whenever batch size is odd.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant