Skip to content

A geography learning app implementing the SuperMemo-2 (SM-2) spaced repetition algorithm. Built with Flutter, RxDart, and SQLite.

Notifications You must be signed in to change notification settings

libaum/effective_geo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Effective Geo 🌍

Master World Capitals with Spaced Repetition

Flutter Dart SQLite Algorithm

💡 About

Effective Geo is a geography learning application designed to maximize memory retention. Unlike simple quiz apps, it implements the SuperMemo-2 (SM-2) algorithm to schedule reviews based on the user's performance.

If you struggle to recall a capital, the app brings it back quickly. If you know it well, it schedules the next review weeks into the future. It features a comprehensive offline database of countries, flags, and population data.


📱 Screenshots

Home & Progress Flashcard Learning Country Details
Home Screen Flashcard Screen Details Screen

🚀 Key Features

  • 🧠 Spaced Repetition: Uses the SM-2 algorithm to calculate the optimal interval for memory consolidation.
  • 📊 Progress Tracking: Visual charts using fl_chart to monitor mastery levels over time.
  • 💾 Offline First: Complete country database stored locally using SQLite.
  • 🌗 Dark Mode: Fully supported UI theming.
  • Quality Feedback: 4-level rating system (Again, Hard, Good, Easy) directly influencing the scheduling algorithm.

🛠 Tech Stack

  • Framework: Flutter & Dart
  • State Management: rxdart (Reactive Streams)
  • Local Database: sqflite (Raw SQLite interaction)
  • Dependency Injection: get_it
  • Architecture: Service-based architecture separating UI, Logic, and Data.

🧠 The Algorithm (SM-2)

The core logic revolves around the SuperMemo-2 algorithm. Every card has dynamic properties stored in the SQLite database:

  • Interval (I): Days until next review.
  • Repetition Factor (EF): Easiness factor, adjusted based on user rating (0-3).
  • Repetitions (n): Correct streaks.
// Simplified Logic
NextInterval = PreviousInterval * EasinessFactor
NewEasinessFactor = OldEF + (0.1 - (5 - Quality) * (0.08 + (5 - Quality) * 0.02))

This ensures that "hard" cards are shown frequently, while "easy" cards are pushed to long-term memory.


📥 Installation

  1. Clone the repo
git clone https://github.com/libaum/effective_geo.git
  1. Install dependencies
flutter pub get
  1. Run
flutter run

About

A geography learning app implementing the SuperMemo-2 (SM-2) spaced repetition algorithm. Built with Flutter, RxDart, and SQLite.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages