📚 Learning & Study
Turn articles into active learning material with flashcards, quizzes, spaced repetition, and more.
🃏 Flashcard Generator
Automatically extracts key terms, definitions, and concepts from articles and turns them into study flashcards.
Key Features
- Auto-extraction — Identifies key terms and their definitions from article content using NLP heuristics
- Deck management — Organize flashcards into named decks by topic, feed, or custom grouping
- Difficulty rating — Cards are rated by difficulty based on term complexity and context
- Spaced repetition scheduling — Integrates with the spaced review system for optimal retention
- Manual creation — Create custom flashcards from any article passage
- Export — Export decks for use in external flashcard apps
API Overview
let generator = ArticleFlashcardGenerator.shared
// Generate flashcards from an article
let cards = generator.generateFlashcards(from: article)
// Create a deck
generator.createDeck(name: "AI Concepts")
generator.addCards(cards, toDeck: "AI Concepts")
// Study mode
let dueCards = generator.getDueCards(deck: "AI Concepts")
generator.markCard(card, difficulty: .medium)
❓ Quiz Generator
Generates comprehension quizzes from article content to test understanding and retention.
Question Types
- Multiple choice — 4-option questions generated from article facts
- True/false — Statement verification based on article claims
- Fill-in-the-blank — Key terms removed from sentences for recall testing
Features
- Difficulty calibration — Adjusts question complexity based on article readability and user performance
- Score tracking — Tracks quiz scores over time with per-topic breakdowns
- Distractor generation — Creates plausible wrong answers from related content
- Quiz history — Review past quizzes and retry missed questions
API Overview
let quizGen = ArticleQuizGenerator.shared
// Generate a quiz from an article
let quiz = quizGen.generateQuiz(from: article, questionCount: 5)
// Access questions
for question in quiz.questions {
print(question.text) // "What protocol does RSS use?"
print(question.options) // ["HTTP", "FTP", "SMTP", "WebSocket"]
print(question.answer) // 0 (index of correct answer)
}
// Submit answers and get score
let result = quizGen.submitQuiz(quiz, answers: userAnswers)
print(result.score) // 0.8 (80%)
print(result.missed) // [QuizQuestion] — wrong answers
🔄 Spaced Repetition Review
SM-2 algorithm implementation for scheduling article reviews at optimal intervals to maximize long-term retention.
How It Works
- Articles are added to the review queue when read
- The SM-2 algorithm calculates the next review date based on your recall quality
- Easy articles get longer intervals; difficult ones are shown sooner
- Over time, intervals grow from days to weeks to months
Review Parameters
| Parameter | Description |
|---|---|
easeFactor | Multiplier for interval growth (starts at 2.5, adjusts per review) |
interval | Days until next review (starts at 1) |
repetition | Number of successful reviews |
quality | Self-rated recall quality (0–5 scale) |
API Overview
let reviewer = ArticleSpacedReview.shared
// Add article to review queue
reviewer.addForReview(articleLink: article.link)
// Get articles due for review today
let dueArticles = reviewer.getDueItems()
// Record a review (quality: 0=forgot, 3=hard, 5=easy)
reviewer.recordReview(articleLink: article.link, quality: 4)
// Check next review date
let nextDate = reviewer.getNextReviewDate(for: article.link)
🔗 Article Threading
Link related articles into narrative threads to follow developing stories over time.
Features
- Manual threading — Link articles together to form story arcs
- Chronological ordering — Threads are automatically sorted by publication date
- Thread navigation — Move forward/backward through a story timeline
- Thread metadata — Title, description, and tag support for each thread
- Cross-feed threads — Connect articles from different sources covering the same story
API Overview
let threads = ArticleThreadManager.shared
// Create a story thread
let threadId = threads.createThread(title: "AI Regulation Updates")
// Add articles to the thread
threads.addEntry(articleLink: article1.link, toThread: threadId)
threads.addEntry(articleLink: article2.link, toThread: threadId)
// Navigate the thread
let entries = threads.getEntries(forThread: threadId)
// Returns chronologically ordered ThreadEntry objects
📝 Article Version Tracking
Detects and tracks changes to articles over time — useful for following corrections, updates, and evolving stories.
Features
- Automatic snapshots — Content is captured when you first read an article
- Change detection — Compares current content against stored snapshots to find updates
- Diff generation — Line-by-line diff showing additions, removals, and modifications
- Version history — Browse all captured versions of an article
- Update alerts — Notification when a tracked article changes
API Overview
let tracker = ArticleVersionTracker.shared
// Snapshot current article state
tracker.captureSnapshot(link: article.link,
title: article.title,
content: article.body)
// Check for changes
let versions = tracker.getVersions(for: article.link)
if versions.count > 1 {
let diff = tracker.diffVersions(
old: versions[0], new: versions[1])
print(diff.additions) // New content added
print(diff.removals) // Content removed
}
🧩 How They Work Together
The learning modules integrate with each other and the rest of FeedReader:
Article Read
│
├── ArticleFlashcardGenerator → Extracts key terms → Flashcard decks
│ │
├── ArticleQuizGenerator ──── → Generates quiz ─────── Score tracking
│ │
├── ArticleSpacedReview ───── → Schedules review ──── Due date queue
│ │
├── ArticleVersionTracker ─── → Captures snapshot ─── Change alerts
│
└── ArticleThreadManager ──── → Links to thread ───── Story timeline
Combined Workflow
- Read an article — version tracker captures a snapshot
- Generate flashcards and a quiz from the content
- Add the article to a story thread if it's part of an ongoing narrative
- Schedule spaced repetition reviews for long-term retention
- Track quiz scores and review performance over time