Skip to content

錯題重練+每日 streak - #3

Merged
Retsomm merged 2 commits into
mainfrom
dev
Jul 10, 2026
Merged

Retsomm merged 2 commits into
mainfrom
dev

Conversation

@Retsomm

@Retsomm Retsomm commented Jul 10, 2026 •

Copy link
Copy Markdown
Owner
  • 錯題本:答錯的題目記進 localStorage(wrongIds),任何模式答對即移除; 首頁顯示「錯題重練(N 題)」按鈕,每輪隨機抽最多 6 題, 重練只加 XP 不計首通關 bonus、不動關卡最佳紀錄
  • streak:完成關卡或重練時更新連續學習天數(本地時區日界), 首頁以火焰徽章顯示;中斷一天即重算
  • 新增 flame、rotate-ccw 線型圖示與 secondary-btn 樣式

Summary by CodeRabbit

  • New Features

    • Added a “Review Wrong Questions” mode for retrying missed questions.
    • Incorrect answers are tracked and removed after being answered correctly.
    • Added learning streak tracking and a streak badge on the home screen.
    • Review results now show cleared questions and earned XP.
  • UI Improvements

    • Added review banners, secondary actions, and supporting icons.
    • The review option appears only when missed questions are available.

- 錯題本:答錯的題目記進 localStorage(wrongIds),任何模式答對即移除;
  首頁顯示「錯題重練(N 題)」按鈕,每輪隨機抽最多 6 題,
  重練只加 XP 不計首通關 bonus、不動關卡最佳紀錄
- streak:完成關卡或重練時更新連續學習天數(本地時區日界),
  首頁以火焰徽章顯示;中斷一天即重算
- 新增 flame、rotate-ccw 線型圖示與 secondary-btn 樣式

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 10, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
easy-learn Ready Ready Preview, Comment Jul 10, 2026 11:02am

@coderabbitai

coderabbitai Bot commented Jul 10, 2026 •

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@Retsomm, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 50 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: fd10f9ea-6ed4-4b1e-9e57-dbc12068e7fa

📥 Commits

Reviewing files that changed from the base of the PR and between b09d0f6 and 189530e.

📒 Files selected for processing (2)
  • src/App.jsx
  • src/screens/Quiz.jsx
📝 Walkthrough

Walkthrough

Adds wrong-answer and streak persistence, a review flow for up to six wrong questions, review-specific quiz completion behavior, and home-screen controls and styling for streaks and review sessions.

Changes

Wrong Question Review

Layer / File(s) Summary
Progress tracking and review completion
src/hooks/useProgress.js
Progress now stores wrong question IDs and streak data, updates them when answers and levels are completed, and exposes answerQuestion and finishReview.
Review question selection and app wiring
src/data/chapters.js, src/App.jsx
Wrong questions are collected in chapter order, shuffled and limited to six, then supplied to a review-mode Quiz instance.
Review quiz behavior and results
src/screens/Quiz.jsx
Review mode records answers, finishes through finishReview, and renders review-specific banners, results, statistics, hints, and navigation.
Home review controls and visual assets
src/screens/Home.jsx, src/components/Icons.jsx, src/index.css
The home screen conditionally shows streak and wrong-question review controls, with new icons and styles for review UI elements.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Home
  participant App
  participant QuestionData
  participant Quiz
  participant Progress
  Home->>App: Start wrong-question review
  App->>QuestionData: getWrongQuestions(wrongIds)
  QuestionData-->>App: Return ordered wrong questions
  App->>Quiz: Render review quiz with up to six questions
  Quiz->>Progress: answerQuestion(questionId, correct)
  Quiz->>Progress: finishReview(xpEarned)
  Progress-->>Quiz: Updated progress and streak
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 標題準確概括了這次的主要變更:錯題重練與每日 streak。
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

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.

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/App.jsx (1)

15-21: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Prefer Fisher-Yates over sort(() => Math.random() - 0.5).

Array.sort with a random comparator produces a biased distribution — not all permutations are equally likely. For selecting a review subset this is low-impact, but Fisher-Yates is equally simple and correct.

♻️ Proposed Fisher-Yates shuffle
 function startReview() {
   // 抽最多 6 題錯題組成一輪重練(洗牌避免每次順序相同)
   const pool = getWrongQuestions(progress.wrongIds)
-  const shuffled = [...pool].sort(() => Math.random() - 0.5).slice(0, REVIEW_SIZE)
+  const shuffled = [...pool]
+  for (let i = shuffled.length - 1; i > 0; i--) {
+    const j = Math.floor(Math.random() * (i + 1))
+    ;[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]]
+  }
+  shuffled.splice(REVIEW_SIZE)
   if (shuffled.length === 0) return
   setView({ name: 'review', questions: shuffled })
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/App.jsx` around lines 15 - 21, Replace the biased random comparator in
startReview with a Fisher-Yates shuffle, using a copied pool so the original
question order is not mutated, then select the first REVIEW_SIZE questions and
preserve the existing empty-result guard and review view update.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/screens/Quiz.jsx`:
- Around line 46-50: Prevent XP from being double-counted on the result screen
by updating the result XP display logic in the component’s completion/render
path: after finishReview or finishLevel updates progress.xp, display progress.xp
directly instead of adding finalXp. Apply this consistently to both review and
normal quiz flows.

---

Nitpick comments:
In `@src/App.jsx`:
- Around line 15-21: Replace the biased random comparator in startReview with a
Fisher-Yates shuffle, using a copied pool so the original question order is not
mutated, then select the first REVIEW_SIZE questions and preserve the existing
empty-result guard and review view update.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 28b71e97-f709-4a4d-8125-1879436e6b78

📥 Commits

Reviewing files that changed from the base of the PR and between 127f42a and b09d0f6.

📒 Files selected for processing (7)
  • src/App.jsx
  • src/components/Icons.jsx
  • src/data/chapters.js
  • src/hooks/useProgress.js
  • src/index.css
  • src/screens/Home.jsx
  • src/screens/Quiz.jsx

Comment thread src/screens/Quiz.jsx
- 結算時 progress.xp 已含本輪 XP,Mascot 改直接吃 progress.xp,
  避免等級條/進化階段多算一次
- 錯題抽題改 Fisher-Yates,修掉 sort(random) 的偏差

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
Preview — 189530ec Deployed Jul 10, 2026 by vercel[bot]
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