A spaced repetition flashcard application built with Java and JavaFX that implements the Leitner System to help users efficiently memorize and retain information.
FlashCard Pro uses a scientifically-backed spaced repetition algorithm to schedule flashcard reviews at optimal intervals. Cards progress through five boxes as you answer correctly, with increasing review intervals — helping you focus on what you don't know while reinforcing what you do.
| Box | Review Interval | Status |
|---|---|---|
| 1 | Every 1 day | New / Reset |
| 2 | Every 2 days | Learning |
| 3 | Every 4 days | Familiar |
| 4 | Every 7 days | Confident |
| 5 | Every 14 days | Mastered |
- Correct answer — card advances to the next box
- Incorrect answer — card resets to Box 1
- Create & Manage Flashcards — add question/answer pairs and organize them into decks
- Smart Review Sessions — only review cards that are due, sorted by priority
- Progress Tracking — view statistics including total cards, cards due today, and mastery percentage
- Save & Load Decks — persist your progress to file and resume anytime
- Dual Interface — use the modern JavaFX desktop GUI or the console-based CLI
- Language: Java 21
- GUI: JavaFX 21 (FXML + ControlsFX)
- Build Tool: Maven
- Testing: JUnit 5
- Java 21 or higher
- Maven 3.8+ (or use the included Maven wrapper)
git clone https://github.com/lastiroko/Flashcard-pro.git
cd Flashcard-pro./mvnw clean install./mvnw javafx:run./mvnw compile exec:java -Dexec.mainClass="com.example.flashcardpro.MainApp"./mvnw testsrc/
├── main/
│ ├── java/com/example/flashcardpro/
│ │ ├── MainFX.java # JavaFX GUI entry point
│ │ ├── MainApp.java # Console CLI entry point
│ │ ├── Controller.java # JavaFX UI controller
│ │ ├── Card.java # Abstract base class
│ │ ├── Flashcard.java # Core flashcard model (Leitner logic)
│ │ ├── Deck.java # Flashcard collection manager
│ │ └── module-info.java # Java module configuration
│ └── resources/com/example/flashcardpro/
│ └── MainView.fxml # JavaFX UI layout
└── test/com/example/flashcardpro/
└── FlashcardTest.java # Unit tests (Flashcard + Deck)
The application follows the MVC (Model-View-Controller) pattern:
- Model —
Card(abstract),Flashcard,Deck - View —
MainView.fxml - Controller —
Controller.java
Decks are saved as plain text files with the following format:
question###answer###box###nextReviewDate
This allows easy portability and human-readable deck files.
Philip Olaomo — s240904