/fibonacci-s-sequence-based-flashcards

:memo: Flashcard application using ReactJS and Node.

Primary LanguageJavaScript

🔥 Flash card Application 🔥

execution gif


📋 About:

    This was my final project at CS50 course and my first solo "big" application, so i used many libraries in order to learn them. Its definitely not completly done, so i'm going to maintain it, below has a to-do topic.

🚀 Main technologies used:

Frontend

Backend

Database


📐 How it works?

    Flash cards are based on spaced repetition as you probably know, but what kind of repetition? Well, that's the point that things gets interesting, before i started this project i've searched in many forums and i've found out that its is not that hard, kinda easy though. Many of them are based on a basic math formula, called geometric progression:


An = A1 x Rn-k


Where R is a constant, it could be called the constant of learning. But its very hard to determine the correct value R should have. Therefore, in this project i've decided to use the fibonacci sequence to calculate the revision time for each card.


Fibonacci sequence




Fibonnacci's sequence 0 1 1 2 3 5 8 13 21 34 55
Revision round LP 10°

LP: learning phase


Every single card has its own "log", so let's suppose that the user has a card in the 6° revision round, its log would be [5, 8]. Thus, when the user review the card there'd be these options:

Reset: Reset the card and set it back to learning phase. After the learning phase its log is set to [1, 1], restarting the process.

Easy: This option set the next revision to (5 + 2 * 8) = 21 days, this way setting the log to [13, 21], which means that the user skip the 7° round and goes straight forward to the 8° round.

Good: This option is the obvious one, the user just keep the fibonacci frequence and the next revision time is set to (5 + 8) = 13 days. Therefore setting the log to [8,13].

Hard: The last one, just keep the log the same it is, meaning that the user doesnt evolved this card.


📝 To-do list

  • Add an option to edit a card while reviewing it.
  • Use a library to control the context, therefore won't be needed any reload on the page.
  • Some changes on limit_new_cards and limit_old_cards.

📋 How to use?

# Clone this repositoy
$ git clone git@github.com:saymow/Fibonacci-s-sequence-based-Flashcard.git

# Change into its directory
$ cd Fibonacci-s-sequence-based-Flashcard

# Change into its backend and frontend 

$ cd backend
$ cd frontend

# Run this commands in each of them

# Install dependencies
$ npm install

# Run application.
$ npm start