Flashnotes - Background
What is flashnotes?
Flashnotes = Flashcards + Notes
Learning is time consuming. There are specific methods of reducing the time it takes to learn a subject - one is called the space-repetition algorithm. Read more about it on supermemo
You see these used often when learning a language for the first time. You make flashcards,the front is the word in English, the back is in French let's say. You review your cards over time, and build a knowledge base to form sentences in French. Then you practice speaking in French.
Flashcards have other applications besides learning. Most notably in STEM, especially in the medical field when learning different parts in anatomy, or engineering formulas.
You can review flashcards one of two ways. Both have weaknesses:
- Download someone else's premade deck
- Make your own deck
The former let's you build a knowledge base quickly, but it doesn't give context as to why it's built, leading to poor long term retention.
The latter let's you build a stronger mental connection to that card. Allowing you to remember things better long term. However, it's time consuming writing flashcards by hand
There's always a tradeoff between retaining information long term, and the amount of effort you spend on it.
However, you can have the best of both worlds with FLASHNOTES
Flashnotes - Why it's useful
Learning comes in a few predictable stages:
- You learn the concept by breaking it down
- You apply it
- You remember how you applied it
Flashcards are mostly useful for (1) and (3). Between steps 1,2,3 you'll more than likely take notes along the way of things you learned.
FLASHNOTES let's you focus on what you think is most important, and in the background builds flashcards based off what you write.
This is for instance, how a pre-med student might use flashcards + notes traditionally for an exam
- They outline course notes
- They repeat what they wrote into flashcards
Traditionally, steps (1) and (2) are done in two seperate software solutions (anki and googledocs for instance). This leads to a lot of wasted time, and a lot of context switching.
FLASHNOTES merges these two steps together in a no-context switch fashion. It generates flashcards based off what you write, research, and what you tell it your intents in learning are.
Down the road it will use machine learning to fine tune your preferences.
TL-DR; If you have to learn and memorize lots of things, flashnotes saves you time through scientific proven space-reptition algorithm invented by Piotr Wozniack in 1995
Installation
Go to backend
folder, add your env
keys from env.sample
In root folder, type
npm install
npm run install-client
npm run install-server
npm run dev
On development mode, frontend starts on port 3000, backend port 5000
Road map
-
Toggle switch for rendering front / back of flash card
- Designing MVP data structure locally
- 1st lifecycle and decoupling state
- Styled components to easily modified scss
- Spinner gif placeholder
- Toggle logic for front/back card
- Conditionally render classes
-
Add Routing
- Add routing
- Add Nav Links and styling
- Change routing to
/decks/:id/review
, anddecks/:id/edit
- Refactor Edit/Add card to
/cards/edit/?deckid=deckid
params because this could be done ondecks
ordeck
route. Usehistory
to go back somehow, as user might modify query parameters for search (possibly cache this?)
-
Quiz functionality
- Cards CRUD functionality
- Decks CRUD functionality
- Store score assigned to each card on review (store as a date)
- Generate a space repetition algorithm for updating cards
- Transition cards until queue finished
- End condition - route back to
decks/:id
- additional late features - ability to set {cloze} card types, and other
- Super memo 20 rules outline when adding new cards
-
Position-absolute
on number of cards left in review queue with low opacity, until hovered.
-
Notes functionality
- Use WYSIWYG options to allow user to quickly add questions/answers
-
Accessibility / IME / Language support
- Add ARIA labels for NVDA screen-readers (voice recognize answer using google's speech to text)
- Add i18 language support for multi language support
-
Login / Register / Auth
- Placeholder for login/register
-
Development Tools
- Using a base outline feature for debugging 3rd or 4th level styles
-
Marketing
- Make a nice frontend landing page
- Create a design in Figma
- Add Formspree (possibly just make a non-react homepage, AJAX call features cost money), formcarry, Airtable, or google firebase
Modelling the Space Repetition Algorithm
Memory based flashcard systems uses an algorithm created by Piotr Wozniack in 1995 called the "Space repetition algorithm".
The space-repetition algorithm (e.g. when flashcards need to be reviewed) will be defined under the cards
table. Each card will have a rating from 1-10, 10 being a difficult card. If a card is deemed difficult, it will be seen more frequently in reviews.
Math behind space-repetition algorithm
This blogpost will be used to model the algorithm
http://www.blueraja.com/blog/477/a-better-spaced-repetition-learning-algorithm-sm2
Current issues with existing software on market
- Anki does not let you add images on it's web client
- Desktop client is just more things that aren't needed
- Ankidroid is nice, but really a webapp suffices. (react-native?)
- Anki web client is just not spaced out correctly (not at optimal read-space length of 60-80 chars per line)
Additional Docs
See mocked up data sets currently being used under data
folder. Not entirely secure (need to think about private routes)